使用三角洲湖變化數據以磚
請注意
三角洲湖變化數據提要有磚運行時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
拋出。改變數據提要可以處理的範圍版本如果用戶設置以下配置真正的
。
集火花。磚。δ。changeDataFeed。timestampOutOfRange。啟用=真正的;
如果你提供啟動版本大於最後一個提交一個表或一個開始時間戳比最近提交更新一個表,然後啟用前配置時,將返回空讀取結果。
如果你提供一個最終版本大於最後一個提交一個表或結束時間戳比最近提交更新表,當先前的配置啟用批處理讀模式,所有更改版本開始,最後提交之間被歸還。
改變數據事件模式
除了數據列,修改數據包含元數據列,確定更改事件的類型:
列名 |
類型 |
值 |
---|---|---|
|
字符串 |
|
|
長 |
三角洲日誌或表版本包含的變化。 |
|
時間戳 |
當創建提交相關的時間戳。 |
(1)像原
更新前的值,postimage
是更新後的值。