Cassandra根据时间戳更新或插入

时间:2017-09-07 21:56:46

标签: cassandra insert conditional cql

我正在尝试编写一个查询

  1. 如果主键与行匹配,则插入新行
  2. 如果匹配一行,则仅在提供的时间戳晚于lastTimestamp列值时更新值
  3. 这里的斗争(纠正我,如果我错了)是我不能使用Cassandra的内置“USE TIMESTAMP”功能,因为在创建新行时,请求提供的时间戳几乎肯定低于默认时间戳,因此它将无法创建新行。

    因此我只能创建一个新列来存储时间戳。然后我有一个OR条件来实现:“如果lastTimestamp == null或lastTimestamp< timestamp”,但不幸的是Cassandra不支持IF子句中的“OR”逻辑。

    我能想到的另一个选择是,我总是通过“INSERT IF NOT EXIST”来创建一个新行,并填充lastTimestamp = 0.然后应用“如果时间戳更大则更新”操作。但这基本上是两个写而不是一个。还有其他可能的解决方案吗?

1 个答案:

答案 0 :(得分:0)

在插入/更新/删除时,您需要指定时间戳(以微秒为单位)。

执行此操作的简单方法是将时间戳(以毫秒为单位)乘以1000

示例:

Delete from FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_2017090
Where DRS_RECORD_ID in (
    Select DRS_RECORD_ID from RANKED WHERE DR>1)

此处1504952646912000是从1504952646912毫秒转换的以微秒为单位的时间戳