我有一张 Cassandra 表,上面有5'键'列和值。我想知道是否有办法 - 仅使用一个表 - 来扫描关键列的组合。我很好用'固定'一个找到下一个的值但是找不到C *的正确语法来完成这样的事情。
我尝试过的事情:
PRIMARY KEY(a, b, c, d, e)
select distinct a from <table name>
- 这可行,并提供明确的&#39; 确定。凉。
PRIMARY KEY(a, b, c, d, e)
select distinct b from table where a = <some known value>
- 这不起作用并报告WHERE clause only supports restriction by partition key
精细。我会更具体。
PRIMARY KEY((a, b, c), d, e)
select distinct a from <table name>
- 无法工作并报告Partition key parts: resource must be restricted as other parts are
好的..甚至更多具体
PRIMARY KEY((a, b, c), d, e)
select distinct c from <table name> where a = <known value> and b = <another known value>
- 报告WHERE clause only supports restriction by partition key
很清楚,我不知道如何在C *中使用 distinct 关键字。
问题:
是否可以找到分区键的不同组合?
有另一种方法可以达到这个目的吗?对所有子集使用查找表?
(在CentOS 6上使用cassandra 3.9)
答案 0 :(得分:2)
distinct关键字仅在所有(CQL3)分区键列上都有效。
因此,在您的情况下,以下查询有效,因为在这种情况下,分区键是。
select distinct a from <table name>
在第二种情况下select distinct b
无效,因为b不是分区键。
如果您使用PRIMARY KEY((a, b, c), d, e)
您必须在所有分区键上使用distinct。在这种情况下,您有复合分区键a,b,c。
因此,在您的不同列表中,您必须指定所有三个。
您可以在此处阅读补丁https://issues.apache.org/jira/secure/attachment/12598894/4536.txt
查找方法 validateDistinctSelection ,您可以看到用于允许不同选择的各种条件。