使用三角洲湖變化數據以磚
請注意
三角洲湖變化數據提要有磚運行時8.4及以上。
這篇文章描述了如何記錄和查詢為三角洲表使用行級變化信息數據提要功能的變化。學習如何更新表在三角洲住表管道基於源數據的變化,看到的改變數據獲取與三角洲生活表。
改變數據提要允許磚跟蹤三角洲表的行級版本之間的更改。三角洲表上啟用時,運行時記錄更改事件寫入的數據表。這包括行數據與元數據顯示指定的行是否插入、刪除或更新。
你可以閱讀改變事件的批處理使用火花SQL查詢,Apache火花DataFrames和結構化流。
重要的
改變飼料配合工作表曆史數據提供變化的信息。因為克隆一個增量表創建一個單獨的曆史,改變數據以克隆原始表的表不匹配。
用例
更改數據提要在默認情況下不啟用。以下用例應該開車當你啟用更改數據提要。
金銀表:提高三角洲湖性能通過處理後初始行級更改
合並
,更新
,或刪除
操作加速和簡化ETL和英語教學操作。物化視圖:創建最新的聚合視圖的信息用於BI和分析,而無需再加工完整的底層表,而不是隻在更新變化。
傳輸變化:發送一個改變數據提要下遊係統如卡夫卡或RDBMS可以使用它來逐步過程後期的數據管道。
審計跟蹤表:捕獲變更數據提要作為三角洲表提供永久存儲和高效的查詢功能查看所有變化隨著時間的推移,包括刪除發生時和更新。
使改變數據提要
您必須顯式地啟用更改數據提要選擇使用下列方法之一:
新表:設置表屬性
delta.enableChangeDataFeed=真正的
在創建表
命令。創建表學生(idINT,的名字字符串,年齡INT)TBLPROPERTIES(δ。enableChangeDataFeed=真正的)
現有表:設置表屬性
delta.enableChangeDataFeed=真正的
在改變表
命令。改變表myDeltaTable集TBLPROPERTIES(δ。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
來真正的
。的startingVersion
或startingTimestamp
是可選的,如果沒有提供流返回最新的表的快照的時候流作為一個嗎插入
和未來的變化變化數據。選擇速度限製(maxFilesPerTrigger
,maxBytesPerTrigger
),excludeRegex
也支持當閱讀改變數據。
請注意
速度限製可以原子版本除了開始快照版本。也就是說,整個提交版本將速率限製或整個提交將被歸還。
默認情況下,如果用戶通過一個版本或時間戳超過最後提交表,錯誤timestampGreaterThanLatestCommit
拋出。在磚上麵運行時11.3 LTS和改變數據提要可以處理的範圍版本如果用戶設置以下配置真正的
:
集火花。磚。δ。changeDataFeed。timestampOutOfRange。啟用=真正的;
如果你提供啟動版本大於最後一個提交一個表或一個開始時間戳比最近提交更新一個表,然後啟用前配置時,將返回空讀取結果。
如果你提供一個最終版本大於最後一個提交一個表或結束時間戳比最近提交更新表,當先前的配置啟用批處理讀模式,所有更改版本開始,最後提交之間被歸還。
改變數據提要的模式是什麼?
當你閱讀改變數據提要的一個表,使用最新表格版本的模式。
請注意
大多數模式改變和演化操作是完全支持。表和列映射使不支持所有用例和演示不同的行為。看到修改數據提要的局限性為表列映射啟用。
除了從三角洲模式的表數據列,修改數據提要包含元數據列,確定更改事件的類型:
列名 |
類型 |
值 |
---|---|---|
|
字符串 |
|
|
長 |
三角洲日誌或表版本包含的變化。 |
|
時間戳 |
當創建提交相關的時間戳。 |
(1)像原
更新前的值,postimage
是更新後的值。
請注意
你不能使改變數據提要表如果模式包含列添加了相同的名稱作為這些列。重命名表中的列來解決這一衝突之前試圖使更改數據提要。
修改數據提要的局限性為表列映射啟用
使用列映射上啟用一個三角洲表,您可以刪除或重命名列的表沒有修改數據文件的現有數據。啟用列映射後,更改數據執行非附加模式變化後飼料有一定的局限性,如重命名或刪除列,改變數據類型,或nullability變化。
重要的
磚運行時版本,啟用了列映射的表不支持改變數據流讀取提要。
改變顯示的列映射不捕獲變更數據提要。你不能讀事務更改數據飼料或範圍的非附加模式發生改變。
磚運行時的12.0及以下,你不能讀改變數據提要表列映射使經曆了列重命名或刪除。
在磚運行時的12.1及以上,您可以更改數據上執行批量讀取提要表啟用了列映射,經曆了非附加模式變化。而不是使用最新版本的表的模式,讀操作使用的最終版本的模式中指定的表查詢。查詢仍然失敗如果指定的版本範圍跨度非附加模式改變。