Это интересный вопрос ...
Все столбцы, которые не являются частью первичного ключа, имеют так называемый WriteTime, который можно получить с помощью функции writetime(column_name)
CQL ( warning : он не работает со столбцами коллекции и возвращает ноль для UDT!). Но поскольку у нас нет вложенных запросов в CQL, вам нужно написать программу для извлечения данных, отфильтровывать записи по WriteTime и удалять записи, где WriteTime старше вашего порога. ( обратите внимание , что значение writetime
указывается в микросекундах, а не миллисекундах, как в типе CQL timestamp
).
Самый простой способ - использовать API RDD Spark Cassandra Connector , что-то вроде этого:
val timestamp = someDate.toInstant.getEpochSecond * 1000L
val oldData = sc.cassandraTable(srcKeyspace, srcTable)
.select("prk1", "prk2", "reg_col".writeTime as "writetime")
.filter(row => row.getLong("writetime") < timestamp)
oldData.deleteFromCassandra(srcKeyspace, srcTable,
keyColumns = SomeColumns("prk1", "prk2"))
, где: prk1
, prk2
, ... - все компоненты первичного ключа (documentId
и sequenceNo
в вашем случае), и reg_col
- любой из «обычных» столбцов таблицы, который не является коллекцией или UDT (например, clientId
). Важно, чтобы список столбцов первичного ключа в select
и deleteFromCassandra
был одинаковым.