2016-11-21 128 views
0

我有一個表,卡桑德拉timeuuid比較

CREATE TABLE log (
    uuid uuid, 
    time timeuuid, 
    user text, 
    .... 
    PRIMARY KEY (uuid, time, user) 
) 

創建日誌(時間)CUSTOM INDEX time_idx USING 'org.apache.cassandra.index.sasi.SASIIndex';

然後我想在時間選擇基

SELECT * FROM登錄其中時間> 84bfd880-b001-11e6-918c-24eda6ab1677;

並且什麼也沒有返回,如果我使用equal(=),它將返回。我哪一步出錯了?

回答

0

您需要將time_idx索引設置爲SPARSE索引。

SPARSE索引旨在提高查詢每毫秒插入數據的大型密集數字範圍(如時間戳)的性能。如果數據是數字,則使用少量分區鍵的數百萬列值將表徵數據,範圍查詢將針對索引執行,然後SPARSE是最佳選擇。對於不符合此標準的數字數據,PREFIX是最佳選擇。

降time_idx,並與下面的查詢

CREATE CUSTOM INDEX time_idx on Log(time) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'SPARSE' }; 

創建現在你可以用一個不等式> =,>和< =查詢。

限制:SPARSE索引僅用於數字數據,所以LIKE查詢不適用。

另一件你的表格創建不正確。它應該是

CREATE TABLE log (
    uuid uuid, 
    time timeuuid, 
    user text, 
    PRIMARY KEY (uuid, time, user) 
) 
+0

感謝您的回覆,但我看到了這個**關於SPARSE模式有一個重要說明。由於稀疏,這意味着對於每個索引值,只有極少數(實際上最多5個)匹配行。如果有超過5個匹配的行,則會拋出異常**對於我的情況,可以返回多於5行嗎? – Schmidt

+0

在我看來,時間是一個高基數列 >高基數是指值非常不常見或唯一的列。高基數列值通常是標識號,電子郵件地址或用戶名。具有高基數的數據表列的示例是具有名爲USER_ID的列的USERS表。 如果是高基數列,那麼你應該使用稀疏 –