我正在尝试编写一个查询,以便
这里的困难(如果我错了,请纠正我)是我无法使用 Cassandra 的内置“USE TIMESTAMP”功能,因为请求提供的时间戳几乎肯定低于创建新行时的默认时间戳,因此它将无法创建新行。
因此我只能创建一个新列来存储时间戳。然后我有一个 OR 条件要满足:“if lastTimestamp == null OR lastTimestamp < timestamp", but unfortunately Cassandra doesn't support the "OR" logic in IF clause.
我能想到的一个替代方案是,我总是通过“INSERT IF NOT EXIST”创建一个新行,并填充lastTimestamp = 0。然后应用“如果时间戳更大则更新”操作。但这本质上是两写比一写。还有其他可能的解决方案吗?
在插入/更新/删除时,您需要指定以微秒为单位的时间戳。
简单的方法是将时间戳(以毫秒为单位)乘以 1000
示例:
INSERT INTO data(id, map) VALUES('123-123-12321', {'object2' : {value : '2', timestamp : '2017-09-09 16:24:06.197000+0000'}}) USING TIMESTAMP 1504952646912000;
这里 1504952646912000 是从 1504952646912 毫秒转换而来的以微秒为单位的时间戳
对于在
USING TIMESTAMP XXXX
子句之后使用 WHERE
的 UPDATE 命令不起作用。
正确的更新语法:
UPDATE table_name USING TIMESTAMP 1735388391000000
SET column_name_1 = {value}
WHERE column_name_2 = {value}
请参阅时间戳值Cassandra官方文档