使用复合主键在一个选择中选择多个Cassandra行

时间:2013-12-12 21:32:01

标签: nosql cassandra cql

我正在尝试使用CQL3对Cassandra编写一个select语句,它将返回多行。在正常情况下,我可以使用IN语句指定分区键,但我的用例的皱纹是我正在处理复合分区键。

例如:

create table MyTable (
  my_key_1 text,
  my_key_2 text,
  my_value text,
  primary key ((my_key_1, my_key_2))
);

使用此表结构,我想在单个查询中按键值选择以下行。

Row 1: my_key_1 = 'key1value1', my_key_2 = 'key2value1'
Row 2: my_key_1 = 'key1value2', my_key_2 = 'key2value2'

这可能吗?为了论证,我知道我可以用my_key_1创建一个分区密钥和my_key_2的集群密钥,但是“my_key_1”将非常密集,并且最好用my_key_2作为分区密钥。

我尝试使用select * from MyTable where my_key_1 in ('key1value1', 'key1value2') and my_key_2 in ('key2value1', 'key2value2'),但是我收到一个错误,分区键的最后一部分可以包含在这样的IN列表查询中。那么,有没有办法做到这一点,或者我是否必须将my_key_1 + my_key_2值“具体化”为主键并进行查询?

1 个答案:

答案 0 :(得分:0)

不幸的是,从2.0.5开始,CQL不支持此功能。如果您查看实现复合键的original work item,由于实现的复杂性,特别省略了对多个组合的查询。

现在你唯一的办法是将客户端的密钥组合在一起,并将它们视为Cassandra中的一列(或者你可以将多行查询分解为几个单行)

相关问题