工作與三角洲湖表的曆史
每個操作,修改一個三角洲湖表創建一個新的表版本。您可以使用曆史信息審核操作或查詢一個表在一個特定的時間點。
檢索三角洲曆史表
操作,您可以檢索信息用戶、時間戳等每個寫表通過運行一個增量曆史
命令。倒序返回的操作。默認情況下表曆史保留30天。
描述曆史' /數據/事件/ '——得到的全部曆史表描述曆史δ。' /數據/事件/ '描述曆史' /數據/事件/ '限製1——得到最後一個操作描述曆史eventsTable
火花的SQL語法細節,請參閱描述曆史。
看到三角洲湖API文檔Scala / Java / Python語法細節。
數據瀏覽提供了一個可視化視圖的三角洲的詳細表信息和曆史表。除了表模式和樣本數據,你可以點擊曆史選項卡,查看曆史顯示的表描述曆史
。
曆史模式
的輸出曆史
操作有以下列。
列 |
類型 |
描述 |
---|---|---|
版本 |
長 |
表版本生成的操作。 |
時間戳 |
時間戳 |
當這個版本。 |
用戶標識 |
字符串 |
用戶的ID運行操作。 |
用戶名 |
字符串 |
用戶運行操作的名稱。 |
操作 |
字符串 |
操作的名稱。 |
operationParameters |
地圖 |
操作的參數(例如,謂詞)。 |
工作 |
結構體 |
工作的細節操作。 |
筆記本 |
結構體 |
筆記本的操作運行的細節。 |
clusterId |
字符串 |
ID的集群的操作運行。 |
readVersion |
長 |
版本的表讀執行寫操作。 |
isolationLevel |
字符串 |
隔離級別用於此操作。 |
isBlindAppend |
布爾 |
這個操作是否附加數據。 |
operationMetrics |
地圖 |
指標的操作(例如,和文件修改的行數)。 |
userMetadata |
字符串 |
如果是指定用戶定義提交元數據 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | |版本時間戳userId |操作用戶名| | operationParameters | |工作筆記本| clusterId | readVersion | isolationLevel | isBlindAppend | operationMetrics | + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | 5 | 2019-07-29 14:07:47 | # # # # # # | | |刪除(謂詞- > [" (…零| | # # # # # # | | 4 | WriteSerializable假| | (numTotalRows - >…| | 4 | 2019-07-29 14:07:41 | # # # # # # | | |更新(謂詞- > (id…零| | # # # # # # | | 3 | WriteSerializable假| | (numTotalRows - >…| | 3 | 2019-07-29 14:07:29 | # # # # # # | | |刪除(謂詞- > [" (…零| | # # # # # # | | 2 | WriteSerializable假| | (numTotalRows - >…| | 2 | 2019-07-29 14:06:56 | # # # # # # | | |更新(謂詞- > (id…零| | # # # # # # | | 1 | WriteSerializable假| | (numTotalRows - >…| | 1 | 2019-07-29 14:04:31 | # # # # # # | | |刪除(謂詞- > [" (…零| | # # # # # # | 0 | | WriteSerializable假| | (numTotalRows - >…| | 0 | 2019-07-29 14:01:40 | # # # # # # | | |寫[模式- > ErrorIfE……|null| ###| ###| null|WriteSerializable| true|[numFiles -> 2, n...| +-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
請注意
一些可用的其他列不如果你寫進三角洲表使用以下方法:
列添加在未來將永遠被添加在最後一列。
操作指標的鑰匙
的曆史
操作返回操作指標的集合operationMetrics
列映射。
下麵的表列出了地圖鍵定義的操作。
操作 |
指標名稱 |
描述 |
---|---|---|
寫,創建表選擇,替代選擇表的副本 |
||
numFiles |
寫文件數量。 |
|
numOutputBytes |
大小的字節寫內容。 |
|
numOutputRows |
寫的行數。 |
|
流媒體更新 |
||
numAddedFiles |
文件數量補充道。 |
|
numRemovedFiles |
數量的文件刪除。 |
|
numOutputRows |
寫的行數。 |
|
numOutputBytes |
寫的字節大小。 |
|
刪除 |
||
numAddedFiles |
文件數量補充道。沒有提供在分區表的刪除。 |
|
numRemovedFiles |
數量的文件刪除。 |
|
numDeletedRows |
刪除的行數。沒有提供在分區表的刪除。 |
|
numCopiedRows |
複製的行數的過程中刪除文件。 |
|
executionTimeMs |
整個操作時間執行。 |
|
scanTimeMs |
時間掃描文件匹配。 |
|
rewriteTimeMs |
時間重寫匹配的文件。 |
|
截斷 |
||
numRemovedFiles |
數量的文件刪除。 |
|
executionTimeMs |
整個操作時間執行。 |
|
合並 |
||
numSourceRows |
在源DataFrame的行數。 |
|
numTargetRowsInserted |
插入到目標表的行數。 |
|
numTargetRowsUpdated |
在目標表更新的行數。 |
|
numTargetRowsDeleted |
目標表中刪除的行數。 |
|
numTargetRowsCopied |
目標的行數複製。 |
|
numOutputRows |
總寫的行數。 |
|
numTargetFilesAdded |
數量的文件添加到水槽(目標)。 |
|
numTargetFilesRemoved |
文件數量從水槽中刪除(目標)。 |
|
executionTimeMs |
整個操作時間執行。 |
|
scanTimeMs |
時間掃描文件匹配。 |
|
rewriteTimeMs |
時間重寫匹配的文件。 |
|
更新 |
||
numAddedFiles |
文件數量補充道。 |
|
numRemovedFiles |
數量的文件刪除。 |
|
numUpdatedRows |
更新的行數。 |
|
numCopiedRows |
的行數隻複製在更新文件的過程。 |
|
executionTimeMs |
整個操作時間執行。 |
|
scanTimeMs |
時間掃描文件匹配。 |
|
rewriteTimeMs |
時間重寫匹配的文件。 |
|
FSCK |
numRemovedFiles |
數量的文件刪除。 |
轉換 |
numConvertedFiles |
拚花已經被轉換的文件的數量。 |
優化 |
||
numAddedFiles |
文件數量補充道。 |
|
numRemovedFiles |
文件數量優化。 |
|
numAddedBytes |
添加表優化後的字節數。 |
|
numRemovedBytes |
的字節數。 |
|
minFileSize |
規模最小的文件後,表進行優化。 |
|
p25FileSize |
後第25百分位文件表的大小進行優化。 |
|
p50FileSize |
平均文件大小後表進行優化。 |
|
p75FileSize |
第75個百分位的大小文件後表進行優化。 |
|
maxFileSize |
最大文件的大小後,表進行優化。 |
|
克隆 |
||
sourceTableSize |
源表的大小在字節版本的克隆。 |
|
sourceNumOfFiles |
數量的文件在源表的克隆版。 |
|
numRemovedFiles |
文件數量從目標表中刪除如果表取代了先前的三角洲。 |
|
removedFilesSize |
總大小的字節的文件刪除目標表如果表取代了先前的三角洲。 |
|
numCopiedFiles |
數量的文件複製到新的位置。0為淺克隆。 |
|
copiedFilesSize |
總大小字節的文件複製到新的位置。0為淺克隆。 |
|
恢複 |
||
tableSizeAfterRestore |
表大小的字節後恢複。 |
|
numOfFilesAfterRestore |
表中數量的文件後恢複。 |
|
numRemovedFiles |
恢複刪除的文件操作的數量。 |
|
numRestoredFiles |
被添加的文件數量的恢複。 |
|
removedFilesSize |
大小的字節的文件被還原。 |
|
restoredFilesSize |
大小字節的文件中添加的恢複。 |
|
真空 |
||
numDeletedFiles |
刪除文件的數量。 |
|
numVacuumedDirectories |
真空的目錄。 |
|
numFilesToDelete |
要刪除的文件數量。 |
查詢一個表(舊的快照時間旅行)
三角洲湖時間旅行允許您查詢一個年長的三角洲表的快照。時間旅行有許多用例,包括:
重新創建分析、報告、或輸出(例如,機器學習模型)的輸出。這對調試或審計可能是有用的,尤其是在監管的行業。
編寫複雜的時態查詢。
在您的數據修複錯誤。
為一組提供快照隔離快速變化的表的查詢。
三角洲湖時間旅行的語法
三角洲湖支持查詢以前的表版本基於時間戳或表版本(在事務日誌記錄)。
timestamp_expression
可以是任何一個:2018 - 10 - 18 t22:15:12.013z
,也就是說,可以把一個字符串,該字符串轉換為一個時間戳鑄造(' 2018-10-1813:36:32c '作為時間戳)
“2018-10-18”
,也就是說,一個日期字符串current_timestamp ()- - - - - -時間間隔12小時
date_sub(當前日期(),1)
其他表達式,也可以把一個時間戳
版本
是一個長期的價值,可以獲得輸出的嗎描述曆史table_spec
。
既不timestamp_expression
也不版本
子查詢。
隻接受日期或時間戳字符串。例如,“2019-01-01”
和“2019 - 01 - 01 t00:00:00.000z”
。看下麵的代碼例如語法:
選擇*從people10m時間戳作為的2018 - 10 - 18 t22:15:12.013z選擇*從δ。' /tmp/δ/people10m”版本作為的123年
df1=火花。讀。選項(“timestampAsOf”,“2019-01-01”)。表(“people10m”)df2=火花。讀。選項(“versionAsOf”,123年)。負載(“/ tmp /δ/ people10m”)
您還可以使用@
語法來指定時間戳或版本的表名。必須在時間戳yyyyMMddHHmmssSSS
格式。您可以指定一個版本@
通過將一個v
的版本。看下麵的代碼例如語法:
選擇*從people10m@20190101000000000選擇*從people10m@v123
火花。讀。表(“people10m@20190101000000000”)火花。讀。表(“people10m@v123”)火花。讀。負載(“/ tmp /δ/ people10m@20190101000000000”)火花。讀。負載(“/ tmp /δ/ people10m@v123”)
事務日誌檢查點是什麼?
三角洲湖表版本為JSON文件中的記錄_delta_log
目錄,這是存儲在表的數據。優化查詢、檢查站三角洲湖總量表版本鋪檢查點文件,防止需要閱讀所有的JSON版本表的曆史。磚優化檢查點頻率數據的大小和工作負載。用戶應該不需要直接與檢查點。檢查點頻率可隨時更改,不另行通知。
配置數據保留時間旅行
時間旅行前一版本,你必須保留這兩個的日誌和數據文件的版本。
δ表數據文件支持從來沒有自動刪除;隻有當你刪除數據文件運行真空。真空
不刪除三角洲日誌文件;日誌文件自動清理後檢查點都寫。
在默認情況下可以時間旅行到三角洲表30天,除非你有:
運行
真空
你的差值表。改變了數據或日誌文件中使用以下保留時間段表屬性:
delta.logRetentionDuration=“間隔<時間>”
:控製表的曆史保存多久。默認值是時間間隔30.天
。每次寫的一個檢查站,磚自動清理日誌條目超過保留時間間隔。如果你將這個配置設置為一個足夠大的價值,許多日誌條目被保留。這應該不會影響性能,操作日誌是常數時間。曆史上的操作是平行但日誌大小增加將變得更加昂貴。
delta.deletedFileRetentionDuration=“間隔<時間>”
:控製多久以前文件必須被刪除之前的候選人真空
。默認值是時間間隔7天
。訪問曆史數據即使你運行的30天
真空
差值表,集delta.deletedFileRetentionDuration=“間隔30.天”
。此設置可能會導致您的存儲成本上升。
恢複一個增量表的狀態
請注意
在磚運行時7.4及以上。
你可以恢複一個增量表通過使用其先前的狀態恢複
命令。δ表內部維護曆史版本的表,使它恢複到早期狀態。之前版本對應狀態或時間戳的早些時候的狀態創建支持的選項恢複
命令。
重要的
你可以恢複已經恢複的表。
你可以恢複克隆表。
你必須有
修改
允許在桌子上被恢複。表恢複到一個舊版本,其中手動或通過數據文件被刪除
真空
將會失敗。恢複這個版本部分仍然是可能的spark.sql.files.ignoreMissingFiles
被設置為真正的
。時間戳格式恢複的狀態
yyyy-MM-ddHH: mm: ss
。隻提供一個日期(yyyy-MM-dd
還支持)字符串。
恢複表db。target_table來版本作為的<版本>恢複表δ。' /數據/目標/ '來時間戳作為的<時間戳>
語法細節,請參閱恢複。
重要的
恢複是一個數據修改操作。三角洲湖日誌條目的添加恢複
命令包含dataChange設置為true。如果有一個下遊應用程序,例如結構化流工作流程對三角洲湖表的更新,改變日誌條目添加的數據恢複操作是新數據更新,可能會導致重複的數據和處理它們。
例如:
表版本 |
操作 |
三角洲日誌更新 |
記錄在數據更改日誌更新 |
---|---|---|---|
0 |
插入 |
AddFile(/路徑/ /文件1,dataChange = true) |
(name =維克多,= 29歲(name =喬治,年齡= 55) |
1 |
插入 |
AddFile(/路徑/ /文件2,dataChange = true) |
(name =喬治,年齡= 39) |
2 |
優化 |
AddFile(/路徑/ / file-3 dataChange = false), RemoveFile(/道路/ /文件1)RemoveFile路徑(/ / /文件2) |
(沒有記錄作為優化壓實不會改變表中的數據) |
3 |
恢複(version = 1) |
RemoveFile(/道路/ / file-3), AddFile(/路徑/ /文件1,dataChange = true), AddFile(/路徑/ /文件2,dataChange = true) |
(name =維克多,年齡= 29),(name =喬治,年齡= 55),(name =喬治,年齡= 39) |
在前麵的例子中,恢複
命令的結果更新已經看到當閱讀三角洲表版本0和1。如果流媒體查詢是閱讀此表,那麼這些文件將被視為新添加的數據和處理。
恢複指標
請注意
在磚運行時8.2及以上。
恢複
報告以下指標作為一個單獨的行DataFrame操作完成後:
table_size_after_restore
:恢複後表的大小。num_of_files_after_restore
:表中的文件恢複後的數量。num_removed_files
:文件數量從表中刪除(邏輯刪除)。num_restored_files
:由於回滾文件數量恢複。removed_files_size
:總大小字節的文件從表中刪除。restored_files_size
:總大小字節的文件恢複。
使用三角洲湖時間旅行的例子
為用戶解決意外刪除一個表
111年
:插入成my_table選擇*從my_table時間戳作為的date_sub(當前日期(),1)在哪裏用戶標識=111年
解決意外錯誤更新一個表:
合並成my_table目標使用my_table時間戳作為的date_sub(當前日期(),1)源在源。用戶標識=目標。用戶標識當匹配然後更新集*
查詢添加新客戶的數量在過去的一周。beplay体育app下载地址
選擇數(截然不同的用戶標識)- - - - - -(選擇數(截然不同的用戶標識)從my_table時間戳作為的date_sub(當前日期(),7))
我怎麼找到最後一個提交的版本火花會話嗎?
得到最後的版本號提交當前寫的SparkSession
在所有線程和所有表、查詢SQL配置spark.databricks.delta.lastCommitVersionInSession
。
集火花。磚。δ。lastCommitVersionInSession
火花。相依。得到(“spark.databricks.delta.lastCommitVersionInSession”)
火花。相依。得到(“spark.databricks.delta.lastCommitVersionInSession”)
如果沒有提交的SparkSession
、查詢返回一個空值的關鍵。
請注意
如果你共享相同的SparkSession
在多個線程,它類似於跨多個線程共享變量;你可能打擊競態條件的並發更新配置值。