表工具命令

三角洲表支持許多實用程序的命令。

刪除文件不再由三角洲表引用

您可以刪除不再引用的δ表和文件保留以上閾值通過運行真空命令在桌子上。真空不是自動觸發。文件的默認保留閾值是7天。要改變這種行為,明白了數據保留

重要的

  • 真空從目錄中刪除所有文件不是由三角洲湖,忽略目錄開始_。如果你儲存額外的元數據是結構化流檢查站在三角洲表目錄,使用目錄名稱等_checkpoints

  • 真空刪除數據文件,日誌文件。日誌文件後自動刪除和異步檢查點操作。日誌文件的默認的保持期是30天,可配置的通過delta.logRetentionDuration屬性設置的改變TBLPROPERTIESSQL的方法。看到表屬性

  • 的能力時間旅行回到一個版本超過保存期丟失後運行真空

請注意

當δ啟用緩存,集群可能包含數據從拚花已被刪除的文件真空。因此,它可能會查詢以前的表的數據版本的文件已經被刪除。重新啟動集群將刪除緩存數據。看到δ緩存配置

真空eventsTable——真空不是必需的文件版本比默認的保存期真空“/數據/事件”在基於路徑表——真空文件真空δ' /數據/事件/ '真空δ' /數據/事件/ '保留One hundred.小時——真空所需的文件不超過100小時的舊版本真空eventsTable運行——做排練要刪除文件的列表

火花的SQL語法細節,請參閱

  • 磚運行時7。x,上圖:真空

  • 磚運行時5.5 LTS和6. x:_

請注意

Python API有磚運行時的6.1及以上。

delta.tables進口*deltaTable=DeltaTableforPath(火花,pathToTable)#基於路徑表,或deltaTable=DeltaTableforName(火花,的表)#蜂巢metastore-based表deltaTable真空()#真空不是必需的文件版本比默認的保存期deltaTable真空(One hundred.)#真空所需的文件不超過100小時的舊版本

請注意

Scala API有磚運行時的6.0及以上。

進口ioδ_瓦爾deltaTable=DeltaTableforPath(火花,pathToTable)deltaTable真空()/ /真空不是必需的文件版本比默認的保存期deltaTable真空(One hundred.)/ /真空所需的文件不超過100小時的舊版本

請注意

磚的Java API可用運行時6.0及以上。

進口io.delta.tables。*;進口org.apache.spark.sql.functions;DeltaTabledeltaTable=DeltaTableforPath(火花,pathToTable);deltaTable真空();/ /真空不是必需的文件版本比默認的保存期deltaTable真空(One hundred.);/ /真空所需的文件不超過100小時的舊版本

看到三角洲湖apiScala的Java、Python語法細節。

警告

建議您設置一個保留間隔至少7天,因為舊的快照和未提交的文件仍然可以使用並發讀者或作者。如果真空清理活動文件,並發的讀者可能會失敗,或者更糟的是,表時可以損壞真空刪除文件,尚未提交。你必須選擇一個時間間隔較長時間最長的並發事務和最長的時期,任何流可以落後於最新更新表。

三角洲湖有一個安全檢查防止你運行一個危險真空命令。如果你確定沒有這個表上執行的操作,需要更長的時間比保留你計劃指定的時間間隔,你可以關掉這個安全檢查通過設置引發配置屬性spark.databricks.delta.retentionDurationCheck.enabled

審計信息

真空致力於三角洲事務日誌包含審計信息。您可以查詢審計事件使用描述曆史

檢索三角洲曆史表

操作,您可以檢索信息用戶、時間戳等每個寫表通過運行一個增量曆史命令。倒序返回的操作。默認情況下表曆史保留30天。

描述曆史' /數據/事件/ '——得到的全部曆史表描述曆史δ' /數據/事件/ '描述曆史' /數據/事件/ '限製1——得到最後一個操作描述曆史eventsTable

火花的SQL語法細節,請參閱

請注意

Python API有磚運行時的6.1及以上。

delta.tables進口*deltaTable=DeltaTableforPath(火花,pathToTable)fullHistoryDF=deltaTable曆史()#得到完整的表的曆史lastOperationDF=deltaTable曆史(1)#最後一個手術

請注意

Scala API有磚運行時的6.0及以上。

進口ioδ_瓦爾deltaTable=DeltaTableforPath(火花,pathToTable)瓦爾fullHistoryDF=deltaTable曆史()/ /得到完整的表的曆史瓦爾lastOperationDF=deltaTable曆史(1)/ /最後一個手術

請注意

磚的Java API可用運行時6.0及以上。

進口io.delta.tables。*;DeltaTabledeltaTable=DeltaTableforPath(火花,pathToTable);DataFramefullHistoryDF=deltaTable曆史();/ /得到完整的表的曆史DataFramelastOperationDF=deltaTable曆史(1);/ /獲取DeltaTable最後一個手術

看到三角洲湖apiScala / 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|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

最大文件的大小後,表進行優化。

操作

指標名稱

描述

克隆(1)

sourceTableSize

源表的大小在字節版本的克隆。

sourceNumOfFiles

數量的文件在源表的克隆版。

numRemovedFiles

文件數量從目標表中刪除如果表取代了先前的三角洲。

removedFilesSize

總大小的字節的文件刪除目標表如果表取代了先前的三角洲。

numCopiedFiles

數量的文件複製到新的位置。0為淺克隆。

copiedFilesSize

總大小字節的文件複製到新的位置。0為淺克隆。

恢複(2)

tableSizeAfterRestore

表大小的字節後恢複。

numOfFilesAfterRestore

表中數量的文件後恢複。

numRemovedFiles

恢複刪除的文件操作的數量。

numRestoredFiles

被添加的文件數量的恢複。

removedFilesSize

大小的字節的文件被還原。

restoredFilesSize

大小字節的文件中添加的恢複。

真空(3)

numDeletedFiles

刪除文件的數量。

numVacuumedDirectories

真空的目錄。

numFilesToDelete

要刪除的文件數量。

(1)需要磚運行時7.3 LTS或以上。

(2)需要磚運行時的7.4或以上。

(3)需要磚運行時的8.2或以上。

檢索三角洲表詳細信息

您可以檢索三角洲表的詳細信息(例如,文件數量,數據大小)描述細節

描述細節' /數據/事件/ '描述細節eventsTable

火花的SQL語法細節,請參閱

詳細模式

這個操作的輸出隻有一行使用以下模式。

類型

描述

格式

字符串

表的格式,δ

id

字符串

表的惟一ID。

的名字

字符串

metastore中定義的表的名稱。

描述

字符串

表的描述。

位置

字符串

表的位置。

createdAt

時間戳

當創建表。

lastModified

時間戳

當表最後修改。

partitionColumns

字符串數組

如果表分區的分區列的名稱。

numFiles

在最新版本的文件的數量表。

sizeInBytes

int

最新的尺寸表的快照字節。

屬性

string-string地圖

這個表的所有屬性設置。

minReaderVersion

int

最低版本的讀者(根據日誌協議),可以閱讀。

minWriterVersion

int

最低版本的作家(根據日誌協議),可以寫。

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | |格式id名稱| |描述位置| createdAt | lastModified | partitionColumns | numFiles | sizeInBytes | |屬性minReaderVersion | minWriterVersion | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +δ| | d31f82d2-a69f-42e…| default.deltatable零| |文件:/用戶/圖奧/…| 2020-06-05 12:20:…|2020- - - - - -06-05 12:20:20| []| 10| 12345| []| 1| 2| +------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+

生成一個清單文件

可以為三角洲表生成一個清單文件,可以使用其他處理引擎(也就是說,其他比Apache火花)閱讀差值表。例如,生成一個清單文件,可以使用< PrestoAnd >讀三角洲表,你運行以下:

生成symlink_format_manifestδ' /tmp/事件生成symlink_format_manifesteventsTable

請注意

Python API有磚運行時的6.3及以上。

deltaTable=DeltaTableforPath(<路徑- - - - - -- - - - - -δ- - - - - ->)deltaTable生成(“symlink_format_manifest”)

請注意

Scala API有磚運行時的6.3及以上。

瓦爾deltaTable=DeltaTableforPath(<路徑- - - - - -- - - - - -δ- - - - - ->)deltaTable生成(“symlink_format_manifest”)

請注意

磚的Java API可用運行時6.3及以上。

DeltaTabledeltaTable=DeltaTableforPath(<路徑- - - - - -- - - - - -δ- - - - - ->);deltaTable生成(“symlink_format_manifest”);

拚花表轉換為δ表

表就地拚花表轉換為δ。這個命令將列出目錄中的所有文件,創建了一個三角洲湖事務日誌跟蹤這些文件,並自動推斷數據模式通過閱讀所有鋪文件的頁腳。如果您的數據分區,您必須指定分區列作為DDL-formatted字符串的模式(即,< column-name1 >< >類型,< column-name2 >< >類型,)。

請注意

如果拚花表是由結構化流,可以避免通過使用文件的清單_spark_metadata子目錄中包含的事實來源文件表設置SQL配置spark.databricks.delta.convert.useMetadataLog真正的

——轉換分區鋪餐桌路徑< path-to-table >的轉換δ拚花' <路徑- - - - - -- - - - - -> '——把分區表鑲花在路徑< path-to-table >和分區通過整數列命名為“部分”和“第二部分”轉換δ拚花' <路徑- - - - - -- - - - - -> '分區通過(部分int,第二部分int)

語法細節,請參閱

  • 磚運行時7。x,上圖:轉換為δ

  • 磚運行時5.5 LTS和6. x:_

請注意

Python API有磚運行時的6.1及以上。

delta.tables進口*#轉換分區鋪餐桌路徑< path-to-table >的deltaTable=DeltaTableconvertToDelta(火花,“parquet. < path-to-table >”)#轉換分區鋪桌子路徑< path-to-table >和分區的整數列命名為“部分”partitionedDeltaTable=DeltaTableconvertToDelta(火花,“parquet. < path-to-table >”,“int一部分”)

請注意

Scala API有磚運行時的6.0及以上。

進口ioδ_/ /轉換分區鋪餐桌路徑< path-to-table >的瓦爾deltaTable=DeltaTableconvertToDelta(火花,“parquet. < path-to-table >”)/ /轉換分區鋪桌子路徑< path-to-table >和分區通過整數列命名為“部分”和“第二部分”瓦爾partitionedDeltaTable=DeltaTableconvertToDelta(火花,“parquet. < path-to-table >”,“int部分,第二部分int”)

請注意

Scala API有磚運行時的6.0及以上。

進口io.delta.tables。*;/ /轉換分區鋪餐桌路徑< path-to-table >的DeltaTabledeltaTable=DeltaTableconvertToDelta(火花,“parquet. < path-to-table >”);/ /轉換分區鋪桌子路徑< path-to-table >和分區通過整數列命名為“部分”和“第二部分”DeltaTabledeltaTable=DeltaTableconvertToDelta(火花,“parquet. < path-to-table >”,“int部分,第二部分int”);

請注意

任何文件不是由三角洲湖是無形的和跟蹤運行時可以刪除真空。你應該避免更新或添加數據文件轉換過程中。表轉換後,確保所有經過三角洲湖寫道。

冰山表轉換為三角洲表

請注意

這個特性是在公共預覽

這個特性在磚運行時支持10.4及以上。

你可以冰山表轉換為一個差值表如果底層文件格式表鑲花的冰山。下麵的命令創建一個基於冰山三角洲湖事務日誌表的本地文件清單、模式和分區信息。轉換器還收集列數據在轉換期間,除非沒有統計數據都是確定的。

——轉換中的冰山表路徑< path-to-table >。轉換δ冰山' <路徑- - - - - -- - - - - -> '——轉換路徑< path-to-table >中的冰山表沒有收集統計信息。轉換δ冰山' <路徑- - - - - -- - - - - -> '沒有統計數據

請注意

把冰山metastore表不支持。

δ表轉換為拚花表

你可以很容易地把δ表回拚花表使用以下步驟:

  1. 如果你有執行三角洲湖可以改變數據文件的操作(例如,刪除合並),運行真空保留0小時刪除所有數據文件不屬於表的最新版本。

  2. 刪除_delta_log目錄表中的目錄。

恢複一個增量表的狀態

請注意

在磚運行時7.4及以上。

你可以恢複一個增量表通過使用其先前的狀態恢複命令。δ表內部維護曆史版本的表,使它恢複到早期狀態。之前版本對應狀態或時間戳的早些時候的狀態創建支持的選項恢複命令。

重要的

  • 你可以恢複已經恢複的表。

  • 表恢複到一個舊版本,其中手動或通過數據文件被刪除真空將會失敗。恢複這個版本部分仍然是可能的spark.sql.files.ignoreMissingFiles被設置為真正的

  • 時間戳格式恢複的狀態yyyy-MM-ddHH: mm: ss。隻提供一個日期(yyyy-MM-dd還支持)字符串。

恢複dbtarget_table版本作為<版本>恢複δ' /數據/目標/ '時間戳作為<時間戳>
delta.tables進口*deltaTable=DeltaTableforPath(火花,<路徑- - - - - -- - - - - ->)#基於路徑表,或deltaTable=DeltaTableforName(火花,<- - - - - -的名字>)#蜂巢metastore-based表deltaTablerestoreToVersion(0)#恢複古老版本的表deltaTablerestoreToTimestamp(“2019-02-14”)#恢複到一個特定的時間戳
進口ioδ_瓦爾deltaTable=DeltaTableforPath(火花,<路徑- - - - - -- - - - - ->)瓦爾deltaTable=DeltaTableforName(火花,<- - - - - -的名字>)deltaTablerestoreToVersion(0)/ /恢複表老的版本deltaTablerestoreToTimestamp(“2019-02-14”)/ /恢複到一個特定的時間戳
進口io.delta.tables。*;DeltaTabledeltaTable=DeltaTableforPath(火花,<路徑- - - - - -- - - - - ->);DeltaTabledeltaTable=DeltaTableforName(火花,<- - - - - -的名字>);deltaTablerestoreToVersion(0)/ /恢複表老的版本deltaTablerestoreToTimestamp(“2019-02-14”)/ /恢複到一個特定的時間戳

語法細節,請參閱恢複(三角洲湖磚)

重要的

恢複是一個數據修改操作。三角洲湖日誌條目的添加恢複命令包含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:總大小字節的文件恢複。

    恢複指標的例子

訪問控製表

你必須有修改允許在桌子上被恢複。

克隆一個差值表

請注意

在磚運行時7.2及以上。

您可以創建一個複製現有的三角洲表在一個特定的版本使用克隆命令。克隆可以深或淺。

克隆類型

  • 一個深克隆是一個克隆,將源表的數據複製到克隆目標除了現有的元數據表。此外,流元數據也是克隆,這樣一個流寫入增量表可以停止在一個源表,繼續克隆的目標從那裏離開。

  • 一個淺克隆是一個克隆,不將數據文件複製到克隆的目標。表元數據相當於源。創建這些克隆更便宜。

任何更改,深或淺克隆隻影響克隆本身,而不是源表。

克隆的元數據包括:模式、分區信息,不變量,nullability。深克隆,流和複製到元數據也是克隆。不是克隆表描述和元數據用戶定義元數據提交

重要的

  • 淺克隆參考數據文件在源目錄中。如果你運行真空在源表的客戶將不再能夠讀取數據文件和引用FileNotFoundException將拋出。在這種情況下,運行克隆與替代淺克隆將修複克隆。如果發生這種情況,可以考慮使用深克隆,而這並不取決於源表。

  • 深克隆不依賴於他們克隆的來源,但創建成本很高,因為深克隆複製數據和元數據。

  • 克隆與取代到目標,已經有一個表在路徑創建一個δ日誌如果不存在這條道路。你可以通過運行清理任何現有數據真空

  • 如果現有的三角洲表存在,創建一個新的提交,包括新的元數據和數據從源表。這個新提交增量,這意味著隻有新變化自從上次克隆承諾表。

  • 克隆一個表是不一樣的創建作為選擇商品交易顧問基金。一個克隆複製源表的元數據除了數據。克隆也有簡單的語法:你不需要指定分區,格式化,不變量,nullability等等,因為它們來自源表。

  • 一個克隆的表有一個獨立的曆史從源表。時間旅行對克隆表的查詢將不會使用相同的輸入源表工作。

創建δ' /數據/目標/ '克隆δ' /數據// '——創建一個深克隆/數據/源/數據/目標創建取代dbtarget_table克隆dbsource_table——替換目標創建如果存在δ' /數據/目標/ '克隆dbsource_table如果目標表存在——空操作創建dbtarget_table克隆δ' /數據/創建dbtarget_table克隆δ' /數據/版本作為版本創建dbtarget_table克隆δ' /數據/時間戳作為timestamp_expression——時間戳可以像“2019-01-01”或者像date_sub(當前日期(),1)
delta.tables進口*deltaTable=DeltaTableforPath(火花,pathToTable)#基於路徑表,或deltaTable=DeltaTableforName(火花,的表)#蜂巢metastore-based表deltaTable克隆(目標,isShallow,取代)#克隆源在最新版本deltaTablecloneAtVersion(版本,目標,isShallow,取代)#克隆源在一個特定的版本#克隆源在特定時間戳等時間戳=“2019-01-01”deltaTablecloneAtTimestamp(時間戳,目標,isShallow,取代)
進口ioδ_瓦爾deltaTable=DeltaTableforPath(火花,pathToTable)瓦爾deltaTable=DeltaTableforName(火花,的表)deltaTable克隆(目標,isShallow,取代)/ /克隆源在最新版本deltaTablecloneAtVersion(版本,目標,isShallow,取代)/ /克隆源在一個特定的版本deltaTablecloneAtTimestamp(時間戳,目標,isShallow,取代)/ /克隆源在特定時間戳
進口io.delta.tables。*;DeltaTabledeltaTable=DeltaTableforPath(火花,pathToTable);DeltaTabledeltaTable=DeltaTableforName(火花,的表);deltaTable克隆(目標,isShallow,取代)/ /克隆源在最新版本deltaTablecloneAtVersion(版本,目標,isShallow,取代)/ /克隆源在一個特定的版本deltaTablecloneAtTimestamp(時間戳,目標,isShallow,取代)/ /克隆源在特定時間戳

語法細節,請參閱創建表克隆

克隆指標

請注意

在磚運行時8.2及以上。

克隆報告以下指標作為一個單獨的行DataFrame操作完成後:

  • source_table_size:源表的大小被克隆的字節。

  • source_num_of_files:在源表文件的數量。

  • num_removed_files:如果表所取代,有多少文件從當前表中刪除。

  • num_copied_files:從源複製的文件數量為淺克隆(0)。

  • removed_files_size:大小字節的文件正在從當前表中刪除。

  • copied_files_size:大小字節的文件複製到表。

克隆指標的例子

權限

您必須配置為磚表權限訪問控製和雲提供商。

訪問控製表

以下深和淺克隆所需權限:

  • 選擇在源表權限。

  • 如果您使用的是克隆創建一個新表,創建允許在數據庫中創建表。

  • 如果您使用的是克隆替換一個表,你必須有修改允許在桌子上。

雲提供商的權限

如果您已經創建了一個深克隆,任何用戶讀取深克隆必須有讀訪問權克隆的目錄。改變克隆,用戶必須對克隆進行寫訪問的目錄中。

如果您已經創建了一個淺克隆,允許任何用戶讀取淺克隆需要閱讀原始表中的文件,由於數據文件仍在源表淺克隆,克隆的目錄。更改克隆,用戶將需要克隆的目錄寫訪問。

克隆的用例

數據歸檔

數據可能需要更長時間比與時間旅行或災難恢複是可行的。在這些情況下,您可以創建一個深克隆保存的狀態表檔案在某個時間點上。增量歸檔也可以保持一個不斷更新的災難恢複的源表。

——每個月運行創建取代δ' /一些/存檔/路徑克隆my_prod_table

機器學習流複製

做機器學習的時候,你可能想要歸檔的某些版本表你訓練一個毫升模型。未來的模型可以使用這個歸檔數據集進行了測試。

——訓練模型版本15δ表創建δ' /模型/數據集克隆entire_dataset版本作為15

短期實驗生產表

測試一個工作流在生產表而不損壞的表,您可以很容易地創建一個淺克隆。這允許您運行任意工作流的克隆表包含了所有的生產數據,但不影響任何生產工作負載。

——執行淺克隆創建取代my_test克隆my_prod_table;更新my_test在哪裏user_id無效的=真正的;——一堆運行驗證。曾經快樂的:——這應該利用克隆來修剪的更新信息——如果可能的話在克隆改變文件合並my_prod_table使用my_testmy_testuser_id< = >my_prod_tableuser_id匹配my_testuser_id然後更新*;下降my_test;

數據共享

其他業務單位在一個組織中可能需要訪問相同的數據,但可能不需要最新的更新。而不是直接訪問源表,您可以提供克隆具有不同權限不同的業務單位。克隆的性能可以超過一個簡單的視圖。

——執行深克隆創建取代shared_table克隆my_prod_table;——授予其他用戶訪問共享表格蘭特選擇shared_table' <用戶- - - - - -的名字> @ <用戶- - - - - ->com;

表屬性覆蓋

請注意

在磚運行時7.5及以上。

表屬性覆蓋尤其有用:

  • 注釋表與業主或用戶信息共享數據時不同的業務單位。

  • 歸檔三角洲表和時間旅行是必需的。您可以指定日誌保存期獨立檔案表。例如:

    創建取代存檔my_table克隆刺激my_tableTBLPROPERTIES(δlogRetentionDuration=“3650天”,δdeletedFileRetentionDuration=“3650天”)位置“xx: / /歸檔/ my_table”
    dt=DeltaTableforName(火花,“prod.my_table”)tblProps={“delta.logRetentionDuration”:“3650天”,“delta.deletedFileRetentionDuration”:“3650天”}dt克隆(“xx: / /歸檔/ my_table”,isShallow=,取代=真正的,tblProps)
    瓦爾dt=DeltaTableforName(火花,“prod.my_table”)瓦爾tblProps=地圖(“delta.logRetentionDuration”- >“3650天”,“delta.deletedFileRetentionDuration”- >“3650天”)dt克隆(“xx: / /歸檔/ my_table”,isShallow=,取代=真正的,屬性=tblProps)

找到最後一個提交的版本引發會話

請注意

在磚運行時7.1及以上。

得到最後的版本號提交當前寫的SparkSession在所有線程和所有表、查詢SQL配置spark.databricks.delta.lastCommitVersionInSession

火花δlastCommitVersionInSession
火花相依得到(“spark.databricks.delta.lastCommitVersionInSession”)
火花相依得到(“spark.databricks.delta.lastCommitVersionInSession”)

如果沒有提交的SparkSession、查詢返回一個空值的關鍵。

請注意

如果你共享相同的SparkSession在多個線程,它類似於跨多個線程共享變量;你可能打擊競態條件的並發更新配置值。