cassandra 如何重置AWS Keyspaces表中现有数据的TTL?

bkhjykvo  于 2022-11-29  发布在  Cassandra
关注(0)|答案(3)|浏览(245)

有一种方法如何设置TTL为现有的raws在表中没有重新插入所有数据?
所有文档都讨论了使用自定义/默认TTL插入记录时的示例。https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL-how-to.html

ALTER TABLE "my_keyspace"."my_table" WITH default_time_to_live = 31536000  ;

设置新记录的默认TTL。

zd287kbt

zd287kbt1#

如果不重新插入,就无法更改现有记录的TTL,但可以使用DSBulk之类的工具完成卸载任务,然后在设置TTL时进行加载,这里有一个使用“USING TTL”的加载示例:https://docs.datastax.com/en/dsbulk/docs/reference/dsbulkLoad.html
为每个频繁使用的表设置默认TTL是一个好主意,这样在插入数据时就可以始终覆盖默认TTL,例如:

INSERT INTO keyspace.table (col1, col2, col3) VALUES ('coltext1', 'coltext2', 'coltext3') USING TTL 864000;
gab6jxml

gab6jxml2#

如果不使用新的TTL重新插入现有数据,则无法更新现有数据的TTL。
处理这个问题的常规方法是使用Apache Spark开发ETL应用程序。使用Spark Cassandra connector时,您需要编写一个应用程序,该应用程序迭代表中的分区,检索单元格值AND WRITETIME(),然后使用相同的WRITETIME()时间戳重新插入带有新TTL的数据。
但是请注意Spark连接器只适用于使用Murmur3PartitionerRandomPartitioner的集群(请参阅此处支持的spark-cassandra-connector分区器)。Spark连接器不适用于Keyspaces的com.amazonaws.cassandra.DefaultPartitioner,因此您需要确保您的帐户支持默认分区器。详情请参阅Configuring Amazon Keyspaces for integration with the spark-cassandra-connector
如果您的Amazon Keyspaces DB不受支持,您唯一的选择就是编写自己的应用程序,使用新的TTL重写数据。干杯!

5ssjco0h

5ssjco0h3#

您需要做的是使用AWS Glue和Spark Cassandra连接器。这将是完全无服务器的端到端,并将根据您的表大小进行缩放。Spark Cassandra连接器和Murmur3 partitioner is compatible与Amazon Keyspaces。请参阅此repo以获取示例of exports and imports

val myTable = sparkSession.read
      .format("org.apache.spark.sql.cassandra")
      .options(Map( "table" -> tableName, "keyspace" -> keyspaceName))
      .load()

   //Try first without shuffling step. If you see WriteThottleEvents then reading by partition and writing by partition maybe causing hotkeys. Can happen with wider partitions. 
   //Randomize data will avoid WriteThottleEvents
   //The following command will randomize the data.
   
   //val shuffledData = myTable.orderBy(rand())

   myTable.write.format("org.apache.spark.sql.cassandra").mode("append").option("keyspace", keyspaceName).option("table", tableName).option("ttl",999999).save()

相关问题