2015-07-01 6 views
2

В основном здесь, как моя таблица создана:В cassandra cqlsh, как я могу выбрать из карты <ascii, ascii> в таблице?

CREATE TABLE points (
    name ascii, 
    id varint, 
    attributes map<ascii, ascii>, 
    PRIMARY KEY (name, id) 
) 

и если я запускаю следующий ЗЕЬЕСТ я получаю это возвращается:

SELECT id, attributes from points limit 5;

id | attributes 
    ----+------------------------------------------ 
    1 | {STATION/Name: ABC, Type: 2, pFreq: 101} 
    2 | {STATION/Name: ABC, Type: 1, pFreq: 101} 
    3 | {STATION/Name: DEF, Type: 1, pFreq: 103} 
    4 | {STATION/Name: GHI, Type: 2, pFreq: 105} 
    5 | {STATION/Name: GHI, Type: 1, pFreq: 105} 

То, что я хотел бы сделать может формировать предложение WHERE, основанное на информации внутри атрибутов. Что-то вроде следующего утверждения:

SELECT id FROM points WHERE name = 'NAME' AND attributes['pFreq'] = 101;

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

Bad Request: line 1:56 no viable alternative at input '['

Я смотрел на this обсуждение и кажется, что он не поддерживается все же, это правда? Или есть способ фильтровать информацию об атрибутах?

Вот варианты я работаю с:

[cqlsh 4.1.1 | Cassandra 2.0.7 | CQL spec 3.1.1 | Thrift protocol 19.39.0] 

ответ

1

Да, правда, вместо этого вы можете использовать СОДЕРЖИТ:

SELECT * FROM points WHERE attributes CONTAINS 101; 
+0

Когда я использую СОДЕРЖИТ я получаю следующее сообщение об ошибке: Bad Request : строка 1: 104 нет жизнеспособной альтернативы на входе 'CONTAINS' –

+0

вы можете использовать карту вместо ascii ?, или является обязательным использованием ascii? – Makoton

+0

Можете ли вы выполнить ?: создать индекс по точкам (атрибутам); – Makoton