Cassandra - Update/Delete 基于时间戳数据类型

Cassnadra - Update/Delete based on timestamp datatype

我有以下 table 结构,其中包含失败的记录。

CREATE TABLE if not exists dummy_plan (
id uuid,
payload varchar,
status varchar,
bucket text,
create_date timestamp,
modified_date timestamp,
primary key ((bucket), create_date, id))
WITH CLUSTERING ORDER BY (create_date ASC) 
         AND COMPACTION = {'class': 'TimeWindowCompactionStrategy', 
                       'compaction_window_unit': 'DAYS', 
                       'compaction_window_size': 1};

我的table如下所示

| id | payload | status | bucket     | create_date              | modified_date |
| abc| text1   | Start  | 2021-02-15 | 2021-02-15 08:07:50+0000 |               |

Table 并且记录已成功创建和插入。然而在处理之后,我们希望根据 Id 更新(如果失败)和删除(如果成功)记录。 但是我遇到了时间戳问题,我尝试给出相同的值,但它仍然没有 deletes/updates。 似乎 Cassandra 不适用于带时间戳的 EQ。 请指导。

提前致谢。

Cassandra 可以很好地处理时间戳列 - 您可以对其使用相等运算。但是你需要确保在值中包含毫秒,否则它不会匹配:

cqlsh> insert into test.dummy_service_plan_contract (id, create_date, bucket)
   values (1, '2021-02-15T11:00:00.123Z', '123');
cqlsh> select * from test.dummy_service_plan_contract;
 bucket | create_date                     | id | modified_date | payload | status
--------+---------------------------------+----+---------------+---------+--------
    123 | 2021-02-15 11:00:00.123000+0000 |  1 |          null |    null |   null

(1 rows)
cqlsh> delete from test.dummy_service_plan_contract where bucket = '123' and 
  id = 1 and create_date = '2021-02-15T11:00:00Z';
cqlsh> select * from test.dummy_service_plan_contract;
 bucket | create_date                     | id | modified_date | payload | status
--------+---------------------------------+----+---------------+---------+--------
    123 | 2021-02-15 11:00:00.123000+0000 |  1 |          null |    null |   null

(1 rows)
cqlsh> delete from test.dummy_service_plan_contract where bucket = '123' and 
  id = 1 and create_date = '2021-02-15T11:00:00.123Z';
cqlsh> select * from test.dummy_service_plan_contract;
 bucket | create_date | id | modified_date | payload | status
--------+-------------+----+---------------+---------+--------

(0 rows)

如果您在 cqlsh 的输出中没有看到毫秒数,那么您需要在 .cqlshrc

中配置 datetimeformat 设置