Как обращаться с колонками Dynami c в Кассандре - PullRequest
1 голос
/ 09 марта 2020

Я загружаю JSON данные в таблицу Cassandra с помощью скрипта Python. Но несколько Json файлов имеют больше столбцов, чем обычно. В настоящее время я создал таблицу с 100 столбцами и могу вставить все. Но есть вероятность, что несколько файлов json будут иметь более 100 столбцов. Как справиться с этим? Можно ли как-нибудь создать динамические c столбцы, если Json имеет больше столбцов, чем таблица?

1 Ответ

1 голос
/ 09 марта 2020

Если вы используете CQL, то вам нужно определить все столбцы перед вставкой данных. Теоретически вы можете использовать ALTER TABLE add ... для добавления новых столбцов, но обычно это не рекомендуется делать программно, так как это может вызвать несогласие со схемой и другие проблемы.

Вы можете обойти эту проблему следующим образом:

  1. Сохраните JSON в виде текста в дополнение к первичному ключу и наиболее часто используемым столбцам, а затем проанализируйте данные при их чтении (это можно сделать даже автоматически в Java driver 3.x с помощью дополнительные кодеки ;
  2. Сохранение данных на картах (лучше всего использовать замороженную карту, если вы не будете обновлять отдельные значения) с ключом как text и значением, соответствующим фактическому типу значения - int , text, et c. Например:
create table test (
  pk1 ..,
  pk2 ..,
  pkN ..,
  imap frozen<map<text, int>,
  tmap frozen<map<text, text>,
  ...
  primary key(pk1, pk2, ...)
);

, а затем в вашем коде разделить столбцы по типам и вставить в соответствующую карту.

...