将主键放在cassandra中以更新记录

时间:2016-12-01 23:04:12

标签: cassandra cql

我在cassandra有一张桌子。 我的任务是: 我想选择具有时间范围的记录(因此时间戳必须是主键,而不是使用允许过滤) 当我在表中插入记录和provider_id和文件名时,记录会更新

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

2 个答案:

答案 0 :(得分:3)

您无法更新主键列,它会插入另一条记录 这就是cassandra的工作原理 您必须使用provider_id选择时间戳,然后使用provider_id,filename和timestamp删除文件名,并使用新的时间戳重新插入

答案 1 :(得分:1)

如果要根据时间范围选择项目,则应使用群集列。您的create语句应为:

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