我有一个带有模式的cassandra表:
CREATE TABLE IF NOT EXISTS TestTable(
documentId text,
sequenceNo bigint,
messageData blob,
clientId text
PRIMARY KEY(documentId, sequenceNo))
WITH CLUSTERING ORDER BY(sequenceNo DESC);
有没有办法删除在给定时间范围内插入的记录?我知道在内部,cassandra必须使用一些时间戳来跟踪每个记录的插入时间,这将被ttl之类的特性所使用。
既然给定的模式中没有用于插入时间戳的显式列,那么有没有一种方法可以使用隐式时间戳,或者有没有更好的方法?
插入后,记录不会有任何更新。
1条答案
按热度按时间pnwntuvh1#
这是个有趣的问题。。。
所有不属于主键的列都有所谓的writetime,可以使用
writetime(column_name)
cql的函数(警告:它不适用于集合列,对于udts返回null!)。但由于cql中没有嵌套查询,因此您需要编写一个程序来获取数据、按writetime筛选条目,并删除writetime早于阈值的条目(请注意writetime
以微秒为单位,而不是以毫秒为单位timestamp
类型)。最简单的方法是使用spark cassandra connector的rdd api,如下所示:
哪里:
prk1
,prk2
, ... 是主键的所有组件(documentId
以及sequenceNo
在你的情况下),以及reg_col
-表中不是集合或udt的任何“常规”列(例如,clientId
). 在select
以及deleteFromCassandra
是一样的。