如果有两个结构相同的表,如何在删除记录时将一组行从一个表移到另一个表?我想要类似于Cassandra的东西:
BEGIN; INSERT INTO persons_table select * from customer_table where person_name = 'tom'; DELETE FROM customer_table where person_name = 'tom'; COMMIT;
13z8s7eq1#
我能想到的最好的解决方案就是使用您喜欢的语言的cql库,并以编程的方式来实现。另一个解决办法可能是美杜莎。我不熟悉备份结构,但可能需要备份表并在备份文件中更改表的名称,然后再次将其导入cassandra。我会先在测试设置中尝试这个。
eivgtgni2#
我认为最简单的解决方案是使用spark,但它不是原子的。代码应该是这样的(可以在 spark-shell ):从shell开始(假设它是spark 2.4):
spark-shell
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")
2条答案
按热度按时间13z8s7eq1#
我能想到的最好的解决方案就是使用您喜欢的语言的cql库,并以编程的方式来实现。另一个解决办法可能是美杜莎。我不熟悉备份结构,但可能需要备份表并在备份文件中更改表的名称,然后再次将其导入cassandra。我会先在测试设置中尝试这个。
eivgtgni2#
我认为最简单的解决方案是使用spark,但它不是原子的。代码应该是这样的(可以在
spark-shell
):从shell开始(假设它是spark 2.4):
然后做: