c * - 理解'选择不同的'使用

时间:2016-11-23 17:53:08

标签: cassandra

我有一张 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)

1 个答案:

答案 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 ,您可以看到用于允许不同选择的各种条件。