表工具命令
三角洲表支持許多實用程序的命令。
刪除文件不再由三角洲表引用
您可以刪除不再引用的δ表和文件保留以上閾值通過運行真空
命令在桌子上。真空
不是自動觸發。文件的默認保留閾值是7天。要改變這種行為,明白了數據保留。
重要的
請注意
當δ啟用緩存,集群可能包含數據從拚花已被刪除的文件真空
。因此,它可能會查詢以前的表的數據版本的文件已經被刪除。重新啟動集群將刪除緩存數據。看到δ緩存配置。
真空eventsTable——真空不是必需的文件版本比默認的保存期真空“/數據/事件”在基於路徑表——真空文件真空δ。' /數據/事件/ '真空δ。' /數據/事件/ '保留One hundred.小時——真空所需的文件不超過100小時的舊版本真空eventsTable幹運行——做排練要刪除文件的列表
火花的SQL語法細節,請參閱
磚運行時7。x,上圖:真空
磚運行時5.5 LTS和6. x:_
請注意
Python API有磚運行時的6.1及以上。
從delta.tables進口*deltaTable=DeltaTable。forPath(火花,pathToTable)#基於路徑表,或deltaTable=DeltaTable。forName(火花,的表)#蜂巢metastore-based表deltaTable。真空()#真空不是必需的文件版本比默認的保存期deltaTable。真空(One hundred.)#真空所需的文件不超過100小時的舊版本
請注意
Scala API有磚運行時的6.0及以上。
進口io。δ。表。_瓦爾deltaTable=DeltaTable。forPath(火花,pathToTable)deltaTable。真空()/ /真空不是必需的文件版本比默認的保存期deltaTable。真空(One hundred.)/ /真空所需的文件不超過100小時的舊版本
請注意
磚的Java API可用運行時6.0及以上。
進口io.delta.tables。*;進口org.apache.spark.sql.functions;DeltaTabledeltaTable=DeltaTable。forPath(火花,pathToTable);deltaTable。真空();/ /真空不是必需的文件版本比默認的保存期deltaTable。真空(One hundred.);/ /真空所需的文件不超過100小時的舊版本
看到三角洲湖apiScala的Java、Python語法細節。
警告
建議您設置一個保留間隔至少7天,因為舊的快照和未提交的文件仍然可以使用並發讀者或作者。如果真空
清理活動文件,並發的讀者可能會失敗,或者更糟的是,表時可以損壞真空
刪除文件,尚未提交。你必須選擇一個時間間隔較長時間最長的並發事務和最長的時期,任何流可以落後於最新更新表。
三角洲湖有一個安全檢查防止你運行一個危險真空
命令。如果你確定沒有這個表上執行的操作,需要更長的時間比保留你計劃指定的時間間隔,你可以關掉這個安全檢查通過設置引發配置屬性spark.databricks.delta.retentionDurationCheck.enabled
來假
。
檢索三角洲曆史表
操作,您可以檢索信息用戶、時間戳等每個寫表通過運行一個增量曆史
命令。倒序返回的操作。默認情況下表曆史保留30天。
描述曆史' /數據/事件/ '——得到的全部曆史表描述曆史δ。' /數據/事件/ '描述曆史' /數據/事件/ '限製1——得到最後一個操作描述曆史eventsTable
火花的SQL語法細節,請參閱
磚運行時7。x,上圖:描述曆史(三角洲湖磚)
磚運行時5.5 LTS和6. x:_
請注意
Python API有磚運行時的6.1及以上。
從delta.tables進口*deltaTable=DeltaTable。forPath(火花,pathToTable)fullHistoryDF=deltaTable。曆史()#得到完整的表的曆史lastOperationDF=deltaTable。曆史(1)#最後一個手術
請注意
Scala API有磚運行時的6.0及以上。
進口io。δ。表。_瓦爾deltaTable=DeltaTable。forPath(火花,pathToTable)瓦爾fullHistoryDF=deltaTable。曆史()/ /得到完整的表的曆史瓦爾lastOperationDF=deltaTable。曆史(1)/ /最後一個手術
請注意
磚的Java API可用運行時6.0及以上。
進口io.delta.tables。*;DeltaTabledeltaTable=DeltaTable。forPath(火花,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...| +-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
請注意
隻有當曆史命令可用操作指標和曆史上的操作運行使用磚運行時的6.5或以上。
一些可用的其他列不如果你寫進三角洲表使用以下方法:
列添加在未來將永遠被添加在最後一列。
操作指標的鑰匙
的曆史
操作返回操作指標的集合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語法細節,請參閱
磚運行時7。x,上圖:描述的細節
磚運行時5.5 LTS和6. x:_
詳細模式
這個操作的輸出隻有一行使用以下模式。
列 |
類型 |
描述 |
---|---|---|
格式 |
字符串 |
表的格式, |
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_manifest為表eventsTable
請注意
Python API有磚運行時的6.3及以上。
deltaTable=DeltaTable。forPath(<路徑- - - - - -來- - - - - -δ- - - - - -表>)deltaTable。生成(“symlink_format_manifest”)
請注意
Scala API有磚運行時的6.3及以上。
瓦爾deltaTable=DeltaTable。forPath(<路徑- - - - - -來- - - - - -δ- - - - - -表>)deltaTable。生成(“symlink_format_manifest”)
請注意
磚的Java API可用運行時6.3及以上。
DeltaTabledeltaTable=DeltaTable。forPath(<路徑- - - - - -來- - - - - -δ- - - - - -表>);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=DeltaTable。convertToDelta(火花,“parquet. < path-to-table >”)#轉換分區鋪桌子路徑< path-to-table >和分區的整數列命名為“部分”partitionedDeltaTable=DeltaTable。convertToDelta(火花,“parquet. < path-to-table >”,“int一部分”)
請注意
Scala API有磚運行時的6.0及以上。
進口io。δ。表。_/ /轉換分區鋪餐桌路徑< path-to-table >的瓦爾deltaTable=DeltaTable。convertToDelta(火花,“parquet. < path-to-table >”)/ /轉換分區鋪桌子路徑< path-to-table >和分區通過整數列命名為“部分”和“第二部分”瓦爾partitionedDeltaTable=DeltaTable。convertToDelta(火花,“parquet. < path-to-table >”,“int部分,第二部分int”)
請注意
Scala API有磚運行時的6.0及以上。
進口io.delta.tables。*;/ /轉換分區鋪餐桌路徑< path-to-table >的DeltaTabledeltaTable=DeltaTable。convertToDelta(火花,“parquet. < path-to-table >”);/ /轉換分區鋪桌子路徑< path-to-table >和分區通過整數列命名為“部分”和“第二部分”DeltaTabledeltaTable=DeltaTable。convertToDelta(火花,“parquet. < path-to-table >”,“int部分,第二部分int”);
請注意
任何文件不是由三角洲湖是無形的和跟蹤運行時可以刪除真空
。你應該避免更新或添加數據文件轉換過程中。表轉換後,確保所有經過三角洲湖寫道。
冰山表轉換為三角洲表
你可以冰山表轉換為一個差值表如果底層文件格式表鑲花的冰山。下麵的命令創建一個基於冰山三角洲湖事務日誌表的本地文件清單、模式和分區信息。轉換器還收集列數據在轉換期間,除非沒有統計數據
都是確定的。
——轉換中的冰山表路徑< path-to-table >。轉換來δ冰山。' <路徑- - - - - -來- - - - - -表> '——轉換路徑< path-to-table >中的冰山表沒有收集統計信息。轉換來δ冰山。' <路徑- - - - - -來- - - - - -表> '沒有統計數據
請注意
把冰山metastore表不支持。
δ表轉換為拚花表
你可以很容易地把δ表回拚花表使用以下步驟:
如果你有執行三角洲湖可以改變數據文件的操作(例如,
刪除
或合並
),運行真空保留0小時刪除所有數據文件不屬於表的最新版本。刪除
_delta_log
目錄表中的目錄。
恢複一個增量表的狀態
請注意
在磚運行時7.4及以上。
你可以恢複一個增量表通過使用其先前的狀態恢複
命令。δ表內部維護曆史版本的表,使它恢複到早期狀態。之前版本對應狀態或時間戳的早些時候的狀態創建支持的選項恢複
命令。
重要的
你可以恢複已經恢複的表。
你可以恢複克隆表。
表恢複到一個舊版本,其中手動或通過數據文件被刪除
真空
將會失敗。恢複這個版本部分仍然是可能的spark.sql.files.ignoreMissingFiles
被設置為真正的
。時間戳格式恢複的狀態
yyyy-MM-ddHH: mm: ss
。隻提供一個日期(yyyy-MM-dd
還支持)字符串。
恢複表db。target_table來版本作為的<版本>恢複表δ。' /數據/目標/ '來時間戳作為的<時間戳>
從delta.tables進口*deltaTable=DeltaTable。forPath(火花,<路徑- - - - - -來- - - - - -表>)#基於路徑表,或deltaTable=DeltaTable。forName(火花,<表- - - - - -的名字>)#蜂巢metastore-based表deltaTable。restoreToVersion(0)#恢複古老版本的表deltaTable。restoreToTimestamp(“2019-02-14”)#恢複到一個特定的時間戳
進口io。δ。表。_瓦爾deltaTable=DeltaTable。forPath(火花,<路徑- - - - - -來- - - - - -表>)瓦爾deltaTable=DeltaTable。forName(火花,<表- - - - - -的名字>)deltaTable。restoreToVersion(0)/ /恢複表老的版本deltaTable。restoreToTimestamp(“2019-02-14”)/ /恢複到一個特定的時間戳
進口io.delta.tables。*;DeltaTabledeltaTable=DeltaTable。forPath(火花,<路徑- - - - - -來- - - - - -表>);DeltaTabledeltaTable=DeltaTable。forName(火花,<表- - - - - -的名字>);deltaTable。restoreToVersion(0)/ /恢複表老的版本deltaTable。restoreToTimestamp(“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。如果流媒體查詢是閱讀此表,那麼這些文件將被視為新添加的數據和處理。
克隆一個差值表
請注意
在磚運行時7.2及以上。
您可以創建一個複製現有的三角洲表在一個特定的版本使用克隆
命令。克隆可以深或淺。
克隆類型
一個深克隆是一個克隆,將源表的數據複製到克隆目標除了現有的元數據表。此外,流元數據也是克隆,這樣一個流寫入增量表可以停止在一個源表,繼續克隆的目標從那裏離開。
一個淺克隆是一個克隆,不將數據文件複製到克隆的目標。表元數據相當於源。創建這些克隆更便宜。
任何更改,深或淺克隆隻影響克隆本身,而不是源表。
克隆的元數據包括:模式、分區信息,不變量,nullability。深克隆,流和複製到元數據也是克隆。不是克隆表描述和元數據用戶定義元數據提交。
重要的
淺克隆參考數據文件在源目錄中。如果你運行
真空
在源表的客戶將不再能夠讀取數據文件和引用FileNotFoundException
將拋出。在這種情況下,運行克隆與替代淺克隆將修複克隆。如果發生這種情況,可以考慮使用深克隆,而這並不取決於源表。深克隆不依賴於他們克隆的來源,但創建成本很高,因為深克隆複製數據和元數據。
克隆與
取代
到目標,已經有一個表在路徑創建一個δ日誌如果不存在這條道路。你可以通過運行清理任何現有數據真空
。如果現有的三角洲表存在,創建一個新的提交,包括新的元數據和數據從源表。這個新提交增量,這意味著隻有新變化自從上次克隆承諾表。
克隆一個表是不一樣的
創建表作為選擇
或商品交易顧問基金
。一個克隆複製源表的元數據除了數據。克隆也有簡單的語法:你不需要指定分區,格式化,不變量,nullability等等,因為它們來自源表。一個克隆的表有一個獨立的曆史從源表。時間旅行對克隆表的查詢將不會使用相同的輸入源表工作。
創建表δ。' /數據/目標/ '克隆δ。' /數據/源/ '——創建一個深克隆/數據/源/數據/目標創建或取代表db。target_table克隆db。source_table——替換目標創建表如果不存在表δ。' /數據/目標/ '克隆db。source_table如果目標表存在——空操作創建表db。target_table淺克隆δ。' /數據/源”創建表db。target_table淺克隆δ。' /數據/源”版本作為的版本創建表db。target_table淺克隆δ。' /數據/源”時間戳作為的timestamp_expression——時間戳可以像“2019-01-01”或者像date_sub(當前日期(),1)
從delta.tables進口*deltaTable=DeltaTable。forPath(火花,pathToTable)#基於路徑表,或deltaTable=DeltaTable。forName(火花,的表)#蜂巢metastore-based表deltaTable。克隆(目標,isShallow,取代)#克隆源在最新版本deltaTable。cloneAtVersion(版本,目標,isShallow,取代)#克隆源在一個特定的版本#克隆源在特定時間戳等時間戳=“2019-01-01”deltaTable。cloneAtTimestamp(時間戳,目標,isShallow,取代)
進口io。δ。表。_瓦爾deltaTable=DeltaTable。forPath(火花,pathToTable)瓦爾deltaTable=DeltaTable。forName(火花,的表)deltaTable。克隆(目標,isShallow,取代)/ /克隆源在最新版本deltaTable。cloneAtVersion(版本,目標,isShallow,取代)/ /克隆源在一個特定的版本deltaTable。cloneAtTimestamp(時間戳,目標,isShallow,取代)/ /克隆源在特定時間戳
進口io.delta.tables。*;DeltaTabledeltaTable=DeltaTable。forPath(火花,pathToTable);DeltaTabledeltaTable=DeltaTable。forName(火花,的表);deltaTable。克隆(目標,isShallow,取代)/ /克隆源在最新版本deltaTable。cloneAtVersion(版本,目標,isShallow,取代)/ /克隆源在一個特定的版本deltaTable。cloneAtTimestamp(時間戳,目標,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_test在my_test。user_id< = >my_prod_table。user_id當匹配和my_test。user_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=DeltaTable。forName(火花,“prod.my_table”)tblProps={“delta.logRetentionDuration”:“3650天”,“delta.deletedFileRetentionDuration”:“3650天”}dt。克隆(“xx: / /歸檔/ my_table”,isShallow=假,取代=真正的,tblProps)
瓦爾dt=DeltaTable。forName(火花,“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
在多個線程,它類似於跨多個線程共享變量;你可能打擊競態條件的並發更新配置值。