2017-02-03 23 views
0

Я пытаюсь создать таблицу, которая соответствует следующим данным:Создать таблицу в Кассандре с колонкой кортежей произвольной длиной

[("US",20150914,(("GOV",7),("POL",9))),("PA",20150914,(("EDU",7),("POL",9),("MON",20))),("US",20150914,(("GOV",7)))] 

У меня есть создать следующую таблицу:

CREATE TABLE gdelt.world_patterns (country varchar, date int, mention tuple <tuple<text, int>,tuple<text, int>,tuple<text, int>>, PRIMARY KEY (country, date)); 

Моих проблема в том, что Cassandra будет хранить мои кортежи длиной три правильно. Могу ли я хранить кортежи любой длины? Я не уверен, как это написать.

Вот картина моей текущей таблицы: enter image description here

ответ

1

У вас есть несколько вариантов здесь: (магазин как текст, который в порядке, но я не думаю, что вы действительно хотите)

Использование карты (может быть лучше, но не знаю, если вы хотите заморачиваться с декодированием)

CREATE TABLE world_patterns (
    country varchar, 
    date int, 
    mention map<text, int>, 
    PRIMARY KEY (country, date) 
); 

INSERT INTO world_patterns(country, date, mention) values ('LA', 20150704, { 'US' : 20150914, 'GOV': 7, 'POL': 9}) ; 

Используйте список кортежей (только небольшое изменение вашей вещи [] вместо())

CREATE TABLE world_patterns (
    country varchar, 
    date int, 
    mention mention list<frozen<tuple<text,int>>>, 
    PRIMARY KEY (country, date) 
); 

    INSERT INTO world_patterns(country, date, mention) values ('LA', 20150704, [('US', 20150914), ('GOV',7), ('POL',9)]) ; 
1
CREATE TABLE gdelt.world_patterns (
    country varchar, 
    date int, 
    mention text, ---- Json 
PRIMARY KEY (country, date)); 

Сохранить значение кортежа, как Json строки, таким образом, вам не придется беспокоиться о количестве кортежей.

 {"tuple": { 
     "country": "us", 
     "date": "20150704", 
     "mention": 
      [ 
      {"text": "value"}, 
      {"text": "value"}, 
      {"text": "value"}, 
      ] 
    }} 

Опционально вы можете поставить contry и date в json.

+0

Спасибо за ответ. Ответ, который вы мне дали, вдохновил меня на некоторые исследования. Принятый ответ выше этой карты хорошо работал с тем, что я сейчас делаю. – CatherineAlv

 Смежные вопросы

  • Нет связанных вопросов^_^