我对Cassandra和这个论坛都是新手。我正在使用cqlsh执行cassandra查询,但是我不知道如何执行像sql这样的查询 select distinct a, b, c from table order by d asc 使用Cassandra。我该怎么办?这张table的结构是什么?
select distinct a, b, c from table order by d asc
kknvjkwl1#
你的 primary key 包括 partition keys 以及 clustering columns .不同的查询只能请求分区键。群集列上支持order by。假设我们有一个如下的样表,
primary key
partition keys
clustering columns
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 distinct field1 from Sample;
select distinct field1, field2 from Sample;
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; 我希望这有帮助!
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;
1条答案
按热度按时间kknvjkwl1#
你的
primary key
包括partition keys
以及clustering columns
.不同的查询只能请求分区键。
群集列上支持order by。
假设我们有一个如下的样表,
distinct要求以逗号分隔传递所有分区键。
所以你不能运行这个查询
select distinct field1 from Sample;
. 一个有效的表达式是select distinct field1, field2 from Sample;
.它会在集群中的所有节点上找到所有的分区键,因此,如果表中有数百万个分区,我预计多个节点的性能会下降。
默认情况下,字段3的记录将按升序排列。下面的查询将按字段3的降序提供记录。
如果您已经知道您的查询模式以及需要对数据进行排序的方式,那么可以用这种方式设计表。假设您总是要求字段3的记录按降序排列,您可以这样设计表。
现在不按order by查询将得到相同的结果。
可以对多个聚集列使用order by。但你不能跳过这道菜。为了理解这一点,让我们有一个如下的示例表,
我加了几张假唱片。
您可以像这样使用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;
我希望这有帮助!