1

如果我有两个结构相同的表,如何在删除记录时将一组行从一个表移动到另一个表?

我想要在 Cassandra 中类似的东西:

BEGIN;
INSERT INTO persons_table select * from customer_table where person_name = 'tom';
DELETE FROM customer_table where person_name = 'tom';
COMMIT;
4

2 回答 2

3

我可能想到的最简单的解决方案是使用 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")
于 2020-08-27T13:57:29.700 回答
1

我能想到的最佳解决方案就是使用您喜欢的语言的 cql 库并以编程方式进行。另一个解决方案可能是Medusa。我不熟悉备份结构,但可能有可能备份表并更改备份文件中的表名并再次将其导入 Cassandra。我会先在测试设置中尝试这个。

于 2020-08-27T11:41:22.650 回答