Заказ колонок в Кассандре


Когда я создаю таблицу в CQL, нужно ли быть точным для порядка столбцов, которые Не в primary_key и Не кластеризуют столбцы:

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 3

1 ответ:

Оба эти утверждения будут неудачными, потому что:

  • лишняя запятая.
  • вы не предоставили определение первичного ключа.

Предполагая, что вы их зафиксировали, то ответ все равно: "да, они одинаковы."

Кассандра применяется свой порядок своей колонны во время создания таблицы. Рассмотрим эту таблицу так, как я ее набрал:

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

После его создания я опишу таблицу, чтобы вы могли увидеть порядок, который Кассандра применила к столбцы.

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 упорядочивает ключи секционирования и ключи кластеризации (упорядоченные по их приоритету в определении первичного ключа), а затем столбцы следуют в порядке возрастания.