更改數據提要

筆記

  • DELTA更改數據feed可在Databricks運行時8.4及以上提供。

  • 本文介紹了如何使用更改數據提要功能來記錄和查詢三角洲表的行級別更改信息。要了解如何根據源數據的更改來更新三角洲實時表管道中的表格,請參見使用三角洲實時表更改數據捕獲

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

您可以使用SQL和DataFrame API讀取批次查詢中的更改事件(即,DF.Read),以及使用DataFrame API的流詢問(也就是說,DF.Readstream)。

用例

默認情況下不啟用更改數據供稿。啟用更改數據提要時,以下用例應驅動。

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

  • 物有意見:創建最新的,彙總的信息視圖,以用於BI和分析,而無需重新處理完整的基礎表,而僅在更改進行的地方更新。

  • 傳輸變化:向下遊係統(例如KAFKA或RDBMS)發送更改數據FEED,這些係統可以使用它在數據管道的後期階段進行逐步處理。

  • 審計蹤跡表:捕獲更改數據feed作為三角洲表提供永久存儲和有效的查詢功能,以查看隨著時間的流逝,包括刪除何時發生以及進行了哪些更新。

啟用更改數據提要

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

  • 新表:設置表屬性delta.enablechangedatafeed=真的在裏麵創造桌子命令。

    創造桌子學生((IDint,,,,姓名細繩,,,,年齡inttblproperties((三角洲enablechangedatafeed=真的
  • 現有表:設置表屬性delta.enablechangedatafeed=真的在裏麵改變桌子命令。

    改變桌子MyDeltaTaptblproperties((三角洲enablechangedatafeed=真的
  • 所有新桌子

    火花數據映三角洲特性默認enablechangedatafeed=真的;

重要的

  • 一旦啟用了表格的更改數據供稿選項,就無法使用Databricks運行時8.1或以下寫入表。您可以隨時閱讀表。

  • 隻有更改您可以記錄更改數據供稿;過去的更改未捕獲。

更改數據存儲

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

文件中的文件_change_data文件夾遵循表的保留政策。因此,如果您運行真空命令,更改數據提要數據也已刪除。

閱讀批次查詢中的更改

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

您將版本指定為整數和時間戳為格式中的字符串yyyy-mm-dd [HH:MM:SS [.sss]]

如果您提供的版本比記錄更改事件的版本更低或年齡較低的版本,也就是說,當啟用更改數據供稿時,會引發錯誤,以表明未啟用更改數據feed。

- 版本為ints或longs,例如從版本0到10的更改選擇*table_changes(('tablename',,,,0,,,,10- 時間戳為字符串格式的時間戳選擇*table_changes(('tablename',,,,'2021-04-21 05:45:46',,,,'2021-05-21 12:00:00'- 僅提供啟動時間/時間戳選擇*table_changes(('tablename',,,,0- 字符串中的數據庫/架構名稱,用於表名稱,帶有用於逃脫點和特殊字符的背景選擇*table_changes(('dbname.'dotted.tablename`'',,,,'2021-04-21 06:45:46',,,,'2021-05-21 12:00:00'- 基於路徑的表選擇*table_changes_by_path(('\小路',,,,'2021-04-21 05:45:46'
#版本為ints或longs火花格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \選項((“起點”,,,,0\ \選項((“ Endingversion”,,,,10\ \桌子((“ MyDeltatable”#Timestamps作為格式的時間戳火花格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \選項((“起始Timestamp”,,,,'2021-04-21 05:45:46'\ \選項((“ EndingTimestamp”,,,,'2021-05-21 12:00:00'\ \桌子((“ MyDeltatable”#僅提供啟動時間/時間戳火花格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \選項((“起點”,,,,0\ \桌子((“ MyDeltatable”#基於路徑的表火花格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \選項((“起始Timestamp”,,,,'2021-04-21 05:45:46'\ \加載((“路徑延伸”
//版本為ints或longs火花格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”選項((“起點”,,,,0選項((“ Endingversion”,,,,10桌子((“ MyDeltatable”//時間戳作為格式的時間戳火花格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”選項((“起始Timestamp”,,,,“ 2021-04-21 05:45:46”選項((“ EndingTimestamp”,,,,“ 2021-05-21 12:00:00”桌子((“ MyDeltatable”//僅提供啟動/時間戳火花格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”選項((“起點”,,,,0桌子((“ MyDeltatable”//基於路徑的表火花格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”選項((“起始Timestamp”,,,,“ 2021-04-21 05:45:46”加載((“路徑延伸”

閱讀流質查詢的更改

#提供起始版本火花readstream格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \選項((“起點”,,,,0\ \桌子((“ MyDeltatable”#提供開始時間戳火花readstream格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \選項((“起始Timestamp”,,,,“ 2021-04-21 05:35:43”\ \加載((“/途徑可造成的”#不提供啟動版/時間戳將導致最新的快照首先獲取火花readstream格式((“三角洲”\ \選項((“ ReadChangeFeed”,,,,“真的”\ \桌子((“ MyDeltatable”
//提供起始版本火花readstream格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”選項((“起點”,,,,0桌子((“ MyDeltatable”//提供起始時間戳火花readstream格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”選項((“起點”,,,,“ 2021-04-21 05:35:43”加載((“/途徑可造成的”//不提供啟動版/時間戳將導致最新快照首先獲取火花readstream格式((“三角洲”選項((“ ReadChangeFeed”,,,,“真的”桌子((“ MyDeltatable”

要在閱讀表格時獲取更改數據,請設置選項ReadChangeFeed真的。這起點或者開始Timestamp是可選的,如果未提供的話,流將在流媒體時返回表的最新快照插入以及未來的變化作為變更數據。諸如費率限製之類的選項(maxfilespertrigger,,,,maxbytespertrigger) 和排除閱讀更改數據時也得到支持。

筆記

對於啟動快照版本以外的版本,限製速率可能是原子。也就是說,整個提交版本將受到限製,否則將返回整個提交版本。

更改數據事件模式

除了數據列外,更改數據還包含確定變更事件類型的元數據列:

列名

類型

_change_type

細繩

插入,,,,update_preimage,,,,update_postimage,,,,刪除(1)

_commit_version

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

_commit_timestamp

時間戳

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

(1)預先形象是更新之前的值,後圖像是更新後的值。

常見問題(常見問題解答)

啟用更改數據源的開銷是什麼?

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

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

變更記錄遵循與過時的表版本相同的保留政策,如果它們不在指定的保留期之外,將通過真空進行清理。

新記錄何時在變更數據供稿中可用?

更改數據與三角洲湖交易一起使用,並將在表格中提供的同時獲得。

筆記本

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

更改數據提要筆記本

在新標簽中打開筆記本