Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra(Pycassa/CQL)返回部分匹配_Cassandra_Cql_Pycassa - Fatal编程技术网

Cassandra(Pycassa/CQL)返回部分匹配

Cassandra(Pycassa/CQL)返回部分匹配,cassandra,cql,pycassa,Cassandra,Cql,Pycassa,我试图在Cassandra中的一个列族中进行部分搜索,类似于SQL查询:SELECT*FROM columnfamily,其中col='val*'其中val*表示至少匹配前三个字符'val'的任何值 我已经阅读了SELECT函数,但似乎找不到对部分WHERE条件的任何支持。有什么想法吗 在Cassandra中没有这样的通配符支持,但是您可以通过这种方式对数据建模,从而获得相同的最终结果 您将获取要对其执行此查询的列,并将其反规范化为第二个列族。此CF将有一个宽行,列名称作为要对其执行通配符查询的

我试图在Cassandra中的一个列族中进行部分搜索,类似于SQL查询:SELECT*FROM columnfamily,其中col='val*'其中val*表示至少匹配前三个字符'val'的任何值


我已经阅读了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结尾的东西