给一个带有PRIMARY KEY (pkey, ckey_a, ckey_b, etc) WITH CLUSTERING ORDER BY (ckey_a, ckey_b, etc)
的表,是否可以通过select语句从特定主键/宽行中获取每个ckey_b
分组的前30条记录?
答案 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,以按组限制数量,而将其余部分丢弃。尽管这很昂贵,但是由于协调器仍然可以获取所有值,因此只需过滤掉它们,然后再发送回客户端即可。