2016-10-10 46 views
0

對不起,標題可能會/可能不會詳細說明我的意圖。Cassandra選擇可能沒有主鍵的集羣密鑰範圍

這是問題所在。我需要根據日期範圍選擇數據,並且我們的大多數查詢都有用於查詢的'id'字段。

所以,我已經創建了數據模型,ID爲主鍵,日期爲集羣鍵。

本質上就像下面(我只是使用假/示例語句,因爲我不能給出實際的細節)。

create table tab1(
    id text, 
    col1 text, 
    ... coln text, 
    rec_date date, 
    rec_time timestamp, 
    PRIMARY KEY((id),rec_date,rec_time) 
) WITH CLUSTERING ORDER BY rec_date DESC, rec_time DESC; 

它適用於大多數的查詢和工作正常。

但是,我試圖優化以下情況。

- >所有比日ABCD-XY-KL

哪個以下方法之一將是爲我好,更多的記錄?或者比這兩個更好。

1)非常基本或簡單的方法。使用查詢:

select * from tab1 where id > '0' AND rec_date > 'abcd-xy-kl' 

每條記錄​​將基本上是比 '0' 更高。它可能仍然會進行全表掃描。

2)創建於rec_date二級指標和簡單的使用查詢:

select * from tab1 where rec_date > 'abcd-xy-kl' 

此外,一個關鍵的事情是我使用的火花,並使用cassandraSqlContext.sql得到數據框。

所以,考慮到以上所有的細節,哪種方法會更好。

回答

0

在第一個例子中,我沒有看到用id進行過濾。以下應工作,並會從我的角度更好的方法:

select * from tab1 where rec_date > 'abcd-xy-kl' ALLOW FILTERING; 

注意,它不會不工作在年底允許過濾的。

0

您不能使用> 0作爲分區鍵。它不被Cassandra支持。有關WHERE部分查詢限制的更多信息,請檢查documentation

爲了有效地查詢您的集羣密鑰,您確實需要使用輔助索引。避免使用ALLOW FILTERING,除非您知道自己在做什麼,因爲它可能會觸發「分佈式」掃描並且性能很差。請查閱documentation瞭解更多信息。