如果我有两个结构相同的表,如何在删除记录时将一组行从一个表移动到另一个表?
我想要在 Cassandra 中类似的东西:
BEGIN;
INSERT INTO persons_table select * from customer_table where person_name = 'tom';
DELETE FROM customer_table where person_name = 'tom';
COMMIT;
我可能想到的最简单的解决方案是使用 Spark,但它不是原子的。代码将是这样的(可以在 中执行spark-shell
):
启动 shell(假设它是 Spark 2.4):
spark-shell --packages com.datastax.spark:spark-cassandra-connector_2.11:2.5.1
然后做:
val data = spark.read.format(".format("org.apache.spark.sql.cassandra")\
.options(Map( "table" -> "orig_table", "keyspace" -> "ks")).load()
val filtered = data.filter($"person_name" === "tom")
filtered.write.format("org.apache.spark.sql.cassandra")\
.options(Map("table" -> "new_table", "keyspace" -> "ks")).save()
filtered.rdd.deleteFromCassandra("ks", "orig_table")
我能想到的最佳解决方案就是使用您喜欢的语言的 cql 库并以编程方式进行。另一个解决方案可能是Medusa。我不熟悉备份结构,但可能有可能备份表并更改备份文件中的表名并再次将其导入 Cassandra。我会先在测试设置中尝试这个。