是否可以从分区中的每个聚类键Y中选择X条记录?

时间:2018-12-30 12:05:33

标签: cassandra nosql

给一个带有PRIMARY KEY (pkey, ckey_a, ckey_b, etc) WITH CLUSTERING ORDER BY (ckey_a, ckey_b, etc)的表,是否可以通过select语句从特定主键/宽行中获取每个ckey_b分组的前30条记录?

2 个答案:

答案 0 :(得分:2)

Cassandra支持使用SELECT * FROM ks.table PER PARTITION LIMIT N;语法限制结果per partition only的数量。但是,例如,如果从PRIMARY KEY (pkey, ckey_a, ckey_b)切换到PRIMARY KEY ((pkey, ckey_a), ckey_b),就可以实现所需的功能,但这取决于您的查询。

答案 1 :(得分:2)

您可以执行SELECT * FROM table GROUP BY pkey, ckey_a, ckey_b来从ckey_b获取唯一性和ckey_c等。您可以按分区进行限制(请参阅alex的答案),但当前不能按组进行限制。如果您的查询不经常调用(这很昂贵),则可以创建与GROUP BY结合使用的UDA,以按组限制数量,而将其余部分丢弃。尽管这很昂贵,但是由于协调器仍然可以获取所有值,因此只需过滤掉它们,然后再发送回客户端即可。