2016-12-01 47 views
1

我在卡桑德拉有一張桌子。 我的任務是: 我想選擇與時間範圍的記錄(所以時間戳必須是主鍵,而不是使用允許過濾) 當我插入記錄和PROVIDER_ID和文件名存在於表,記錄更新把主鍵放在卡桑德拉更新記錄

CREATE TABLE test (
    name text, 
    filename text, 
    timestamp timestamp, 
    is_deleted boolean, 
    PRIMARY KEY (provider_id, filename, timestamp) 
) 
+0

你想選擇或更新? – xmas79

回答

3

您無法更新主鍵列,它會插入另一條記錄
這就是cassandra的工作方式。
你必須選擇與PROVIDER_ID時間戳,文件名,然後用PROVIDER_ID,文件名和時間戳刪除。如果您想選擇取決於你應該使用羣集列TIMERANGE項目進行新的時間戳

1

重新插入。您的創建語句應該是:

CREATE TABLE test (
    provider_id UUID, 
    name text, 
    filename text, 
    timestamp timestamp, 
    is_deleted boolean, 
    PRIMARY KEY ((provider_id, filename), timestamp) 
) 

現在provider_id + filename是您的分區鍵,併爲您的聚簇列添加時間戳。

組合分區鍵由provider_idfilename組成。 集羣列timestamp確定數據的集羣順序。通常,Cassandra將在同一節點上存儲具有相同 provider_id但在不同節點上具有不同filename的列以及具有相同provider_idfilename的列 。

這意味着您現在可以查詢你的數據是這樣的:

SELECT * FROM test 
WHERE provider_id = 1 
AND filename = "test.txt" 
AND timestamp >= '2016-01-01 00:00:00+0200' AND ts <= '2016-08-13 23:59:00+0200' 

而對於可能的更新:

UPDATE test 
SET name = "test-new" 
WHERE provider_id = 1 
AND filename = "test.txt" 
AND timestamp >= '2016-01-01 00:00:00+0200' AND ts <= '2016-08-13 23:59:00+0200' 

更多info