我正在尝试使用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 回答
不幸的是,从2.0.5开始,CQL不支持此功能 . 如果查看实现复合键的original work item,由于实现的复杂性,特别省略了对多个组合的查询 .
现在你唯一的办法是将客户端的密钥组合在一起,并将它们视为Cassandra中的一列(或者你可以将多行查询分解为几个单行)