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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以从分区中的每个聚类键Y中选择X记录?相关的知识,希望对你有一定的参考价值。

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

答案

您可以使用SELECT * FROM table GROUP BY pkey, ckey_a, ckey_b从ckey_b获取唯一的和ckey_c等。您可以通过分区限制(请参阅alex的答案),但您目前无法限制该组。如果您的查询不经常调用(这很昂贵),您可以创建一个与GROUP BY结合的UDA,以限制组的数量,丢弃其余的。这是非常昂贵的,因为协调器仍然获取所有值,只是在发送回客户端之前过滤掉它们。

另一答案

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

以上是关于是否可以从分区中的每个聚类键Y中选择X记录?的主要内容,如果未能解决你的问题,请参考以下文章

聚类键列必须与 CLUSTERING ORDER BY 指令中的列完全匹配

Cassandra 复合聚类键和排序查询

Cassandra 更新 - 带有时间戳聚类键的“位置”

在雪花中设置表自动聚类不会对表进行聚类

OPTICS(聚类)算法的 Python 实现

PL/SQL 插入和分区