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