Cassandra 中的列排序

Columns ordering in Cassandra

当我在 CQL 中创建 table 时,primary_key 和 NOT 中的列的顺序是否必须准确 primary_key 和 NOT 集群列:

CREATE TABLE user (
    a ascii,
    b ascii,
    c ascii,
    PRIMARY KEY (a)
);

是否等同于?

CREATE TABLE user (
    a ascii,
    c ascii, <-- switched
    b ascii, <-- switched
    PRIMARY KEY (a)
);

感谢您的帮助

这两个语句都会失败,因为:

  • 多余的逗号。
  • 您还没有提供主键定义。

假设您已修复这些问题,那么答案仍然是 "yes they are the same."

Cassandra 在 table 创建时将自己的顺序应用于您的列。考虑一下我输入的 table:

CREATE TABLE testorder ( 
  acolumn text,
  jcolumn text,
  dcolumn text,
  bcolumn text,
  apkey text,
  bpkey text,
  ackey text,
  bckey text,
  PRIMARY KEY ((bpkey,apkey),bckey,ackey));

创建后,我将描述 table 以便您可以看到 Cassandra 应用到列的顺序。

aploetz@cqlsh:Whosebug> desc table testorder ;

CREATE TABLE Whosebug.testorder (
    bpkey text,
    apkey text,
    bckey text,
    ackey text,
    acolumn text,
    bcolumn text,
    dcolumn text,
    jcolumn text,
    PRIMARY KEY ((bpkey, apkey), bckey, ackey)
) WITH CLUSTERING ORDER BY (bckey ASC, ackey ASC)

本质上,Cassandra 将对分区键和集群键进行排序(按它们在 PRIMARY KEY 定义中的优先级排序),然后列按升序排列。