改變數據提要

請注意

  • Delta更改數據提要在Databricks Runtime 8.4及以上版本中可用。

  • 本文描述如何使用更改數據提要特性記錄和查詢Delta表的行級更改信息。要了解如何根據源數據的更改更新Delta Live tables管道中的表,請參見使用Delta Live表更改數據捕獲

更改數據提要(Change Data Feed, CDF)特性允許增量表跟蹤增量表版本之間的行級更改。當在Delta表上啟用時,運行時記錄寫入表的所有數據的“更改事件”。這包括行數據以及指示是否插入、刪除或更新指定行的元數據。

您可以使用SQL和DataFrame api(即,df.read),以及使用DataFrame api的流查詢(即,df.readStream).

用例

“更改數據提要”默認不啟用。當您啟用變更數據提要時,以下用例應該驅動。

  • 銀桌和金桌:通過隻處理初始化後的行級更改來提高Delta性能合並更新,或刪除以加速和簡化ETL和ELT操作。

  • 物化視圖:創建用於BI和分析的最新的、聚合的信息視圖,而不必重新處理完整的底層表,而是隻在發生更改的地方進行更新。

  • 傳輸變化:向下遊係統(如Kafka或RDBMS)發送更改數據提要,這些係統可以使用它在數據管道的後續階段進行增量處理。

  • 審計跟蹤表:捕獲更改數據提要,因為Delta表提供永久存儲和高效查詢功能,以查看隨著時間推移的所有更改,包括何時刪除和進行了哪些更新。

啟用變更數據提要

您必須使用以下方法之一顯式啟用更改數據提要選項:

  • 新表:設置table屬性delta.enableChangeDataFeed真正的創建表格命令。

    創建表格學生idINT的名字字符串年齡INTTBLPROPERTIESδenableChangeDataFeed真正的
  • 現有表:設置table屬性delta.enableChangeDataFeed真正的改變表格命令。

    改變表格myDeltaTableTBLPROPERTIESδenableChangeDataFeed真正的
  • 所有新表

    火花δ屬性違約enableChangeDataFeed真正的

重要的

  • 一旦啟用表的更改數據提要選項,就不能再使用Databricks Runtime 8.1或更低版本寫入表。你可以隨時看表。

隻更改您啟用的更改數據提要被記錄;不會捕獲表的過去更改。

改變數據存儲

Databricks記錄更改數據更新刪除,合並操作的_change_data文件夾在Delta表目錄下。當Databricks檢測到它可以直接從事務日誌有效地計算更改數據feed時,可以跳過這些記錄。特別是,僅插入操作和完整分區刪除不會在_change_data目錄中。

的文件_change_data文件夾遵循表的保留策略。因此,如果運行真空命令中,更改數據feed的數據也被刪除。

讀取批處理查詢中的更改

可以為開始和結束提供版本或時間戳。查詢中包含開始和結束版本以及時間戳。從特定的開始版本讀取更改到最新的表的版本,隻指定起始版本或時間戳。

將版本指定為整數,將時間戳指定為如下格式的字符串yyyy-MM-dd [HH: mm: ss(。SSS]]

如果您提供的版本比記錄變更事件的版本更低或更早,也就是說,當啟用變更數據提要時,將拋出一個錯誤,指示未啟用變更數據提要。

——版本為int或long類型,例如從版本0更改為10選擇table_changes“表”010——timestamp作為字符串格式的時間戳選擇table_changes“表”“2021-04-21 05:45:46”“2021-05-21 12:00:00”——隻提供startingVersion/時間戳選擇table_changes“表”0——表名字符串中的數據庫/模式名稱,反勾用於轉義點和特殊字符選擇table_changesdbName. dotted.tableName”“2021-04-21 06:45:46”“2021-05-21 12:00:00”——基於路徑的表選擇table_changes_by_path“\路徑”“2021-04-21 05:45:46”
# version為int或long類型火花格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”0選項“endingVersion”10表格“myDeltaTable”#格式化的時間戳火花格式“δ”選項“readChangeFeed”“真正的”選項“startingTimestamp”“2021-04-21 05:45:46”選項“endingTimestamp”“2021-05-21 12:00:00”表格“myDeltaTable”#隻提供開始版本/時間戳火花格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”0表格“myDeltaTable”#基於路徑的表火花格式“δ”選項“readChangeFeed”“真正的”選項“startingTimestamp”“2021-04-21 05:45:46”負載“pathToMyDeltaTable”
//版本為int型或long型火花格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”0選項“endingVersion”10表格“myDeltaTable”//格式化的時間戳火花格式“δ”選項“readChangeFeed”“真正的”選項“startingTimestamp”“2021-04-21 05:45:46”選項“endingTimestamp”“2021-05-21 12:00:00”表格“myDeltaTable”//隻提供startingVersion/時間戳火花格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”0表格“myDeltaTable”//基於路徑的表火花格式“δ”選項“readChangeFeed”“真正的”選項“startingTimestamp”“2021-04-21 05:45:46”負載“pathToMyDeltaTable”

讀取流查詢中的更改

#提供起始版本火花readStream格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”0表格“myDeltaTable”#提供起始時間戳火花readStream格式“δ”選項“readChangeFeed”“真正的”選項“startingTimestamp”“2021-04-21 05:35:43”負載“/ pathToMyDeltaTable”#不提供起始版本/時間戳將導致先獲取最新的快照火花readStream格式“δ”選項“readChangeFeed”“真正的”表格“myDeltaTable”
//提供一個起始版本火花readStream格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”0表格“myDeltaTable”//提供起始時間戳火花readStream格式“δ”選項“readChangeFeed”“真正的”選項“startingVersion”“2021-04-21 05:35:43”負載“/ pathToMyDeltaTable”//不提供起始版本/時間戳將導致最新的快照首先被獲取火花readStream格式“δ”選項“readChangeFeed”“真正的”表格“myDeltaTable”

要在讀取表時獲取更改數據,請設置該選項readChangeFeed真正的.的startingVersionstartingTimestamp是可選的,如果沒有提供,流將返回表在流執行時的最新快照作為插入未來的變化就是數據的變化。利率限製等選項(maxFilesPerTriggermaxBytesPerTrigger),excludeRegex在讀取更改數據時也支持。

請注意

對於起始快照版本以外的版本,速率限製可以是原子的。也就是說,整個提交版本將受到速率限製,或者將返回整個提交。

默認情況下,如果用戶在表上傳遞的版本或時間戳超過了最後一次提交,則錯誤timestampGreaterThanLatestCommit將拋出。如果用戶將以下配置設置為,CDF可以處理超出範圍的版本情況真正的

火花δchangeDataFeedtimestampOutOfRange啟用真正的

如果您提供的啟動版本大於表上最後一次提交的版本,或者啟動時間戳比表上最後一次提交的時間戳新,那麼在啟用上述配置時,將返回一個空的讀結果。

如果您提供的結束版本大於表上最後一次提交的版本,或者結束時間戳比表上最後一次提交的時間戳新,那麼在批處理讀取模式下啟用上述配置時,將返回開始版本和最後一次提交之間的所有更改。

更改數據事件模式

除了數據列之外,變更數據還包含標識變更事件類型的元數據列:

列名

類型

_change_type

字符串

插入update_preimageupdate_postimage刪除(1)

_commit_version

包含更改的Delta日誌或表版本。

_commit_timestamp

時間戳

創建提交時關聯的時間戳。

(1)像原為更新前的值,postimage更新後的值。

常見問題(FAQ)

啟用變更數據提要的開銷是什麼?

沒有明顯的影響。更改數據記錄是在查詢執行過程中按順序生成的,通常比重寫文件的總大小小得多。

變更記錄的保留政策是什麼?

變更記錄遵循與過期表版本相同的保留策略,如果它們超出了指定的保留期限,則將通過VACUUM清理。

變更數據提要中的新記錄何時可用?

更改數據與Delta Lake事務一起提交,並將與表中的新數據同時可用。

筆記本

筆記本顯示了如何將接種疫苗絕對數量的銀表的變化傳播到疫苗接種率的金表。

更換數據輸入筆記本