2017-09-20 436 views
1

我迁移从CSV SQL文件(1每个表)数据到使用预先确定的和标准化的格式的卡桑德拉数据库中插入行。因此,我正在对SQL数据进行转换,连接等操作,以便在将其写入Cassandra之前使其与此格式匹配。我的问题是这个数据库迁移是在批处理中发生的(不是一次全部发生),并且我不能确保在写入Cassandra条目时来自表连接多边的信息将出现。Scala的火花卡桑德拉更新或上主键匹配

ex。 表1和表2都具有分区键和集群键(允许连接,因为它们的组合是唯一的),并使用完全外连接进行连接。然而,根据我们获得数据的方式,我们有机会获得表1中的记录,而不是表2中的“批量”数据。当我执行完整的外连接时,没有任何问题...从另一个表中添加额外的列并只填充空值。在接下来的时间间隔,我得到的数据,然后我收到应该预先加入到表1

我如何获得这些条目合并表2部分?

我已经看了这取决于如果这组分区和集群键的存在,但没有打开任何东西在星火更新或插入式方法。这是最有效的方法吗?我只需要添加spark.sql查询,然后更新/写入每个条目?

注:使用UUID会阻止主键冲突解决不了这个问题,我不想2个部分条目。具有该特定主键的所有数据都需要位于同一行中。

感谢您的帮助,您可以提供!

回答

1

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

Cassandra的刀片真正的“插入或更新”,所以我相信当你插入的加入一个侧面,它只会留下一些列空。然后,当您插入连接的另一侧时,它将使用新列更新该行。

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

+0

这是正确的,即使在Spark Cassandra连接器中,所有写操作都是upserts。所以后续运行只会覆盖现有条目。 – RussS