自動優化在磚

自動優化是一個可選的特性,自動緊湊的小文件在個人寫一個三角洲表。自動優化增加延遲開銷寫操作,但加速讀取操作。在下列情況下自動優化尤其有用:

  • 流用例延遲在分鍾的順序是可以接受的

  • 合並是首選的方法編寫成三角洲湖嗎

  • 創建作為選擇插入常用的操作

自動優化是如何工作的

自動優化包括兩個互補的特點:優化和自動壓實寫道。

如何優化寫工作

磚動態優化的Apache火花分區大小根據實際數據,並試圖寫出128 MB的文件為每個表分區。這是一個近似的大小,取決於數據集特征。

優化寫道

汽車壓實是如何工作的

後一個人寫,磚檢查文件是否可以進一步被壓縮,運行一個優化工作(128 MB的文件大小而不是1 GB的文件大小使用的標準優化)進一步壓縮文件的分區最小文件的數量。

啟用自動優化

優化寫在磚是默認啟用以下業務運行時9.1 LTS及以上:

  • 合並

  • 更新與子查詢

  • 刪除與子查詢

其他操作,或磚LTS 7.3運行時,您可以顯式地啟用優化寫和汽車壓實使用下列方法之一:

  • 新表:設置表的屬性delta.autoOptimize.optimizeWrite=真正的delta.autoOptimize.autoCompact=真正的創建命令。

    創建學生(idINT,的名字字符串,年齡INT)TBLPROPERTIES(δautoOptimizeoptimizeWrite=真正的,δautoOptimizeautoCompact=真正的)
  • 現有表:設置表的屬性delta.autoOptimize.optimizeWrite=真正的delta.autoOptimize.autoCompact=真正的改變命令。

    改變(table_name|δ' <- - - - - -路徑> ']TBLPROPERTIES(δautoOptimizeoptimizeWrite=真正的,δautoOptimizeautoCompact=真正的)
  • 所有新表:

    火花δ屬性違約autoOptimizeoptimizeWrite=真正的;火花δ屬性違約autoOptimizeautoCompact=真正的;

在磚運行時的10.1及以上,表屬性delta.autoOptimize.autoCompact還接受的價值觀汽車遺產除了真正的。當設置為汽車(推薦),磚曲調的目標文件大小要適當的用例。當設置為遺產真正的、自動壓實使用128 MB作為目標文件大小。

此外,您可以啟用和禁用這兩個特性引發會話配置:

  • spark.databricks.delta.optimizeWrite.enabled

  • spark.databricks.delta.autoCompact.enabled

會話配置優先於表屬性允許您更好地控製在選擇或退出這些特性。

當選擇退出

本節提供指導時選擇退出自動優化功能。

當選擇在優化寫道

優化寫道旨在最大化吞吐量的數據寫入到存儲服務。這可以通過減少寫入文件的數量,在不犧牲太多的並行性。

優化中需要根據數據的洗牌的分區結構目標表。這自然洗牌帶來額外成本。然而,在寫吞吐量增長可能償還洗牌的成本。如果不是,吞吐量增長時查詢數據仍然應該使這個特性值得的。

優化的關鍵部分是一種自適應調整寫道。如果你有一個流攝取用例和輸入數據率隨時間的變化,自適應洗牌將相應地調整自己在micro-batches傳入的數據速率。如果你有代碼片段合並(n)重新分區(n)之前你寫你的流,您可以刪除這些行。

當選擇在

  • 流媒體使用情況分鍾的延遲是可以接受的

  • 當使用SQL命令合並,更新,刪除,插入,創建作為選擇

什麼時候退出

  • 當書麵數據字節的順序和存儲優化實例不可用。

  • 當使用現貨實例和現貨價格的不穩定,導致很大一部分節點丟失。

當選擇自動壓實

汽車壓實後發生寫入表已成功同步並運行在集群上執行寫入。這意味著如果你有代碼模式,你寫信給三角洲湖,然後立即打電話優化,你可以刪除優化如果你讓汽車壓實。

汽車壓實使用不同的啟發式優化。自同步運行後寫,我們已經調整了汽車壓實運行具有以下屬性:

  • 磚不支持z值與汽車壓實z值是更昂貴的比壓實。

  • 汽車壓實生成更小的文件(128 MB)優化(1 GB)。

  • 汽車壓實貪婪地選擇一組有限的分區,最好利用壓實。選擇分區的數量將取決於集群上推出的大小。如果您的集群有更多cpu,分區可以優化。

  • 控製輸出文件的大小,設置火花配置spark.databricks.delta.autoCompact.maxFileSize。默認值是134217728,大小設置為128 MB。指定值104857600將文件大小設置為100 mb。

當選擇在

  • 流媒體使用情況分鍾的延遲是可以接受的。

  • 當你沒有規律優化調用在你的桌子上。

什麼時候退出

  • DBR 10.3及以下:當其他作家執行操作刪除,合並,更新,或優化同時,因為汽車壓實可以導致事務衝突這些工作。

    如果汽車壓實失敗由於事務衝突,磚失敗或重試壓實。相應的編寫查詢(這引發了自動壓實)會成功即使汽車壓實不成功。

    在DBR 10.4及以上,這不是一個問題:汽車壓實不會引起事務等其他並發操作的衝突刪除,合並,或更新。其他並發事務有更高的優先級和不會失敗由於汽車壓實。

示例工作流:流攝取與並發刪除或更新

此工作流假設您有一個集群運行一個24/7攝取數據流工作,和一個集群上運行一個小時,每天,或臨時的基礎上刪除或更新一批記錄。這個用例,磚建議你:

  • 在表級別上啟用優化寫道

    改變<table_name|δtable_path' >TBLPROPERTIES(δautoOptimizeoptimizeWrite=真正的)

    這將確保所寫的文件流的數量和最佳大小的刪除和更新工作。

  • 讓汽車壓實在會話級別使用以下設置執行刪除或更新的工作。

    火花sql(“設置spark.databricks.delta.autoCompact.enabled = true”)

    這允許跨表壓縮文件。因為它發生刪除或更新後,你減輕事務衝突的風險。

常見問題(FAQ)

自動優化z順序文件嗎?

汽車隻在小文件優化執行壓實。它不z值文件。

自動優化腐敗的z值的文件嗎?

自動優化z值忽略了文件。它隻有契約新文件。

如果我有汽車優化使我流的表上,和一個並發事務衝突與優化,將我的工作失敗?

不。事務衝突,導致汽車優化失敗忽視,和流將繼續正常運行。

我需要安排嗎優化如果啟用了自動優化工作在我的桌子上嗎?

對於大小大於10 TB的表,我們建議您保留優化運行在一個時間表進一步鞏固文件,減少你的三角洲的元數據表。由於汽車優化不支持z值,您仍然應該安排優化ZORDER通過定期的工作運行。

我有很多小文件。為什麼汽車優化不壓實他們嗎?

默認情況下,自動優化不開始壓實,直到找到50多個小文件的目錄。通過設置你可以改變這一行為spark.databricks.delta.autoCompact.minNumFiles。有許多小文件並不總是一個問題,因為它可以跳過帶來更好的數據,和它可以幫助減少在合並和刪除重寫。然而,有太多的小文件可能是一個信號,表明你的數據分區。