首页 文章

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

提问于
浏览
1

我正在尝试使用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

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

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

相关问题