這就跟你問聲好!
我們正在與更改事件關係和NoSQL數據庫的數據處理和消化成磚。流從源到我們的消息傳遞平台。Beplay体育安卓版本然後,我們的連接器是推磚。
現在我們正在做的,使用磚JDBC驅動程序的集成和SQL——這就是我們所做的與其他數據庫的目的地。我們使用複製到DBFS鋪文件加載。如果表不存在,創建。如果它確實存在和模式有漂流,列(s)根據需要添加。分區和聚類字段添加。
我們正在努力改善:支持合並成。我們想要反映源數據庫記錄在磚的最新狀態。
我們有一些挑戰。
一個預處理避免多個匹配(降低)磚文檔中提到:
- - - - - -
合並操作會失敗如果源數據集的多行匹配並嚐試更新相同的目標三角洲表行。根據SQL合並的語義,等更新操作是模棱兩可的尚不清楚應該使用哪個源行更新匹配的目標行。源表可以進行預處理來消除多個匹配的可能性。看到變化數據捕獲的例子——預處理改變數據集(即源數據集)隻保留最新的改變對於每個關鍵申請前三角洲到目標表
- - - - - -
我們看著變化數據捕獲有關示例,但例子是基於筆記本電腦,使用JDBC驅動程序集成時沒有明確的解決方案。
推薦的處理方法是什麼?
我們有理論是一個視圖,保留最新的改變對於每個關鍵也許從表到最終的合並,但這似乎效率低下。我們嚐試寫相當於刪除SQL語句(降低),我們使用其他數據庫的目的地,但是他們依靠這樣的連接或子查詢——磚似乎並不支持。刪除和查詢中沒有加入這樣的失敗與列不匹配錯誤:
刪除從表}{結構({id},{時間戳})沒有(選擇結構({id},{時間戳}){id}{表}組)
感覺我們的外部係統與筆記本可能不得不依靠和互動來實現呢?
更新的理論我們正在研究。
這將是類似於下麵(必要的改變來支持的最佳實踐合並,如減少搜索空間):
——視圖降低pre-merge
創建或替換臨時視圖}{看成SELECT *除了(dedupe_key)(選擇不同的*,ROW_NUMBER() /(分區{id}}{時間戳順序)從{bronze_table}) dedupe_key dedupe_key = 1;
——簡單的全表合並w / o墓碑處理/刪除
結合使用{視圖}{silver_table} {silver_table}。}{id} ={視圖。{id}當匹配不匹配時更新設置* *插入;
上述不解決模式漂移的問題。我們確實有一些不兼容的模式變化的情況下,需要一點爭吵來解決。我們沒有想過刪除列或重寫列當有不兼容的類型發生變化。類型變化(兼容或其他)將添加新列。我們目前隻與附加。
這導致一個相關的問題我們如何做,在這個用例合並。
我們修改銀表做與銅表嗎?生成ALTER TABLE……根據需要添加列語句?或者,我們使用代替表{silver_table}用δSELECT * FROM{視圖}極限0;在合並之前?
同樣的,我們看這個,關心效率低下。我們意識到應用的變化以及其他DLT特性,但是它們都嚴重依賴筆記本。