克隆一個表在磚上
您可以創建一個複製現有的三角洲湖表使用磚在一個特定的版本克隆
命令。克隆可以深或淺。
克隆是一個Databricks-exclusive特性啟用默認磚運行時。
磚還支持克隆的鑲木地板和冰山表。看到增量克隆拚花和冰山表三角洲湖。
克隆類型
一個深克隆是一個克隆,將源表的數據複製到克隆目標除了現有的元數據表。此外,流元數據也是克隆,這樣一個流寫入增量表可以停止在一個源表,繼續克隆的目標從那裏離開。
一個淺克隆是一個克隆,不將數據文件複製到克隆的目標。表元數據相當於源。創建這些克隆更便宜。
任何更改,深或淺克隆隻影響克隆本身,而不是源表。
克隆的元數據包括:模式、分區信息,不變量,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
使用克隆ML模式複製
做機器學習的時候,你可能想要歸檔的某些版本表你訓練一個毫升模型。未來的模型可以使用這個歸檔數據集進行了測試。
——訓練模型版本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)