Cassandra error: "Clustering key columns must exactly match columns in CLUSTERING ORDER BY directive"

Cassandra error: "Clustering key columns must exactly match columns in CLUSTERING ORDER BY directive"

我是运行一个cassandra查询,其实以前做过这个。但现在我无法执行查询,它会抛出错误:

    Cassandra error: InvalidRequest: Error from server: code=2200 [Invalid query] message="Clustering key columns must exactly match columns in CLUSTERING ORDER BY directive"

我的查询是:

    CREATE TABLE statistics(country_name text, dt date, confirmed_cases bigint, deaths bigint, 
    PRIMARY KEY(deaths))with clustering order by (deaths DESC);

请帮忙!

发生这种情况是因为您只指定了一个 PRIMARY KEY。单个 PRIMARY KEY 默认成为 分区键 。所以这里有两个问题:

  • 您需要定义一个集群键。
  • 您正试图通过您的分区键强制执行顺序。

这里有几个选项。但是由于您想要按 deaths 排序,您可能应该指定一个不同的列作为您的分区键。也许按 country_name 划分?

...
PRIMARY KEY (country_name,deaths))
WITH CLUSTERING ORDER BY (deaths DESC);

需要注意的是,您需要在 WHERE 子句中 also/always 按 country_name 过滤。

Cassandra 中的主键由一个或多个分区键和零个或多个聚簇键组成。这些组件的顺序始终是分区键在前,然后是集群键。

本例中的 deaths 列是分区键而不是集群键

例如,在下面的查询结构中,名称 1 是分区键,名称 2 是集群键。

 CREATE TABLE IF NOT EXISTS
 table(column name1 data type,
 column name2 data type,
 column name3 data type,   
 PRIMARY KEY(name1,name2))
 with clustering order by (name2 DESC);

在此处查找更多信息Cassandra keys