2017-09-20 87 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