克隆一個表在磚上
您可以創建一個複製現有的三角洲湖表使用磚在一個特定的版本克隆
命令。克隆可以深或淺。
磚還支持克隆的鑲木地板和冰山表。看到增量克隆拚花和冰山表三角洲湖。
有關使用克隆和統一目錄,看看統一目錄管理表淺克隆。
克隆類型
一個深克隆是一個克隆,將源表的數據複製到克隆目標除了現有的元數據表。此外,流元數據也是克隆,這樣一個流寫入增量表可以停止在一個源表,繼續克隆的目標從那裏離開。
一個淺克隆是一個克隆,不將數據文件複製到克隆的目標。表元數據相當於源。創建這些克隆更便宜。
克隆的元數據包括:模式、分區信息,不變量,nullability。深克隆,流和複製到元數據也是克隆。不是克隆表描述和元數據用戶定義元數據提交。
δ克隆操作的語義是什麼?
如果你有使用三角洲表注冊到蜂巢metastore或文件不是注冊表的集合,克隆有以下語義:
重要的
在磚運行時的13.1及以上,統一目錄管理表支持淺克隆。克隆語義統一編目表明顯的區別於三角洲湖克隆語義在其他環境中。看到統一目錄管理表淺克隆。
任何更改,深或淺克隆隻影響克隆本身,而不是源表。
淺克隆參考數據文件在源目錄中。如果你運行
真空
源表,客戶再也不能讀取數據文件和引用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)