cassandra选择distinct并按cqlsh排序

tct7dpnv  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(484)

我对Cassandra和这个论坛都是新手。我正在使用cqlsh执行cassandra查询,但是我不知道如何执行像sql这样的查询 select distinct a, b, c from table order by d asc 使用Cassandra。我该怎么办?这张table的结构是什么?

kknvjkwl

kknvjkwl1#

你的 primary key 包括 partition keys 以及 clustering columns .
不同的查询只能请求分区键。
群集列上支持order by。
假设我们有一个如下的样表,

CREATE TABLE Sample ( 
 field1 text,
 field2 text,
 field3 text,
 field4 text,
 PRIMARY KEY ((field1, field2), field3));

distinct要求以逗号分隔传递所有分区键。
所以你不能运行这个查询 select distinct field1 from Sample; . 一个有效的表达式是 select distinct field1, field2 from Sample; .
它会在集群中的所有节点上找到所有的分区键,因此,如果表中有数百万个分区,我预计多个节点的性能会下降。
默认情况下,字段3的记录将按升序排列。下面的查询将按字段3的降序提供记录。

select * from Sample where field1 = 'a' and field2 = 'b' order by field3 desc;

如果您已经知道您的查询模式以及需要对数据进行排序的方式,那么可以用这种方式设计表。假设您总是要求字段3的记录按降序排列,您可以这样设计表。

CREATE TABLE Sample ( 
 field1 text,
 field2 text,
 field3 text,
 field4 text,
 PRIMARY KEY ((field1, field2), field3))
WITH CLUSTERING ORDER BY (field3 DESC);

现在不按order by查询将得到相同的结果。
可以对多个聚集列使用order by。但你不能跳过这道菜。为了理解这一点,让我们有一个如下的示例表,

CREATE TABLE Sample1 ( 
 field1 text,
 field2 text,
 field3 text,
 field4 int,
 field5 int,
 PRIMARY KEY ((field1, field2), field3, field4));

我加了几张假唱片。

您可以像这样使用order by multiple columns select * from Sample1 where field1 = 'a' and field2 = 'b' order by field3 desc, field4 desc; 注意:所有字段都必须是正序( field3 asc, field4 asc )或负序( field3 desc, field4 desc ). 你不能这么做( field3 asc, field4 desc )反之亦然。
上面的查询将导致这个。

通过写作,我们不能跳过顺序,我的意思是我们不能做类似的事情 select * from Sample1 where field1 = 'a' and field2 = 'b' order by field4 desc; 我希望这有帮助!

相关问题