工作與三角洲湖表的曆史

每個操作,修改一個三角洲湖表創建一個新的表版本。您可以使用曆史信息審核操作或查詢一個表在一個特定的時間點。

檢索三角洲曆史表

操作,您可以檢索信息用戶、時間戳等每個寫表通過運行一個增量曆史命令。倒序返回的操作。默認情況下表曆史保留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還支持)字符串。

恢複dbtarget_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在多個線程,它類似於跨多個線程共享變量;你可能打擊競態條件的並發更新配置值。