如何解决cassandra-在某种情况下其中将行从一个表移动到另一个表
如果我有两个结构相同的表,如何在删除记录的同时将一组行从一个表移到另一个表?
我想要类似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。我会先在测试设置中尝试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。