使用三角洲湖變化數據以磚

請注意

  • 三角洲湖變化數據提要有磚運行時8.4及以上。

  • 這篇文章描述了如何記錄和查詢為三角洲表使用行級變化信息數據提要功能的變化。學習如何更新表在三角洲住表管道基於源數據的變化,看到的改變數據獲取與三角洲生活表

改變數據提要允許磚跟蹤三角洲表的行級版本之間的更改。三角洲表上啟用時,運行時記錄更改事件寫入的數據表。這包括行數據與元數據顯示指定的行是否插入、刪除或更新。

你可以閱讀改變事件的批處理使用火花SQL查詢,Apache火花DataFrames和結構化流。

重要的

改變飼料配合工作表曆史數據提供變化的信息。因為克隆一個增量表創建一個單獨的曆史,改變數據以克隆原始表的表不匹配。

用例

更改數據提要在默認情況下不啟用。以下用例應該開車當你啟用更改數據提要。

  • 金銀表:提高三角洲湖性能通過處理後初始行級更改合並,更新,或刪除操作加速和簡化ETL和英語教學操作。

  • 物化視圖:創建最新的聚合視圖的信息用於BI和分析,而無需再加工完整的底層表,而不是隻在更新變化。

  • 傳輸變化:發送一個改變數據提要下遊係統如卡夫卡或RDBMS可以使用它來逐步過程後期的數據管道。

  • 審計跟蹤表:捕獲變更數據提要作為三角洲表提供永久存儲和高效的查詢功能查看所有變化隨著時間的推移,包括刪除發生時和更新。

使改變數據提要

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

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

    創建學生(idINT,的名字字符串,年齡INT)TBLPROPERTIES(δenableChangeDataFeed=真正的)
  • 現有表:設置表屬性delta.enableChangeDataFeed=真正的改變命令。

    改變myDeltaTableTBLPROPERTIES(δenableChangeDataFeed=真正的)
  • 所有新表:

    火花δ屬性違約enableChangeDataFeed=真正的;

重要的

  • 一旦你使改變數據提要選擇一個表,您可以使用磚不再寫表運行時8.1或更低水平。你總是可以讀表。

隻更改你可以改變數據提要記錄;過去的並不準確,修改一個表。

改變數據存儲

磚記錄數據變化更新,刪除,合並操作的_change_data表目錄文件夾下。一些操作,如純插入操作和完整的分區刪除,不生成數據_change_data目錄,因為磚可以有效地計算出的改變直接從事務日誌數據提要。

中的文件_change_data文件夾按照表的保留政策。因此,如果你運行真空命令,修改數據提要數據也刪除。

閱讀改變批量查詢

您可以提供版本或時間戳開始和結束。開始和結束的版本和時間戳是包容性的查詢。閱讀從一個特定的版本開始變化最新的版本的表,僅指定起始版本或時間戳。

你指定一個版本作為一個整數和一個時間戳作為字符串的格式yyyy-MM-dd [HH: mm: ss [.SSS]]

如果你提供一個低版本或時間戳比有變化的事件記錄,更改數據提要時就會激發出了一個錯誤,表示更改數據提要不啟用。

——版本作為int或long如從0到10選擇*table_changes(“表”,0,10)——時間戳字符串格式化的時間戳選擇*table_changes(“表”,“2021-04-21 05:45:46”,“2021-05-21 12:00:00”)——隻提供startingVersion /時間戳選擇*table_changes(“表”,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”)
版本號為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”)
/ /版本為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是可選的,如果沒有提供流返回最新的表的快照的時候流作為一個嗎插入和未來的變化變化數據。選擇速度限製(maxFilesPerTrigger,maxBytesPerTrigger),excludeRegex也支持當閱讀改變數據。

請注意

速度限製可以原子版本除了開始快照版本。也就是說,整個提交版本將速率限製或整個提交將被歸還。

默認情況下,如果用戶通過一個版本或時間戳超過最後提交表,錯誤timestampGreaterThanLatestCommit拋出。在磚上麵運行時11.3 LTS和改變數據提要可以處理的範圍版本如果用戶設置以下配置真正的:

火花δchangeDataFeedtimestampOutOfRange啟用=真正的;

如果你提供啟動版本大於最後一個提交一個表或一個開始時間戳比最近提交更新一個表,然後啟用前配置時,將返回空讀取結果。

如果你提供一個最終版本大於最後一個提交一個表或結束時間戳比最近提交更新表,當先前的配置啟用批處理讀模式,所有更改版本開始,最後提交之間被歸還。

改變數據提要的模式是什麼?

當你閱讀改變數據提要的一個表,使用最新表格版本的模式。

請注意

大多數模式改變和演化操作是完全支持。表和列映射使不支持所有用例和演示不同的行為。看到修改數據提要的局限性為表列映射啟用

除了從三角洲模式的表數據列,修改數據提要包含元數據列,確定更改事件的類型:

列名

類型

_change_type

字符串

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

_commit_version

三角洲日誌或表版本包含的變化。

_commit_timestamp

時間戳

當創建提交相關的時間戳。

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

請注意

你不能使改變數據提要表如果模式包含列添加了相同的名稱作為這些列。重命名表中的列來解決這一衝突之前試圖使更改數據提要。

修改數據提要的局限性為表列映射啟用

使用列映射上啟用一個三角洲表,您可以刪除或重命名列的表沒有修改數據文件的現有數據。啟用列映射後,更改數據執行非附加模式變化後飼料有一定的局限性,如重命名或刪除列,改變數據類型,或nullability變化。

重要的

磚運行時版本,啟用了列映射的表不支持改變數據流讀取提要。

改變顯示的列映射不捕獲變更數據提要。你不能讀事務更改數據飼料或範圍的非附加模式發生改變。

磚運行時的12.0及以下,你不能讀改變數據提要表列映射使經曆了列重命名或刪除。

在磚運行時的12.1及以上,您可以更改數據上執行批量讀取提要表啟用了列映射,經曆了非附加模式變化。而不是使用最新版本的表的模式,讀操作使用的最終版本的模式中指定的表查詢。查詢仍然失敗如果指定的版本範圍跨度非附加模式改變。

常見問題(FAQ)

是什麼使更改數據提要的開銷嗎?

沒有顯著的影響。更改數據記錄查詢執行過程中,生成和一般遠小於重寫文件的總大小。

保留政策變化記錄是什麼?

改變記錄遵循相同的保留政策如表版本過時,並將清理通過真空如果他們不在指定的保存期。

什麼時候新記錄可用在改變數據提要?

更改數據提交以及三角洲湖事務,並將可用的同時新表中的數據可用。

筆記本

這個筆記本顯示了如何更改傳播到銀表的絕對數量的疫苗接種的疫苗接種率。

改變數據提要的筆記本

在新標簽頁打開筆記本