本頁涵蓋使用 AUTO CDC 和 AUTO CDC FROM SNAPSHOT 目標表的進階主題,包括進行 DML 操作、讀取變更資料流、以及監控處理指標。 API 的介紹請參見 AUTO CDC ,「AUTO CDC API 範例:使用管線簡化變更資料擷取」。
新增、變更或刪除目標串流資料表中的資料
如果您的管線將資料表發佈至 Unity 目錄,您可以使用 資料操作語言 (DML) 陳述式,包括插入、更新、刪除和合併陳述式,來修改陳述式所 AUTO CDC ... INTO 建立的目標串流資料表。
備註
- 不支援修改串流數據表之數據表架構的 DML 語句。 請確定您的 DML 語句不會嘗試演進數據表架構。
- 更新串流數據表的 DML 語句只能在共用的 Unity 目錄叢集或 SQL 倉儲中使用 Databricks Runtime 13.3 LTS 和更新版本來執行。
- 因為串流處理需要只能附加的資料來源,如果您的處理需要從具有變更的來源串流資料表進行串流處理(例如 DML 語句),請在讀取來源串流資料表時設定 skipChangeCommits 旗標。 設定
skipChangeCommits時,會忽略刪除或修改源數據表上記錄的交易。 如果您的處理不需要串流數據表,您可以使用具象化視圖(不受僅附加限制)作為目標數據表。
由於 Lakeflow Spark 宣告式管線使用指定的 SEQUENCE BY 欄位,並將適當的序列值傳播到 __START_AT 目標資料表的 and __END_AT 欄位(針對 SCD Type 2),您必須確保 DML 語句對這些欄位使用有效值,以維持記錄的正確順序。 請參閱 AUTO CDC 的運作方式。
如需搭配串流資料表使用 DML 陳述式的詳細資訊,請參閱 新增、變更或刪除串流資料表中的資料。
下列範例會插入起始序列為 5 的有效記錄:
INSERT INTO my_streaming_table (id, name, __START_AT, __END_AT) VALUES (123, 'John Doe', 5, NULL);
小提示
如果你需要在 SCD Type 2 目標表中重新命名 __START_AT 和 __END_AT 欄位(例如,為了符合下游結構需求),請建立一個針對目標資料表的檢視:
CREATE VIEW my_employees_view AS
SELECT
*,
__START_AT AS valid_from,
__END_AT AS valid_to
FROM my_scd2_target_table;
從 AUTO CDC 目標資料表讀取變更資料摘要
在 Databricks Runtime 15.2 和更新版本中,您可以從作為 AUTO CDC 或 AUTO CDC FROM SNAPSHOT 查詢目標的串流資料表中,讀取變更資料提要,其方式與從其他 Delta 表讀取變更資料提要的方法相同。 從目標串流資料表讀取變更資料提要需要下列項目:
- 目標串流資料表必須發佈至 Unity 目錄。 請參閱 使用 Unity 目錄搭配管線。
- 若要從目標串流數據表讀取變更數據摘要,您必須使用 Databricks Runtime 15.2 或更新版本。 若要讀取不同管線中的變更數據摘要,管線必須設定為使用 Databricks Runtime 15.2 或更新版本。
您可以從在 Lakeflow Spark 宣告式管線中建立的目標串流資料表讀取變更資料摘要,其方式與從其他 Delta 資料表讀取變更資料摘要的方式相同。 若要深入瞭解如何使用 Delta 變更資料摘要功能,包括 Python 和 SQL 中的範例,請參閱在 Azure Databricks 上使用 Delta Lake 變更資料摘要。
備註
變更資料摘要記錄包含識別變更事件類型的 中繼資料 。 在表格中更新記錄時,相關聯變更記錄的中繼資料通常包括 _change_type 設定為 update_preimage 和 update_postimage 事件的值。
不過, _change_type 如果對目標串流資料表進行更新,包括變更主索引鍵值,則值會有所不同。 當變更包含主索引鍵的更新時, _change_type 中繼資料欄位會設定為 insert 和 delete 事件。 當使用 UPDATE 或 MERGE 陳述式手動更新其中一個鍵欄位時,或者對於 SCD 類型 2 表格,當 __start_at 欄位變更以反映較早的啟動順序值時,可能會發生主鍵的變更。
查詢會決定主鍵值,這些值在 SCD 類型 1 和 SCD 類型 2 的處理過程中有所不同:
| SCD 類型 | 主要金鑰 |
|---|---|
| SCD 類型 1,以及管線 Python 介面 | 主鍵是函式中keys參數create_auto_cdc_flow()的值。 對於 SQL 介面,主鍵是由KEYS子句在AUTO CDC ... INTO陳述式中定義的欄。 |
| SCD 類型 2 | 主鍵為 keys 參數或 KEYS 子句加上操作的 coalesce(__START_AT, __END_AT) 回傳值,其中 __START_AT 和 __END_AT 分別是目標串流表中的對應欄位。 |
取得管線中 CDC 查詢所處理之記錄的相關資料
備註
下列指標只會由 AUTO CDC 查詢擷取,而不是由 AUTO CDC FROM SNAPSHOT 查詢擷取。
查詢 AUTO CDC 會收集以下指標:
-
num_upserted_rows:更新期間更新插入資料集的輸出列數。 -
num_deleted_rows:更新期間從資料集中刪除的現有輸出列數。
num_output_rows 指標(非 CDC 流程的輸出)不會針對 AUTO CDC 查詢擷取。
哪些資料物件用於管線中的 CDC 處理?
當您在 Hive 中繼存放區中宣告目標資料表時,會建立兩個資料結構:
- 使用目標表格所指派名稱的檢視。
- 管線用來管理 CDC 處理的內部備份資料表。 此表格的命名方式是將
__apply_changes_storage_添加在目標表格名稱之前。
例如,如果你宣告了一個名稱為 dp_cdc_target 的目標資料表,你會在元儲存庫中看到一個名為 dp_cdc_target 的檢視表和一個名為 __apply_changes_storage_dp_cdc_target 的資料表。 查詢視圖以存取處理過的資料。 不要直接修改支援資料表。
備註
這些資料結構僅適用於 AUTO CDC 處理,不適用於 AUTO CDC FROM SNAPSHOT 處理。 它們僅適用於 Hive 元資料庫,不適用於 Unity 資料目錄。