模式演化在三角洲湖的合並操作和運營指標
得到的早期預覽O ' reilly的新電子書一步一步的指導你需要開始使用三角洲湖。
試試這個筆記本複製下麵的步驟
我們最近宣布的釋放三角洲湖0.6.0在合並引入了模式演化和性能改進和操作指標表的曆史。這個版本的主要特點是:
- 支持模式演化合並操作(# 170)——你現在可以自動進化模式的表合並操作。這是有用的在你想插入的場景變化數據表和數據的模式會隨著時間而改變。而不是檢測和應用模式變化在插入之前,合並可以同時發展模式和插入更改。看到文檔獲取詳細信息。
- 改善合並性能自動重新分區(# 349)- - -當合並到分區表時,您可以選擇自動重新分配數據的分區列前寫作。在分區表的合並操作的情況下速度慢的原因是它生成許多小文件(# 345),使自動重新分區(spark.delta.merge.repartitionBeforeWrite)可以提高性能。看到文檔獲取詳細信息。
- 改進的性能在沒有插入條款(# 342)- - -現在你可以獲得更好的性能在合並操作如果它沒有任何插入條款。
- 在描述曆史操作指標(# 312)- - -現在你可以看到操作指標(例如,文件數量和行改變)寫道,更新和刪除操作在三角洲表的表的曆史。看到文檔獲取詳細信息。
- 從任何文件係統支持閱讀三角洲表(# 347)- - -現在你可以讀三角洲Hadoop文件係統表在任何存儲係統實現。然而,寫作三角洲表仍然需要配置一個LogStore實現存儲係統提供了必要的保證。看到文檔獲取詳細信息。
模式演化的合並操作
正如早些時候發布的三角洲湖,湖三角洲包括的能力執行合並操作簡化你的插入/更新/刪除操作在一個單一的原子操作以及包括的能力實施和發展模式(也可以發現更多細節技術討論)。釋放的三角洲0.6.0湖,您現在可以發展模式在合並操作。
讓我們展示這個及時通過使用一個例子;你可以找到原來的代碼示例這個筆記本。我們將從一個小的子集2019年的小說《冠狀病毒COVID-19 (2019 - ncov)由約翰霍普金斯CSSE數據存儲庫我們有可用的數據集/ databricks-datasets。這是一個數據集常用的研究人員和分析師獲得一些啟示的病例數COVID-19整個世界。與數據的一個問題是,模式會隨著時間而改變。
例如,文件代表COVID-19病例從3月1日- 3月21日(2020年4月30日)有以下模式:
#進口old_dataold_data = (spark.read.option (“inferSchema”,真正的).option (“頭”,真正的)…. csv (/ databricks-datasets / COVID /…/03- - - - - -21- - - - - -2020年. csv))old_data.printSchema ()根| - - -省/州:字符串(可空=真正的)|——國家/地區:字符串(可空=真正的)|——最後更新:時間戳(可空=真正的)|——確認:整數(可空=真正的)|——死亡:整數(可空=真正的)|——恢複:整數(可空=真正的)|——緯度:雙(可空=真正的)|——經度:雙(可空=真正的)
但從3月22日開始的文件(截至4月30日)附加列包括FIPS Admin2,活躍,Combined_Key。
new_data = (spark.read.option (“inferSchema”,真正的).option (“頭”,真正的)…. csv (/ databricks-datasets / COVID /…/04- - - - - -21- - - - - -2020年. csv))new_data.printSchema ()
根|——FIPS:整數(可空=真正的)|——Admin2:字符串(可空=真正的)|——Province_State:字符串(可空=真正的)|——Country_Region:字符串(可空=真正的)|——Last_Update:字符串(可空=真正的)|——緯度:雙(可空=真正的)|——Long_:雙(可空=真正的)|——確認:整數(可空=真正的)|——死亡:整數(可空=真正的)|——恢複:整數(可空=真正的)|——活躍:整數(可空=真正的)|——Combined_Key:字符串(可空=真正的)
在我們的示例代碼中,我們重命名的一些列(例如Long_ - >經度,省/州- > Province_State,等等),它們在語義上是相同的。而不是進化表模式,我們隻是改名為列。
如果模式的關鍵問題是合並在一起,我們可以使用三角洲湖的模式演化特性使用“mergeSchema”選項DataFrame.write ()
,如以下所示的聲明。
new_data.write.option (“mergeSchema”,“真正的”).mode (“添加”).save(路徑)
但是如果您需要更新現有的價值和合並模式在同一時間嗎?與三角洲湖0.6.0,這可以與實現合並操作的模式演化。可視化,我們首先回顧的old_data一行。
old_data。選擇("process_date", "Province_State", "Country_Region", "Last_Update", "Confirmed").顯示()+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|process_date|Province_State|Country_Region|Last_Update|確認|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|2020年-03年-21年|華盛頓|我們|2020年-03年-21年22:43:04|1793年|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
接下來讓我們模擬一個更新條目之後new_data的模式
#模擬一個更新的條目項= [(53,”,“華盛頓”,“我們”,2020 - 04 - 27 t19:00:00,47.4009,121.4905,1793年,94年,0,”,”,“2020-03-21”,2)]關口= [“FIPS”,“Admin2”,“Province_State”,“Country_Region”,“Last_Update”,“緯度”,“經”,“確認”,“死亡”,“恢複”,“活躍”,“Combined_Key”,“process_date”,“水平”]simulated_update =火花。createDataFrame(項目、峽路)
和工會simulated_update new_data共有40行。
new_data。選擇("process_date", "FIPS", "Province_State", "Country_Region", "Last_Update", "Confirmed").sort(col("FIPS")).顯示(5)+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|process_date|FIPS|Province_State|Country_Region|Last_Update|確認|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|2020年-03年-21年|53|華盛頓|我們|2020年-04年-27年T19:00:00|1793年||2020年-04年-11年|53001年|華盛頓|我們|2020年-04年-11年22:45:33|30.||2020年-04年-11年|53003年|華盛頓|我們|2020年-04年-11年22:45:33|4||2020年-04年-11年|53005年|華盛頓|我們|2020年-04年-11年22:45:33|244年||2020年-04年-11年|53007年|華盛頓|我們|2020年-04年-11年22:45:33|53|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
我們設置以下參數來配置您的環境自動模式演化:
#啟用自動模式演化spark.sql (“設置spark.databricks.delta.schema.autoMerge.enabled = true”)
現在我們可以運行一個單一的原子操作來更新值(從3/21/2020)以及新模式合並在一起使用以下語句。
從三角洲。表導入*deltaTable=DeltaTable。DELTA_PATH forPath(火花)#模式演化與一個合並操作deltaTable.alias (“t”)。合並(new_data.alias (“s”),”年代。process_date = t。process_dateAND s.province_state = t.province_state AND s.country_region = t.country_region AND s.level = t.level").whenMatchedUpdateAll ().whenNotMatchedInsertAll ()。執行()
我們來回顧一下三角洲湖表用下麵的語句:
#加載數據spark.read.format(“δ”).load (DELTA_PATH)。選擇(“process_date”、“FIPS”、“Province_State”、“Country_Region”,“Last_Update”,“確認”、“Admin2”).sort(坳(FIPS))。顯示()+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|process_date|FIPS|Province_State|Country_Region|Last_Update|確認|管理|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +|2020年-03年-21年|53|華盛頓|我們|2020年-04年-27年T19:00:00|1793年|||2020年-04年-11年|53001年|華盛頓|我們|2020年-04年-11年22:45:33|30.|亞當斯||2020年-04年-11年|53003年|華盛頓|我們|2020年-04年-11年22:45:33|4|Asotin||2020年-04年-11年|53005年|華盛頓|我們|2020年-04年-11年22:45:33|244年|本頓||2020年-04年-11年|53007年|華盛頓|我們|2020年-04年-11年22:45:33|53|Chelan|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
運營指標
可以進一步深入操作指標通過查看三角洲湖曆史表(operationMetrics列)火花UI中通過運行以下聲明:
deltaTable.history ()。顯示()
下麵是一個簡短的前麵的命令的輸出。
+- - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|版本|用戶標識|操作|operationMetrics|+- - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|1|100802年|合並|[numTargetRowsCop……||0|100802年|寫|[numFiles- - - - - ->1n…|+- - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
你會發現兩個版本的表,一個用於舊模式和新模式的另一個版本。當回顧下麵的操作指標,它指出,有39行插入和1行更新。
{“numTargetRowsCopied”:“0”,“numTargetRowsDeleted”:“0”,{“numTargetRowsCopied”:“0”,“numTargetRowsDeleted”:“0”,“numTargetFilesAdded”:“3”,“numTargetRowsInserted”:“39”,“numTargetRowsUpdated”:“1”,“numOutputRows”:“40”,“numSourceRows”:“40”,“numTargetFilesRemoved”:“1”}“numTargetFilesAdded”:“3”,“numTargetRowsInserted”:“39”,“numTargetRowsUpdated”:“1”,“numOutputRows”:“40”,“numSourceRows”:“40”,“numTargetFilesRemoved”:“1”}
你可以了解更多關於這些操作指標背後的細節通過將SQL選項卡中的火花UI。
GIF動畫調用出火花UI的主要組件為您的回顧。
- 39初始行從一個文件中(與新模式4/11/2020)創建初始new_data DataFrame
- 1模擬更新行生成,與new_data DataFrame
- 1行從一個文件中(與舊模式3/21/2020)創建了old_data DataFrame。
- SortMergeJoin用來連接兩個DataFrames一起堅持我們的三角洲湖表。
將深入研究如何解釋這些操作指標,檢查深入三角洲湖第3部分:如何刪除、更新和合並工作技術說話。
開始使用δ0.6.0湖
嚐試三角洲湖與前麵的代碼片段在Apache火花2.4.5(或更大)的實例(在磚上,試試這個DBR 6.6 +)。湖泊三角洲湖使您的數據更可靠(不管你創建一個新的或現有的數據遷移湖)。要了解更多,請參考https://delta.io/,並加入三角洲湖社區通過鬆弛和穀歌集團。你可以跟蹤所有的即將推出,計劃特性GitHub的裏程碑。你也可以嚐試管理三角洲湖在磚免費帳戶。
學分
我們想要感謝下列貢獻者更新,doc變化,和貢獻在三角洲湖0.6.0:阿裏Afroozeh Anurag870,安德魯•福格蒂Burak•, Erik LaBianca Gengliang Wang IonutBoicuAms, Jakub Orłowski,何塞•托雷斯KevinKarlBob,邁克爾•Armbrust Pranav Anand,拉胡爾Govind,拉胡爾從詼諧,Shixiong朱、史蒂夫•Suh如來佛Das,蓋張湯姆·範Bussel韋斯利·霍夫曼,小李,切特,尤金Koifman,範龍佩(Herman van Hovell, hongdd, lswyyy, lys0716,馬哈茂德•馬赫迪瑪麗安薛