時間序列數據建模我有這樣的一個表:範圍查詢 - 在CQL卡桑德拉
CREATE TABLE測試(partitionkey文字,rowkey文本,日期 時間戳,策略ID文本,policyname文字,主鍵 (partitionkey,rowkey));
一些數據:
partitionkey | rowkey | policyid | policyname |日期
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 /是微不足道:
SELECT * FROM測試,其中partitionkey = 'P1';
partitionkey | rowkey | policyid | policyname |範圍
p1 | r1 | pl1 | plicy1 | 2007-01-02 00:00:00+0000 p1 | r2 | pl2 | plicy2 | 2007-01-03 00:00:00+0000
但對於3 /? 即使有索引它也不起作用:
在測試(日期)上創建索引i1;
select * from test where partitionkey ='p1'and date = '2007-01-02';
partitionkey | rowkey | policyid | policyname |日期
p1 | r1 | pl1 plicy1 | 2007-01-02 00:00:00+0000
但
SELECT * FROM測試,其中partitionkey = 'P1' 和 日期> '2007-01-02';
請求無效:無索引列存在於 逐列條款與平等運營商
任何想法? 感謝, 馬特
只要查詢有一個'allow filtering'子句(消息_Bad Request:無法執行此查詢,因爲它可能涉及數據過濾,因此可能具有不可預知的性能。性能不可預測性,請使用ALLOW FILTERING_)。這是爲什麼?它如何影響性能? –
我想你會看到那個警告,因爲你的'rowkey'沒有在該查詢中指定。我引用的例子只使用了分區鍵和日期作爲主鍵......我想你可以嘗試將rowkey定義爲分區鍵'primary key((partitionkey,rowkey),date)'的一部分,然後看看是否這有助於。 – Aaron
當然,但這需要我爲'rowkey'添加一個我不總是擁有的子句。我想我會接受第一個解決方案,謝謝。 –