你好,
在ETL框架,我們生有四層,基礎,信任&統一在生我們以JSON格式複製文件從源,利用ADF管道。下一層(即。基金會)我們是壓扁的Json文件,並將它們轉化為三角洲表(這裏隻增量數據附加)。我們正在做UPSERT信任層。
增量加載使用修改後的執行日期出現在源表。我們有一個父表和多個子表,如果有任何更新關於兒童表修改日期隻在子表的更新,但父表修改日期沒有更新。現在在統一層維度和事實表。刷新的事實表,我們寫了父母和孩子加入所需的表的查詢和添加所有的業務邏輯放在一個單獨的sql語句。在第二個事實表如果我們同樣需要導出字段,那麼我們必須添加相同的邏輯在第二個事實查詢(刷新事實表)。由於我們決定在信任層創建單獨的表將所有的派生列和事實查詢我們將直接引用列來自可信的層。我不確定這是個好主意。
請讓我知道。同時,派生表我們正在探索的DLT會自動刷新。因此DLT表完全刷新工作正常。現在我想讓它增量刷新。如。
父表“案例”
字段
Id,
Case_Name,
Modified_Date
子表“產品”
字段
Id
產品名稱
Modified_Date
目標(輸出)
Id,
產品名稱(逗號分離)
請注意,任何子表中產品名稱的變化在父表修改日期不會得到更新。
請幫助。
提前謝謝,
@DataBricks_User9 c:
似乎你有一個明確的ETL框架不同層處理數據。關於你的問題關於創建單獨的表在信任層派生列,它可以是一個好主意,因為它允許您集中的邏輯計算派生列在一個地方,可以更容易維護和更新邏輯。它還允許您在多個查詢,避免重複相同的邏輯,可以提高查詢性能,減少錯誤的風險。
至於DLT表增量刷新,您可以使用“並入”聲明三角洲湖執行“插入”操作基於Modified_Date列。可以使用子表中的Modified_Date列來確定哪些行需要更新或插入到目標表中。下麵是一個示例SQL語句,您可以使用作為一個起點:
並入target_table使用(選擇c t。Id,concat_ws(',', collect_list(c.Product_Name)) AS Product_Names FROM child_table c JOIN parent_table p ON c.Id = p.Id WHERE c.Modified_Date > t.max_modified_date -- only process new or updated rows GROUP BY c.Id ) s ON t.Id = s.Id WHEN MATCHED THEN UPDATE SET t.Product_Name = s.Product_Names WHEN NOT MATCHED THEN INSERT (Id, Product_Name) VALUES (s.Id, s.Product_Names)
在這個例子中,我們首先加入到孩子和家長表基於Id列,然後由Id和組使用“collect_list”功能連接Product_Name值為一個以逗號分割的字符串。然後,我們使用“並入”語句更新或將行插入到目標表基於Id列。我們隻有過程行Modified_Date大於最大的子表Modified_Date目標表,這可以確保我們隻處理新的或更新的行。
我希望這可以幫助!如果你有任何其他問題,請讓我知道。