2013-04-15 6 views
14

Я пытаюсь создать широкий столбец таблицы, столбцы 20000выбрать конкретные значения из карты

Первоначально я думал, я хотел бы использовать:

CREATE TABLE details (
    key TEXT, 
    detail map<TEXT, TEXT> 
    PRIMARY KEY (KEY) 
); 

Вставка в эту таблицу работает отлично

UPDATE details SET detail = detail + { 'col1': '12'} where key='123' ; 
UPDATE details SET detail = detail + { 'col20000': 'ABCD'} where key='123' ; 

Однако, я хотел бы читать отдельные детали:

select detail[col1] where key='123' 

при выполнении этого запроса я получаю следующее сообщение об ошибке:

no viable alternative at input '[' 

Будет ли это работать, или мне нужен другой подход?

ответ

6

В основном эта функциональность еще не поддерживается cassandra.

Смотреть это cql3 collections

12

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

Если вы хотите получить доступ к наборам на уровне более тонкой, и все еще быть в состоянии спросить «что все пары данных для данного ключа,» вы должны использовать таблицу, как это:

CREATE TABLE details (
    key TEXT, 
    detail_key text, 
    detail_value text, 
    PRIMARY KEY (key, detail_key) 
); 

Это позволит использовать SELECT * FROM details WHERE key = ?, а также SELECT * FROM detail WHERE key = ? AND detail_key = ?.

+0

Спасибо, это подход, который я принял. – e90jimmy

+0

Все еще не вижу его 3.9, интересно, в чем причина, не смог его найти. AFAIK, они хранятся как сами столбцы. «Частичные чтения столбцов сбора данных невозможны на CQL. Единственный способ получить данные из коллекции - это прочитать коллекцию целиком, поэтому нецелесообразно хранить большие неограниченные наборы данных в столбце коллекции« https://github.com/apache/cassandra/blob/cassandra-3.6/CHANGES.txt – kisna

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