克隆一個表在磚上

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

克隆是一個Databricks-exclusive特性啟用默認磚運行時。

磚還支持克隆的鑲木地板和冰山表。看到增量克隆拚花和冰山表三角洲湖

克隆類型

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

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

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

克隆的元數據包括:模式、分區信息,不變量,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

使用克隆ML模式複製

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

——訓練模型版本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)