在Cassandra订购的列

时间:2016-01-06 14:39:19

标签: cassandra cql

当我在CQL中创建表时,是否必须精确确定primary_key和 NOT 聚类列中 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)
);

感谢您的帮助

1 个答案:

答案 0 :(得分:5)

这两个陈述都会失败,因为:

  • 额外的逗号。
  • 您尚未提供主键定义。

假设你已经修好了,那么答案仍然是“是的,它们是相同的”。

Cassandra在创建表时将自己的订单应用于您的列。考虑这个表,因为我输入了它:

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));

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

aploetz@cqlsh:stackoverflow> desc table testorder ;

CREATE TABLE stackoverflow.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定义中的优先级排序)进行排序,然后列按升序排列。