2014-02-07 5 views
1

У меня есть таблица вроде этого:Диапазона запросов - Моделирование данных временных рядов в CQL Кассандра

CREATE теста TABLE (PartitionKey текста, RowKey текста, дата метки времени, policyid текст, policyname текста, первичного ключа (partitionkey, rowkey));

с некоторыми данными:

PartitionKey | rowkey | Политика | Полицейская | Дата

 p1 | r1 | pl1 | plicy1 | 2007-01-02 00:00:00+0000 
    p1 | r2 | pl2 | plicy2 | 2007-01-03 00:00:00+0000 
    p2 | r3 | pl3 | plicy3 | 2008-01-03 00:00:00+0000 

Я хочу, чтобы иметь возможность найти:

1/ data from a particular partition key 
2/ data from a particular partition key & rowkey 
3/ Range query on date given a partitionkey 

1/и 2/тривиальны:

выберите * из теста, где PartitionKey = 'p1';

разделkey | rowkey | Политика | Полицейская | Диапазон

p1 |  r1 |  pl1 |  plicy1 | 2007-01-02 00:00:00+0000 
    p1 |  r2 |  pl2 |  plicy2 | 2007-01-03 00:00:00+0000 

а как насчет 3 /? Даже с индексом он не работает:

создать индекс i1 в тесте (дата);

выберите * из теста, где partitionkey = 'p1' и дата = '2007-01-02';

разделkey | rowkey | Политика | Полицейская | Дата

p1 | r1 | pl1 plicy1 | 2007-01-02 00:00:00+0000 

но

выберите * из теста, где PartitionKey = 'p1' и дата> '2007-01-02';

Bad Request: Нет индексированные столбцы присутствуют в по-столбцами пункта с Равным оператора

Любая идея? спасибо, Matt

ответ

2

CREATE TABLE тест (PartitionKey текст, RowKey текст, дата временной метки, policyid текст, policyname текст, первичный ключ (PartitionKey, RowKey));

Прежде всего, вам следует использовать более описательные имена столбцов вместо разделов и rowkey (и даже даты, если на то пошло). Посмотрев на эти имена столбцов, я действительно не могу сказать, какие данные эта таблица должна быть проиндексирована.

select * from test where partitionkey='p1' and date > '2007-01-02'; 

Bad Request: Нет индексированные столбцы не представляют в по-колоннах положение с Равным оператора

Что касается этого вопроса, попробуйте сделать ваш столбец «Дата» часть первичного ключа.

primary key (partitionkey, rowkey, date) 

Как только вы это сделаете, я думаю, что ваши запросы диапазона дат будут работать надлежащим образом.

Для получения дополнительной информации, ознакомьтесь с курсом DataStax Academy's (бесплатно), который называется Java Development с Apache Cassandra. Сессия 5, модуль 104 обсуждает, как моделировать данные временных рядов, и это должно помочь вам.

+0

Правильно это работает, если запрос имеет условие разрешить фильтрацию (сообщение _Bad Request: не может выполнить этот запрос, поскольку он может включать фильтрацию данных и, следовательно, может иметь непредсказуемую производительность. Если вы хотите выполнить этот запрос, несмотря на непредсказуемость производительности, используйте ALLOW FILTERING_). Почему это и как это влияет на производительность? –

+1

Я думаю, что вы видите это предупреждение, потому что ваш 'rowkey' не указан в этом запросе. В примере, на котором я ссылался, использовался только ключ раздела и дата в качестве первичного ключа ... Я полагаю, вы могли бы попытаться определить свою строку в качестве части ключа раздела «первичный ключ» ((раздел, строка), дата) и посмотреть, что помогает. – Aaron

+0

Конечно, но тогда мне нужно добавить предложение для «rowkey», которое у меня никогда не было. Я думаю, я буду жить с первым решением, спасибо. –

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