跳轉到主要內容
工程的博客

讓你的數據Lakehouse運行,速度與三角洲湖1.1

分享這篇文章

三角洲湖1.1為合並操作提高了性能,添加了支持生成的列和改善嵌套的決議

來自開源社區的巨大貢獻,三角洲湖社區最近宣布的釋放三角洲湖1.1.0Apache火花™3.2。類似於Apache火花,三角洲湖社區發布了Maven的工件Scala 2.12和Scala 2.13和PyPI (delta_spark)

這個版本包括顯著提高合並操作和嵌套域分辨率,以及支持在合並操作生成的列,Python類型注解,任意表達式“replaceWhere”等等。超級重要,三角洲湖使Apache最新的創新火花。這意味著您可以利用增加的性能在三角洲湖使用中可用的特性火花釋放3.2.0

這篇文章將會在重大變化在新的1.1.0版本和顯著特征。檢查項目的Github庫獲取詳細信息。

要馬上開始三角洲湖呢?了解更多關於是什麼三角洲湖並使用這指南建立lakehouses三角洲湖。

關鍵特性的三角洲湖1.1.0

  • 在合並操作性能改進:在分區表,將自動合並操作重新分配輸出數據寫入文件之前。這樣可以確保更好的性能的開箱即用的合並操作,以及隨後的讀取操作。
  • 支持通過DataFrameReader /作家通過Hadoop配置選項:您現在可以將Hadoop文件係統配置(例如,訪問憑證)通過DataFrameReader /作家選項。早些時候,通過這樣配置的唯一方法是將引發會話配置,將它們設置為相同的值的讀和寫。現在你可以設置不同的值為每個讀和寫。看到文檔為更多的細節。
  • 支持任意表達式replaceWhere DataFrameWriter選擇:不是隻在分區列表達式,您現在可以使用任意的表達式在replaceWhere DataFrameWriter選項。你可以更換任意數據表中直接與DataFrame寫道。看到文檔為更多的細節。
  • 改善嵌套域分辨率和模式演化在合並操作數組的結構:應用目標表上的合並操作時擁有一個列類型為一個嵌套的結構體數組,源和目標數據之間的嵌套列現在解決的名字而不是在結構中的位置。這樣可以確保結構在數組以外的數組和結構一致的行為。當啟用自動模式演化的合並,在結構體數組嵌套列將遵循相同的進化規則(例如,列補充說如果沒有列中存在同名的表)列在結構體數組之外。看到文檔為更多的細節。
  • 支持生成的列合並操作:你現在可以申請合並操作表生成的列
  • 罕見的gc數據損壞問題的解決:實驗GCS支持在三角洲湖1.0發布一種罕見的錯誤,會導致三角洲表是由於部分寫事務日誌文件不可讀。這個問題現在已經固定的(1,2)。
  • 修複錯誤的返回對象的Python DeltaTable.convertToDelta ():這個現有的API現在返回正確的Python delta.tables類型的對象。DeltaTable而不是輸入錯誤,因此無法使用對象。
  • Python類型注解:我們添加了Python類型注解,提高自動完成性能在編輯器支持類型提示。可選地,您可以啟用靜態檢查通過mypy或內置的工具(例如Pycharm工具)。

其他值得注意的特性在三角洲湖1.1.0版本如下:

  1. 刪除與某些特殊字符支持讀表分區列名稱。看到遷移向導獲取詳細信息。
  2. 支持“三角洲。路徑”在DeltaTable.forName()與其他api的一致性。
  3. 改進DeltaTableBuilder API介紹了δ1.0.0:
    • 修複的漏洞,防止通過多個分區列在Python中DeltaTableBuilder.partitionBy。
    • 把錯誤如果不指定列的數據類型。
  4. 改進的支持對合並/更新/刪除臨時視圖。
  5. 支持設置用戶在提交信息元數據創建或替換表。
  6. 修複一個不正確的分析異常合並多個INSERT和UPDATE子句和自動啟用模式演化。
  7. 修複不正確的處理特殊字符(例如空格)的路徑的合並/更新/刪除操作。
  8. 修複受到影響的真空並行模式自適應查詢執行默認啟用在Apache 3.2火花。
  9. 修複最早的有效時間旅行的版本。
  10. 修複Hadoop配置不被用來寫檢查點。
  11. 多個修複(1,2,3三角洲的約束。

在下一節中,讓我們深入了解該版本最顯著的特征。

更好的性能開箱即用的合並操作

比較圖三角洲湖1.0.0合並操作國旗啟用之前和之後。

  • 上麵的圖表顯示了顯著減少執行時間從19.66分鍾(前)到7.6分鍾(後)功能標誌啟用。
  • 請注意下麵的DAG可視化的不同階段之前和之後的查詢。有一個額外的階段AQE ShuffleRead SortMergeJoin之後。
圖:DAG三角洲合並查詢repartitionBeforeWrite禁用。
禁用。
圖:δ合並查詢啟用了repartitionBeforeWrite DAG。
啟用。

讓我們看一看例子現在:
在這個示例中,使用的數據集customers1 customers2有2000beplay体育app下载地址00行和11列與客戶和銷售信息。展示之間的差異使國旗上運行合並操作最低限度時,我們限製了火花工作1 gb RAM和1 2019年Macbook Pro筆記本電腦上運行的核心。這些數字可以進一步減少通過調整所使用的RAM和核心。在合並表,customers_mergebeplay体育app下载地址 45000行是用來執行一個合並操作前表。完整腳本和結果的例子在這裏

確保功能被禁用,您可以運行下麵的命令:

sql(“spark.databricks.delta.merge.repartitionBeforeWrite.enabled=”)

代碼:

delta.tables進口*deltaTable = DeltaTable.forPath(火花,“/ temp /數據/beplay体育app下载地址 customers1”)mergeDF = spark.read。格式(“δ”).load (“/ temp /數據/beplay体育app下载地址 customers_merge”)deltaTable.alias (“beplay体育app下载地址customers1”).merge (mergeDF.alias (“c_merge”),“beplay体育app下载地址customers1。customer_sk = c_merge.customer_sk”).whenNotMatchedInsertAll () . execute ()

結果:
注:完整的操作了19.66分鍾而標誌的特點是禁用的。你可以參考這個完整的結果查詢的詳細信息。

對於分區表,可以產生大量小文件合並調整分區的數量。這是因為每一個洗牌的任務在多個分區,可以寫多個文件,可以成為一個性能瓶頸。使更快的合並操作在我們的分區表,讓我們使repartitionBeforeWrite使用下麵的代碼片段。

使國旗和再次運行merge。

sql(“spark.databricks.delta.merge.repartitionBeforeWrite.enabled=真正的”)

這將允許合並操作自動重新分配分區表的輸出數據寫入文件。在許多情況下,它有助於重新分區表的輸出數據的分區列在寫作之前。這樣可以確保更好的性能的開箱即用的合並操作,以及隨後的讀取操作。讓我們運行MERGE操作表customer_t0現在。

delta.tables進口*deltaTable = DeltaTable.forPath(火花,“/ temp /數據/beplay体育app下载地址 customers2”)mergeDF = spark.read。格式(“δ”).load (“/ temp /數據/beplay体育app下载地址 customers_merge”)deltaTable.alias (“beplay体育app下载地址customers2”).merge (mergeDF.alias (“c_merge”),“beplay体育app下载地址customers2。customer_sk = c_merge.customer_sk”).whenNotMatchedInsertAll () . execute ()

注意:使功能“repartitionBeforeWrite”後,合並查詢需要7.68分鍾。你可以參考這個完整的結果查詢的詳細信息。

提示:組織工作圍繞GDPR和CCPA用例可以高度讚賞這個特性,因為它提供了一個有效的方法快速點更新和刪除沒有重構你的整個數據湖。

支持任意表達式replaceWhere DataFrameWriter選項

自動替換表中的所有數據,您可以使用覆蓋模式:

插入覆蓋default.customer_t10選擇*customer_t1

與三角洲湖1.1.0以上,還可以有選擇地覆蓋隻匹配一個任意的數據使用dataframes表達式。下麵的命令自動替換記錄他的出生年份“1924”目標表,由c_birth_year分區,customer_t1中的數據:

輸入= spark.read.table (“delta. / usr /地方/δ/ customer_t1’”)輸入.write。格式(“δ”)\.mode (“覆蓋”)\.option (“overwriteSchema”,“真正的”)\.partitionBy (“c_birth_year”)\.option (“replaceWhere”,“c_birth_year > = ' 1924 '和c_birth_year

運行該查詢將導致一個成功的和一個輸出如下:
查詢樣例輸出由三角洲0.1.0湖。
然而,在過去的版本1.1.0之前的三角洲湖,相同的查詢將導致以下錯誤:

你可以嚐試禁用replaceWhere標誌。

Python類型注解

Python類型注解提高自動完成性能在編輯器,它支持類型提示。可選地,您可以啟用靜態檢查通過mypy或內置的工具(例如Pycharm工具)。這是一個視頻原作者的公關,Maciej Szymkiewicz描述變化的python 1.1三角洲湖內的行為。

希望你看到一些很酷的三角洲湖特性通過這個博客。興奮地找出你使用這些特性,如果你有任何反饋或你的工作的例子,請分享社區

總結

Lakehouse已成為新規範組織想要建立數據平台和架構。Beplay体育安卓版本和所有由於三角洲湖——允許超過5000個組織構建成功生產Lakehouse數據和人工智能應用程序的平台。Beplay体育安卓版本與指數數據增加,重要的是要處理大量的數據更快的和可靠的。與三角洲湖,開發者可以使他們lakehouses運行更快的改進版本1.1和保持創新的步伐。

對開源三角洲湖感興趣嗎?
參觀三角洲湖網絡中心要了解更多,你可以參加這個三角洲湖社區通過鬆弛穀歌集團。你可以跟蹤所有的即將推出,計劃特性GitHub的裏程碑並嚐試管理三角洲湖在磚免費帳戶


學分
我們想要感謝下列貢獻者更新,doc變化,和貢獻在三角洲湖1.1.0:阿布Somani,亞當Binford,亞曆克斯,亞曆山大•洛佩斯Allison波蒂斯所寫,Bogdan Raducanu,巴特Samwel Burak•,大衛·劉易斯Eunjin歌,ericfchang,朱峰,弗拉維奧克魯斯Florian Valeye,弗雷德·劉gurunath,家夥Khazma,拉斯科夫斯基Jacek,傑基,震動Parrett, JassAbidi,何塞•托雷斯Junlin曾慶紅,Junyong Lee KamCheung Ting,凱倫·馮Lars Kroll,李張,梨紋太陽,一貫Liu Maciej,馬克斯•Gekk孟,Prakhar Jain, Pranav Anand,拉胡爾從詼諧,瑞安·約翰遜,薩比爾Akhadov,斯科特•Sandre Shixiong朱、張停業,如來佛Das,特裏金,湯姆·林奇Vijayan Prabhakaran總裁岡Mussa Wenchen粉絲,耀華趙,Yijia崔,宇軒茶,嚐試霍,散熱,媒體,豫園萬麗唐,紮克時間。

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map