我正在尝试对Cassandra中的列族进行部分搜索,类似于SQL查询: SELECT * FROM columnfamily WHERE col = ' val*‘,其中val*表示匹配至少前三个字符'val’的任何值。
我已经阅读了SELECT函数上的datastax's documentation,但似乎找不到任何对部分WHERE条件的支持。有什么想法吗?
发布于 2012-04-08 00:56:18
在Cassandra中没有这样的通配符支持,但是您可以通过某种方式对数据进行建模,从而获得相同的最终结果。
您将获取要对其执行此查询的列,并将其反规范化到第二个列族中。此CF将有一个单独的宽行,其中列名作为要在其上执行通配符查询的col的值。此CF的列值可以是原始CF的行键,也可以是原始行的某些其他表示。
然后,您将使用切片来获取您所关心的值。例如,如果这是要切片的宽行:
+---------+----------+--------+----------+---------+--------+----------+
| RowKey | aardvark | abacus | abacuses | abandon | accent | accident |
| +----------+--------+----------+---------+--------+----------+
| | | | | | | |
| | | | | | | |
+---------+----------+-----------------------------+--------+----------+使用CQL,您可以使用以下查询选择以'aba*‘开头的所有内容*
SELECT 'aba'..'abb' from some_cf where RowKey = some_row_key;这将为您提供“算盘”、“算盘”和“放弃”列。
关于这个策略,有一些事情需要注意:
wordsome_unique_value.请记住,Cassandra没有提供一种简单的方法来执行即席查询。相反,您需要弄清楚如何使用数据,并对CFs进行相应的建模。看看Ed Anuff在indexing data in Cassandra上的这篇博客文章,了解更多关于建模数据的信息。
*请注意,在即将发布的Cassandra中,用于切分列的CQL语法正在发生变化。
https://stackoverflow.com/questions/10048506
复制相似问题