Storm 使用TTL将数据从一个Cassandra表复制到另一个表

mpbci0fu  于 2022-12-16  发布在  Apache
关注(0)|答案(1)|浏览(275)

我们正在修改一个表的分区键,从分区键中删除一列。这个表中的每条记录都有TTL。现在我们想保留这个表中的数据。我们该怎么做呢?
我们可以创建一个新表,然后把数据从旧表复制到新表,但是在这个过程中我们会丢失TTL。
更多信息-此Cassandra表由Apache Storm应用程序填充,该应用程序从Kafka读取事件。我们可以重新水合Kafka消息,但Kafka有一些不需要的消息,我们不想处理这些消息。
注意- TTL是根据日期列值决定的,该值永远不会改变。因此,所有列的TTL都相同。

nuypyhwy

nuypyhwy1#

在进行具体实现之前,有必要了解TTL可能存在于单个单元格以及行中的所有单元格上。当您执行INSERT或UPDATE操作时,您只能对查询中指定的所有列应用一个TTL值,因此如果您有2列具有不同的TTL,则需要执行2次查询-为每列使用不同的TTL。
关于工具-这里有2个或多或少的即用型选项:

  • 使用DSBulkthis blog post的示例30.1中详细介绍了此方法。基本上,您需要使用将为数据提取列值和TTL的查询将数据卸载到磁盘,然后通过为具有单独TTL的每个列生成批来加载数据。示例如下:
dsbulk unload -h localhost -query \
  "SELECT id, petal_length, WRITETIME(petal_length) AS w_petal_length, TTL(petal_length) AS l_petal_length, .... FROM dsbulkblog.iris_with_id" \
  -url /tmp/dsbulkblog/migrate
dsbulk load -h localhost -query \
  "BEGIN BATCH INSERT INTO dsbulkblog.iris_with_id(id, petal_length) VALUES (:id, :petal_length) USING TIMESTAMP :w_petal_length AND TTL :l_petal_length; ... APPLY BATCH;" \
  -url /tmp/dsbulkblog/migrate --batch.mode DISABLED
  • 使用Spark Cassandra Connector--它支持TTL和WriteTime读写数据。但是你需要开发相应的代码,并正确处理集合、静态列等(或者等待SPARKC-596的实现)

相关问题