2016-12-01 31 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