表實用程序命令

Delta表支持許多實用命令。

刪除Delta表不再引用的文件

命令可以刪除Delta表不再引用且超過保留閾值的文件真空命令放在桌子上。真空不會自動觸發。缺省情況下,文件的保留閾值為7天。要更改此行為,請參見數據保留

重要的

  • 真空從Delta Lake不管理的目錄中刪除所有文件,忽略以_.如果要在Delta表目錄中存儲其他元數據,如結構化流檢查點,請使用目錄名,例如_checkpoints

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

  • 能力時間旅行返回到比保留期更早的版本在運行後丟失真空

請注意

當啟用Delta緩存時,集群可能包含已刪除的Parquet文件中的數據真空.因此,可以查詢文件已被刪除的以前表版本的數據。重新啟動集群將刪除緩存的數據。看到配置Delta緩存

真空eventsTable——真空文件不需要的版本比默認保留期真空“/數據/事件”——清空基於路徑的表中的文件真空δ' /數據/事件/ '真空δ' /數據/事件/ '保留One hundred.小時—對超過100小時的版本不需要的文件進行真空處理真空eventsTable運行——做演練,獲取要刪除的文件列表

有關Spark SQL語法的詳細信息,請參見

  • 數據庫運行時7。X及以上:真空

  • Databricks運行時5.5 LTS和6.x:真空

請注意

Python API在Databricks Runtime 6.1及以上版本中可用。

delta.tables進口deltaTableDeltaTableforPath火花pathToTable#基於路徑的表,或者deltaTableDeltaTableforName火花的表# Hive基於metastore的表deltaTable真空()# vacuum文件對於低於默認保留期的版本不需要deltaTable真空One hundred.#真空文件不需要的版本超過100小時

請注意

Scala API在Databricks Runtime 6.0及以上版本中可用。

進口ioδ_瓦爾deltaTableDeltaTableforPath火花pathToTabledeltaTable真空()//在默認保留期之前的版本不需要真空文件deltaTable真空One hundred.//清理文件不需要的版本超過100小時

請注意

Java API在Databricks Runtime 6.0及以上版本中可用。

進口io.delta.tables。*進口org.apache.spark.sql.functionsDeltaTabledeltaTableDeltaTableforPath火花pathToTable);deltaTable真空();//在默認保留期之前的版本不需要真空文件deltaTable真空One hundred.);//清理文件不需要的版本超過100小時

看到三角洲湖api針對Scala, Java和Python的語法細節。

警告

建議您將保留間隔設置為至少7天,因為舊的快照和未提交的文件仍然可以被表的並發讀取者或寫入者使用。如果真空清理活動文件時,並發讀取器可能會失敗,更糟糕的是,當真空刪除尚未提交的文件。您必須選擇一個比最長運行的並發事務和任何流滯後於表的最新更新的最長時間都要長的時間間隔。

三角洲湖有安全檢查,防止你跑危險的地方真空命令。如果您確定在此表上執行的操作所花費的時間沒有超過您計劃指定的保留間隔,則可以通過設置Spark配置屬性關閉此安全檢查spark.databricks.delta.retentionDurationCheck.enabled

審計信息

真空提交到Delta事務日誌包含審計信息。可以使用。命令查詢審計事件描述曆史

要捕獲審計信息,啟用spark.databricks.delta.vacuum.logging.enabled.默認情況下,AWS S3表不啟用審計日誌記錄,這是因為S3在多工作區寫方麵提供了有限的一致性保證。如果您在S3上啟用它,請確保沒有涉及多工作區寫的工作流。否則可能導致數據丟失。

檢索Delta表曆史記錄

方法可以檢索關於每次寫入Delta表的操作、用戶、時間戳等的信息曆史命令。操作按時間順序返回。默認情況下,表曆史記錄將保留30天。

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

有關Spark SQL語法的詳細信息,請參見

請注意

Python API在Databricks Runtime 6.1及以上版本中可用。

delta.tables進口deltaTableDeltaTableforPath火花pathToTablefullHistoryDFdeltaTable曆史()#獲取表的全部曆史lastOperationDFdeltaTable曆史1#獲取最後一個操作

請注意

Scala API在Databricks Runtime 6.0及以上版本中可用。

進口ioδ_瓦爾deltaTableDeltaTableforPath火花pathToTable瓦爾fullHistoryDFdeltaTable曆史()//獲取表的全部曆史瓦爾lastOperationDFdeltaTable曆史1//獲取最後一個操作

請注意

Java API在Databricks Runtime 6.0及以上版本中可用。

進口io.delta.tables。*DeltaTabledeltaTableDeltaTableforPath火花pathToTable);DataFramefullHistoryDFdeltaTable曆史();//獲取表的全部曆史DataFramelastOperationDFdeltaTable曆史1);//獲取DeltaTable上的最後一個操作

看到三角洲湖api查看Scala/Java/Python語法細節。

曆史模式

的輸出曆史操作有以下列。

類型

描述

版本

操作生成的表版本。

時間戳

時間戳

提交此版本時。

用戶標識

字符串

執行操作的用戶ID。

用戶名

字符串

執行操作的用戶名。

操作

字符串

操作名稱。

operationParameters

地圖

操作的參數(例如謂詞)。

工作

結構體

運行操作的作業的詳細信息。

筆記本

結構體

運行操作的筆記本的詳細信息。

clusterId

字符串

執行操作的集群ID。

readVersion

為執行寫操作而讀取的表的版本。

isolationLevel

字符串

用於此操作的隔離級別。

isBlindAppend

布爾

該操作是否追加數據。

operationMetrics

地圖

操作的度量(例如,修改的行數和文件數)。

userMetadata

字符串

如果指定了用戶定義提交元數據

+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+ | 版| |時間戳userId |操作用戶名| | operationParameters | |工作筆記本| clusterId | readVersion | isolationLevel | isBlindAppend | operationMetrics | +-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+ | 5 | 2019-07-2914:07:47| ###| ###| DELETE|[predicate ->["(…|零|###| ###| 4|WriteSerializable| false|[numTotalRows -> ...| | 4|2019-07-29 14:07:41| ###| ###| UPDATE|[predicate -> (id...|null| ###| ###| 3|WriteSerializable| false|[numTotalRows -> ...| | 3|2019-07-29 14:07:29| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 2|WriteSerializable| false|[numTotalRows -> ...| | 2|2019-07-29 14:06:56| ###| ###| UPDATE|[predicate -> (id...|null| ###| ###| 1|WriteSerializable| false|[numTotalRows -> ...| | 1|2019-07-29 14:04:31| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 0|WriteSerializable| false|[numTotalRows -> ...| | 0|2019-07-29 14:01:40| ###| ###| WRITE|[mode -> 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

源數據幀中的行數。

numTargetRowsInserted

插入到目標表中的行數。

numTargetRowsUpdated

目標表中更新的行數。

numTargetRowsDeleted

在目標表中刪除的行數。

numTargetRowsCopied

複製的目標行數。

numOutputRows

寫入的總行數。

numTargetFilesAdded

添加到接收器(目標)的文件數。

numTargetFilesRemoved

從接收器(目標)中刪除的文件數。

executionTimeMs

執行整個操作所花費的時間。

scanTimeMs

掃描文件以查找匹配的時間。

rewriteTimeMs

重寫匹配文件所花費的時間。

更新

numAddedFiles

添加的文件數量。

numRemovedFiles

刪除的文件數量。

numUpdatedRows

更新的行數。

numCopiedRows

在更新文件的過程中剛剛複製的行數。

executionTimeMs

執行整個操作所花費的時間。

scanTimeMs

掃描文件以查找匹配的時間。

rewriteTimeMs

重寫匹配文件所花費的時間。

FSCK

numRemovedFiles

刪除的文件數量。

轉換

numConvertedFiles

已轉換的Parquet文件數。

優化

numAddedFiles

添加的文件數量。

numRemovedFiles

優化的文件數量。

numAddedBytes

優化表後添加的字節數。

numRemovedBytes

刪除的字節數。

minFileSize

優化表後最小文件的大小。

p25FileSize

表優化後的第25百分位文件的大小。

p50FileSize

表優化後的中位數文件大小。

p75FileSize

表優化後的第75百分位文件的大小。

maxFileSize

優化表後最大文件的大小。

操作

指標名稱

描述

克隆(1)

sourceTableSize

克隆版本的源表的大小(以字節為單位)。

sourceNumOfFiles

克隆版本的源表中的文件數。

numRemovedFiles

如果替換了以前的Delta表,則從目標表中刪除的文件數。

removedFilesSize

如果替換了以前的Delta表,則從目標表中刪除的文件的總大小(以字節為單位)。

numCopiedFiles

複製到新位置的文件數。0表示淺克隆。

copiedFilesSize

複製到新位置的文件的總大小(以字節為單位)。0表示淺克隆。

恢複(2)

tableSizeAfterRestore

恢複後的表大小(以字節為單位)。

numOfFilesAfterRestore

恢複後表中的文件數。

numRemovedFiles

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

numRestoredFiles

由於恢複而添加的文件數。

removedFilesSize

大小(以字節為單位),恢複刪除的文件。

restoredFilesSize

由恢複添加的文件的大小(以字節為單位)。

真空(3)

numDeletedFiles

刪除的文件數。

numVacuumedDirectories

真空目錄個數。

numFilesToDelete

要刪除的文件數量。

(1)要求Databricks Runtime 7.3 LTS或以上版本。

(2)要求Databricks Runtime 7.4或以上版本。

(3)要求Databricks Runtime 8.2或以上版本。

檢索Delta表詳細信息

您可以檢索關於Delta表的詳細信息(例如,文件數量、數據大小)描述細節

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

有關Spark SQL語法的詳細信息,請參見

詳細模式

此操作的輸出隻有一行具有以下模式。

類型

描述

格式

字符串

表的格式,即δ

id

字符串

表的唯一ID。

的名字

字符串

在轉移瘤中定義的表名。

描述

字符串

該表的描述信息。

位置

字符串

表的位置。

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| +------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+

生成清單文件

您可以為Delta表生成清單文件,其他處理引擎(即Apache Spark以外的引擎)可以使用該清單文件讀取Delta表。例如,要生成一個可以被Presto和Athena用來讀取Delta表的清單文件,您可以運行以下命令:

生成symlink_format_manifest表格δ' /tmp/事件生成symlink_format_manifest表格eventsTable

請注意

Python API在Databricks Runtime 6.3及以上版本中可用。

deltaTableDeltaTableforPath<路徑--δ-表格>deltaTable生成“symlink_format_manifest”

請注意

Scala API在Databricks Runtime 6.3及以上版本中可用。

瓦爾deltaTableDeltaTableforPath<路徑--δ-表格>deltaTable生成“symlink_format_manifest”

請注意

Java API在Databricks Runtime 6.3及以上版本中可用。

DeltaTabledeltaTableDeltaTableforPath<路徑--δ-表格>);deltaTable生成“symlink_format_manifest”);

把拚花桌改成三角桌

把拚花桌改成三角桌。該命令列出目錄中的所有文件,創建跟蹤這些文件的Delta Lake事務日誌,並通過讀取所有Parquet文件的頁腳自動推斷數據模式。如果數據是分區的,則必須將分區列的模式指定為ddl格式的字符串(即,< column-name1 >< >類型,< column-name2 >< >類型,...)。

請注意

如果使用結構化流創建Parquet表,則可以使用_spark_metadata子目錄作為設置SQL配置的表中包含的文件的真偽源spark.databricks.delta.convert.useMetadataLog真正的

——在路徑<路徑到表>的位置轉換未分區的拚花表轉換δ拚花' <路徑--表格>”轉換分區的Parquet表在路徑'<路徑到表>'和分區的整數列命名為'part'和'part2'轉換δ拚花' <路徑--表格>”分區通過部分int第二部分int

有關語法的詳細信息,請參見

請注意

Python API在Databricks Runtime 6.1及以上版本中可用。

delta.tables進口#在路徑“<路徑到表>”處轉換未分區的拚花表deltaTableDeltaTableconvertToDelta火花“parquet. < path-to-table >”#轉換路徑<路徑到表>的分區拚花表,並按整數列命名為“part”進行分區partitionedDeltaTableDeltaTableconvertToDelta火花“parquet. < path-to-table >”“int一部分”

請注意

Scala API在Databricks Runtime 6.0及以上版本中可用。

進口ioδ_//轉換未分區的Parquet表在路徑'<路徑到表>'瓦爾deltaTableDeltaTableconvertToDelta火花“parquet. < path-to-table >”//轉換路徑'<路徑到表>'的分區拚花表,並由命名為'part'和'part2'的整數列分區瓦爾partitionedDeltaTableDeltaTableconvertToDelta火花“parquet. < path-to-table >”"part int, part2 int"

請注意

Scala API在Databricks Runtime 6.0及以上版本中可用。

進口io.delta.tables。*//轉換未分區的Parquet表在路徑'<路徑到表>'DeltaTabledeltaTableDeltaTableconvertToDelta火花“parquet. < path-to-table >”);//轉換路徑'<路徑到表>'的分區拚花表,並由命名為'part'和'part2'的整數列分區DeltaTabledeltaTableDeltaTableconvertToDelta火花“parquet. < path-to-table >”"part int, part2 int");

請注意

任何沒有被Delta Lake跟蹤的文件都是不可見的,可以在運行時刪除真空.您應該避免在轉換過程中更新或追加數據文件。轉換表之後,確保所有寫操作都經過Delta Lake。

將冰山表轉換為Delta表

請注意

此功能已在公共預覽

Databricks Runtime 10.4及以上版本支持此特性。

如果冰山表的底層文件格式為Parquet,則可以將冰山表轉換為Delta表。下麵的命令基於Iceberg表的本機文件清單、模式和分區信息創建Delta Lake事務日誌。轉換器還在轉換期間收集列統計信息,除非沒有統計數據都是確定的。

——轉換路徑中的冰山表。轉換δ冰山' <路徑--表格>”——轉換路徑的冰山表,不收集統計信息。轉換δ冰山' <路徑--表格>”沒有統計數據

請注意

不支持轉換Iceberg亞metastore表。

把一張三角桌改成拚花桌

您可以使用以下步驟輕鬆地將Delta表轉換回拚花表:

  1. 如果您執行了Delta Lake操作,可以更改數據文件(例如,刪除合並),運行真空保留時間為0小時,用於刪除不屬於該表最新版本的所有數據文件。

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

將Delta表恢複到較早的狀態

請注意

在Databricks Runtime 7.4及以上版本中可用。

方法可以將Delta表恢複到其早期狀態恢複命令。Delta表在內部維護表的曆史版本,使其能夠恢複到較早的狀態。控件支持與早期狀態對應的版本或創建早期狀態的時間戳作為選項恢複命令。

重要的

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

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

  • 恢複到較早狀態的時間戳格式為yyyy-MM-ddHH: mm: ss.隻提供日期(yyyy-MM-dd)字符串也支持。

恢複表格dbtarget_table版本作為<版本>恢複表格δ' /數據/目標/ '時間戳作為<時間戳>
delta.tables進口deltaTableDeltaTableforPath火花<路徑--表格>#基於路徑的表,或者deltaTableDeltaTableforName火花<表格-的名字># Hive基於metastore的表deltaTablerestoreToVersion0#恢複表到最老版本deltaTablerestoreToTimestamp“2019-02-14”#恢複到特定的時間戳
進口ioδ_瓦爾deltaTableDeltaTableforPath火花<路徑--表格>瓦爾deltaTableDeltaTableforName火花<表格-的名字>deltaTablerestoreToVersion0//恢複表到最老版本deltaTablerestoreToTimestamp“2019-02-14”//恢複到特定的時間戳
進口io.delta.tables。*DeltaTabledeltaTableDeltaTableforPath火花<路徑--表格>);DeltaTabledeltaTableDeltaTableforName火花<表格-的名字>);deltaTablerestoreToVersion0//恢複表到最老版本deltaTablerestoreToTimestamp“2019-02-14”//恢複到特定的時間戳

有關語法的詳細信息,請參見還原(Delta Lake on Databricks)

重要的

恢複被認為是一個數據更改操作。三角洲湖日誌條目添加恢複命令包含dataChange設置為true。如果存在下遊應用,例如結構化流作業處理Delta Lake表的更新時,恢複操作添加的數據更改日誌項被視為新的數據更新,處理它們可能會導致數據重複。

例如:

表版本

操作

Delta日誌更新

在數據變更日誌中記錄更新

0

插入

AddFile(/path/to/file-1, dataChange = true)

(名字=維克多,年齡= 29,(名字=喬治,年齡= 55)

1

插入

AddFile(/path/to/file-2, dataChange = true)

(名字= George,年齡= 39)

2

優化

AddFile(/path/to/file-3, dataChange = false), RemoveFile(/path/to/file-1), RemoveFile(/path/to/file-2)

(沒有記錄,因為優化壓縮不會改變表中的數據)

3.

恢複(version = 1)

RemoveFile(/path/to/file-3), AddFile(/path/to/file-1, dataChange = true), AddFile(/path/to/file-2, dataChange = true)

(名字=維克多,年齡= 29),(名字=喬治,年齡= 55),(名字=喬治,年齡= 39)

在上麵的例子中,恢複命令會導致在讀取Delta表版本0和1時已經看到的更新。如果一個流查詢正在讀取這個表,那麼這些文件將被視為新添加的數據,並將再次處理。

恢複指標

請注意

在Databricks Runtime 8.2及以上版本中可用。

恢複一旦操作完成,報告以下指標作為單行數據幀:

  • table_size_after_restore:恢複後的表大小。

  • num_of_files_after_restore:恢複後表中的文件數量。

  • num_removed_files:從表中刪除(邏輯刪除)的文件數量。

  • num_restored_files:回滾恢複的文件個數。

  • removed_files_size:從表中刪除的文件的總大小(以字節為單位)。

  • restored_files_size:恢複文件的總大小(以字節為單位)。

    恢複指標示例

表訪問控製

你一定有修改正在恢複的表的權限。

克隆一個Delta表

請注意

在Databricks Runtime 7.2及以上版本中可用。

方法可以在特定版本中創建現有Delta表的副本克隆命令。克隆可以是深的,也可以是淺的。

克隆類型

  • 一個深克隆是一個克隆,它除了將現有表的元數據複製外,還將源表數據複製到克隆目標。此外,還會克隆流元數據,這樣寫入Delta表的流可以在源表上停止,並從它停止的地方在克隆的目標上繼續。

  • 一個淺克隆不將數據文件複製到克隆目標的克隆。表元數據等價於源。這些複製品的製作成本更低。

對深度克隆或淺克隆所做的任何更改隻影響克隆本身,而不影響源表。

克隆的元數據包括:模式、分區信息、不變量、可空性。僅對於深度克隆,流和複製到元數據也會被克隆。未克隆的元數據是表描述和用戶定義提交元數據

重要的

  • 淺克隆引用源目錄中的數據文件。如果你跑真空在源表上,客戶端將不再能夠讀取引用的數據文件和FileNotFoundException會被拋出。在這種情況下,在淺克隆上運行clone with replace將修複克隆。如果這種情況經常發生,請考慮使用不依賴源表的深度克隆。

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

  • 克隆與取代如果在該路徑上沒有表,則創建一個Delta日誌。運行命令可以清除任何現有數據真空

  • 如果現有的Delta表存在,則創建一個新的提交,其中包含來自源表的新元數據和新數據。這個新的提交是增量的,這意味著自上次克隆以來隻有新的更改被提交到表中。

  • 克隆一個表是不同的創建表格作為選擇商品交易顧問基金.克隆除了複製數據之外,還複製源表的元數據。克隆還具有更簡單的語法:您不需要指定分區、格式、不變量、可空性等,因為它們是從源表中獲取的。

  • 克隆表具有獨立於源表的曆史。克隆表上的時間旅行查詢將不能使用與其源表上相同的輸入。

創建表格δ' /數據/目標/ '克隆δ' /數據// '—在/data/target處創建/data/source的深度克隆創建取代表格dbtarget_table克隆dbsource_table——替換目標創建表格如果存在δ' /數據/目標/ '克隆dbsource_table——如果目標表存在,則不執行操作創建表格dbtarget_table克隆δ' /數據/創建表格dbtarget_table克隆δ' /數據/版本作為版本創建表格dbtarget_table克隆δ' /數據/時間戳作為timestamp_expression——timestamp可以是像" 2019-01-01 "或者像date_sub(current_date(), 1)
delta.tables進口deltaTableDeltaTableforPath火花pathToTable#基於路徑的表,或者deltaTableDeltaTableforName火花的表# Hive基於metastore的表deltaTable克隆目標isShallow取代#克隆源代碼的最新版本deltaTablecloneAtVersion版本目標isShallow取代#克隆特定版本的源代碼#在特定的時間戳上克隆源代碼,如timestamp= " 2019-01-01 "deltaTablecloneAtTimestamp時間戳目標isShallow取代
進口ioδ_瓦爾deltaTableDeltaTableforPath火花pathToTable瓦爾deltaTableDeltaTableforName火花的表deltaTable克隆目標isShallow取代//克隆源到最新版本deltaTablecloneAtVersion版本目標isShallow取代//克隆源到特定版本deltaTablecloneAtTimestamp時間戳目標isShallow取代//在特定時間戳克隆源代碼
進口io.delta.tables。*DeltaTabledeltaTableDeltaTableforPath火花pathToTable);DeltaTabledeltaTableDeltaTableforName火花的表);deltaTable克隆目標isShallow取代//克隆源到最新版本deltaTablecloneAtVersion版本目標isShallow取代//克隆源到特定版本deltaTablecloneAtTimestamp時間戳目標isShallow取代//在特定時間戳克隆源代碼

有關語法的詳細信息,請參見創建表克隆

克隆指標

請注意

在Databricks Runtime 8.2及以上版本中可用。

克隆一旦操作完成,報告以下指標作為單行數據幀:

  • source_table_size:正在克隆的源表的大小(以字節為單位)。

  • source_num_of_files:源表中的文件數。

  • num_removed_files:如果表正在被替換,則表示從當前表中刪除的文件數量。

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

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

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

克隆指標示例

權限

必須為Databricks表訪問控製和雲提供程序配置權限。

表訪問控製

對於深度克隆和淺克隆,都需要以下權限:

  • 選擇源表的權限。

  • 如果你正在使用克隆要創建一個新表,創建要在其中創建表的數據庫的權限。

  • 如果你正在使用克隆要替換一張表,你必須有修改桌上的權限。

雲提供商權限

如果創建了深度克隆,則讀取深度克隆的任何用戶都必須具有對克隆目錄的讀訪問權。要對克隆進行更改,用戶必須對克隆的目錄具有寫訪問權。

如果您已經創建了淺克隆,那麼讀取淺克隆的任何用戶都需要有權限讀取原始表中的文件,因為數據文件保留在具有淺克隆的源表以及克隆的目錄中。要對克隆進行更改,用戶需要對克隆的目錄進行寫訪問。

克隆用例

數據歸檔

數據可能需要保存的時間比時間旅行或災難恢複所允許的時間長。在這些情況下,可以創建深度克隆來保存表在某個時間點的狀態以便存檔。增量歸檔還可以保持源表的持續更新狀態,以進行災難恢複。

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

機器學習流程再現

在進行機器學習時,您可能想要對訓練ML模型的表的某個版本進行歸檔。未來的模型可以使用這個存檔數據集進行測試。

——在Delta表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

表屬性覆蓋

請注意

在Databricks Runtime 7.5及以上版本中可用。

表屬性覆蓋在以下情況下特別有用:

  • 在與不同業務單元共享數據時,使用所有者或用戶信息注釋表。

  • 需要歸檔Delta表和時間旅行。可以為歸檔表單獨指定日誌保留周期。例如:

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

在Spark會話中查找上一次提交的版本

請注意

在Databricks Runtime 7.1及以上版本中可用。

對象寫入的最後一次提交的版本號SparkSession跨所有線程和所有表,查詢SQL配置spark.databricks.delta.lastCommitVersionInSession

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

對象沒有提交SparkSession,查詢該鍵將返回空值。

請注意

如果你擁有同樣的SparkSession跨多線程,它類似於跨多線程共享一個變量;當配置值同時更新時,您可能會遇到競態條件。