Cassandra(Pycassa/CQL)返回部分匹配
我试图在Cassandra中的一个列族中进行部分搜索,类似于SQL查询:SELECT*FROM columnfamily,其中col='val*'其中val*表示至少匹配前三个字符'val'的任何值Cassandra(Pycassa/CQL)返回部分匹配,cassandra,cql,pycassa,Cassandra,Cql,Pycassa,我试图在Cassandra中的一个列族中进行部分搜索,类似于SQL查询:SELECT*FROM columnfamily,其中col='val*'其中val*表示至少匹配前三个字符'val'的任何值 我已经阅读了SELECT函数,但似乎找不到对部分WHERE条件的任何支持。有什么想法吗 在Cassandra中没有这样的通配符支持,但是您可以通过这种方式对数据建模,从而获得相同的最终结果 您将获取要对其执行此查询的列,并将其反规范化为第二个列族。此CF将有一个宽行,列名称作为要对其执行通配符查询的
我已经阅读了SELECT函数,但似乎找不到对部分WHERE条件的任何支持。有什么想法吗 在Cassandra中没有这样的通配符支持,但是您可以通过这种方式对数据建模,从而获得相同的最终结果 您将获取要对其执行此查询的列,并将其反规范化为第二个列族。此CF将有一个宽行,列名称作为要对其执行通配符查询的
列的值。此CF的列值可以是原始CF的行键,也可以是原始行的其他表示形式
然后,您将使用切片来获取您关心的值。例如,如果这是要切片的宽行:
+---------+----------+--------+----------+---------+--------+----------+
| RowKey | aardvark | abacus | abacuses | abandon | accent | accident |
| +----------+--------+----------+---------+--------+----------+
| | | | | | | |
| | | | | | | |
+---------+----------+-----------------------------+--------+----------+
使用CQL,您可以使用以下查询*选择以“aba*”开头的所有内容:
SELECT 'aba'..'abb' from some_cf where RowKey = some_row_key;
这将为您提供“算盘”、“算盘”和“放弃”列
这一策略需要注意以下几点:
- 在上面的例子中,如果您有相同的列名,您需要有一些方法来区分它们(否则插入到宽列族中会破坏其他有效值)。可以这样做的一种方法是使用一个包含
word
:一些唯一值的组合列
- 上述模型只允许在字符串末尾使用通配符。字符串开头的通配符也可以通过一些修改轻松处理。字符串中的通配符会更具挑战性。<李>
请记住,Cassandra并没有为您提供一种简单的方法来执行临时查询。相反,您需要弄清楚如何使用这些数据,并相应地为您的CFs建模。查看Ed Anuff的这篇博文,了解更多关于此类数据建模的信息
*请注意,在即将发布的Cassandra中,用于切片列的CQL语法正在更改。谢谢!这正是我所需要的:)如何“将其反规范化为第二列族”?如果我有一把像aardvark.abacus.abacus这样的钥匙,我想要任何以*.abacus结尾的东西