cassandra-在某个条件下(where)将行从一个表移动到另一个表

kxe2p93d  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(400)

如果有两个结构相同的表,如何在删除记录时将一组行从一个表移到另一个表?
我想要类似于Cassandra的东西:

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

13z8s7eq1#

我能想到的最好的解决方案就是使用您喜欢的语言的cql库,并以编程的方式来实现。另一个解决办法可能是美杜莎。我不熟悉备份结构,但可能需要备份表并在备份文件中更改表的名称,然后再次将其导入cassandra。我会先在测试设置中尝试这个。

eivgtgni

eivgtgni2#

我认为最简单的解决方案是使用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")

相关问题