Scala Spark Cassandra在主键匹配时更新或插入行

时间:2017-09-20 20:42:37

标签: sql scala apache-spark cassandra

我正在将数据从csv SQL文件(每个表1个)迁移到使用预定和标准化格式的Cassandra数据库。因此,我正在对SQL数据进行转换,连接等,以便在将其写入Cassandra之前使其与此格式匹配。我的问题是这个数据库迁移是批量发生的(并非一次全部发生),当写入Cassandra的条目时,我无法确保来自表连接的多个方面的信息会出现。

离。 表1和表2都具有分区和聚类键(允许连接,因为它们的组合是唯一的),并使用完全外连接进行连接。然而,通过我们获得数据的方式,我们有可能从表1中获得记录,但不能从表2中获得#34;批次"数据的。当我执行完整的外连接时,没有问题...添加了另一个表中的额外列,只填充空值。在我获得数据的下一个时间间隔,然后我收到之前已加入表1的表2部分。

如何合并这些条目?

我已经在Spark中查找了更新或插入类型方法,具体取决于该组分区和群集密钥是否存在但尚未显示任何内容。这是最有效的方式吗?我只需要使用spark.sql查询添加每个条目然后更新/写入吗?

注意:使用可以防止主键冲突的uuids无法解决问题,我不想要2个部分条目。具有该特定主键的所有数据都需要在同一行中。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

我认为您应该能够直接将数据写入cassandra而不必担心它,假设所有主键都相同。

Cassandra的插入实际上是“插入或更新”所以我相信当你插入一个连接的一边时,它会让一些列空。然后,当您插入连接的另一侧时,它将使用新列更新该行。

带上一粒盐,因为我没有Spark + Cassandra集群可供测试和确认。