2014-12-29 60 views
1

我試圖用timeuuid檢索結果集執行查詢返回正確的結果。質疑timeuuid類型不通過CQL

表是這樣的:

CREATE TABLE mds.arguments_by_id (
    argument_id timeuuid PRIMARY KEY, 
    category text, 
    title text 
) 

當我選擇dateOf()的所有在表中的數據,我得到如下:

select dateOf(argument_id),argument_id from arguments_by_id ; 

dateOf(argument_id)  | argument_id 
-------------------------+-------------------------------------- 
2014-12-29 13:50:07-0500 | 81f990c0-8f8b-11e4-abb3-5d7a44c0d8a8 
2014-12-29 14:01:43-0500 | 20def1c0-8f8d-11e4-abb3-5d7a44c0d8a8 
2014-12-29 14:01:58-0500 | 29b50f50-8f8d-11e4-abb3-5d7a44c0d8a8 
2014-12-29 14:03:01-0500 | 4f6b72c0-8f8d-11e4-bc90-abc65998337a 

(4 rows) 

我想查詢運行時需要返回argument_id(日期)大於指定日期的結果:

select dateOf(argument_id),argument_id from arguments_by_id where token(argument_id) > token(maxTimeuuid('2014-12-28 15:31:00-0500')); 

但是,查詢r但我想,如果我是1)招致由去這條路線和2創下的表現 -

dateOf(argument_id)  | argument_id 
--------------------------+-------------------------------------- 
2014-12-29 14:01:43-0500 | 20def1c0-8f8d-11e4-abb3-5d7a44c0d8a8 
2014-12-29 14:01:58-0500 | 29b50f50-8f8d-11e4-abb3-5d7a44c0d8a8 
2014-12-29 14:03:01-0500 | 4f6b72c0-8f8d-11e4-bc90-abc65998337a 

(3 rows) 

我的目標是儘量減少按鍵的數量:相比之前的時候選擇eturns一個(貌似)不完整的結果集)試圖用主鍵做太多。

回答

1

爲了使用這樣的timeuuid列,你需要使它成爲一個集羣列,而不是分區鍵(docs)。你需要去適應這個以適應您的數據模型,但這裏有一個例子:

create table sample (
    id int, 
    tid timeuuid, 
    category text, 
    title text, 
    primary key (id, tid) 
); 

現在,我們可以做一些插入幾秒鐘間隔:

insert into sample (id, tid) values (100, now()); 
insert into sample (id, tid) values (100, now()); 
insert into sample (id, tid) values (100, now()); 
insert into sample (id, tid) values (100, now()); 

顯示所有值:

select id,tid,dateOf(tid) from sample; 

id | tid         | dateOf(tid) 
-----+--------------------------------------+-------------------------- 
100 | df4387a0-8fa8-11e4-bd3a-97fb52c7ef8c | 2014-12-29 14:20:19-0800 
100 | e085a490-8fa8-11e4-bd3a-97fb52c7ef8c | 2014-12-29 14:20:21-0800 
100 | e2bd6c20-8fa8-11e4-bd3a-97fb52c7ef8c | 2014-12-29 14:20:24-0800 
100 | e475f190-8fa8-11e4-bd3a-97fb52c7ef8c | 2014-12-29 14:20:27-0800 

顯示只使用timeuuid比較的部分:

select id,tid,dateOf(tid) from sample where id=100 and tid>=minTimeuuid('2014-12-29 14:20:24-0800'); 

id | tid         | dateOf(tid) 
-----+--------------------------------------+-------------------------- 
100 | e2bd6c20-8fa8-11e4-bd3a-97fb52c7ef8c | 2014-12-29 14:20:24-0800 
100 | e475f190-8fa8-11e4-bd3a-97fb52c7ef8c | 2014-12-29 14:20:27-0800 

注意,如果你嘗試選擇不指定主鍵(id = 100),你會得到允許過濾將需要該查詢的警告。這通常是錯誤的做法,因爲這將需要做一個全表掃描:

select id,tid,dateOf(tid) from sample where tid>=minTimeuuid('2014-12-29 14:20:24-0800'); 
Bad Request: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this 
query despite the performance unpredictability, use ALLOW FILTERING 

這裏的另一個SO answer類似的情況。

+0

謝謝 - 我會返工的數據模型。我有一種感覺,表掃描將是一個問題。 – markd