通過AUTO OPTIMIZE語句,將啟動一個流式最佳化任務,自動地對外部資料湖的表進行最佳化。本文為您介紹AUTO OPTIMIZE語句的背景資訊、前提條件、使用限制、注意事項、基本文法和參數配置。
背景資訊
- 功能詳情
目前僅支援將Iceberg表的若干小檔案重寫為大檔案,將小檔案重寫成大檔案有利於減輕中繼資料的負載和提高查詢效率。啟動該最佳化任務後,該任務將定時檢查指定的Iceberg表。如果表分區下存在多個小檔案,則會將這些小檔案重寫成為大檔案。當您的Iceberg表的讀效能瓶頸是因為存在大量小檔案時,建議啟動該最佳化任務以提高Iceberg的讀效能。
- 功能特性
功能 詳情 最佳化單個表 對指定的表進行最佳化。 最佳化單個資料庫 對指定的資料庫下的所有表進行最佳化。 - 最佳化流程當執行AUTO OPTIMIZE語句時,阿里雲Flink將會按照以下流程執行:
- 檢查要最佳化的表或者資料庫是否存在,如果不存在則會報錯。
- 持續監控對應的表,如果表滿足對應的最佳化條件,則會對錶進行最佳化。
前提條件
執行AUTO OPTIMIZE語句來最佳化表或者資料庫前,需要保證在Flink全託管開發控制台上已經註冊了對應的表或者資料庫。註冊方式詳情請參見資料湖Iceberg結果表。
使用限制
- 僅Flink計算引擎vvr-4.0.12-flink-1.13及以上版本支援AUTO OPTIMIZE語句。
- 目前僅支援將Iceberg表的若干小檔案重寫為大檔案。
- 僅支援最佳化包含了Iceberg表的資料庫。如果資料庫中除了Iceberg表,還包含了其他類型的表,則不支援最佳化該資料庫。說明 您可以將這些需要最佳化的Iceberg表都註冊到一個新的資料庫中,然後最佳化該新的資料庫。
注意事項
啟動AUTO OPTIMIZE最佳化任務後,將會佔用一定的網路頻寬和Flink全託管的CU資源,但不會刪除被重寫的小檔案,需要配合Iceberg的SnapShot到期機制來刪除這些被重寫的小檔案。
基本文法
- 最佳化單個表
AUTO OPTIMIZE TABLE <target_table> <target_table>: [catalog_name.][db_name.]table_name
- 最佳化單個資料庫
AUTO OPTIMIZE DATABASE <target_database> <target_database>: [catalog_name.]db_name
參數配置
- 配置方式您可以使用如下命令來設定相關參數:
ALTER TABLE <target_table> SET ('auto-optimize.rewrite.enable' = 'false'); <target_table>: [catalog_name.][db_name.]table_name
說明 對於基於記憶體的Catalog下的Iceberg表 ,不支援直接在Flink開發控制台通過ALTER命令來修改表參數。但其他類型的Catalog下的表都可以修改表參數。 - 參數說明
類別 參數 說明 單位和預設值 表監控相關參數 auto-optimize.table-monitor.interval 每隔多長時間對錶進行一次監控來判斷是不是應該對錶進行最佳化。 您可以根據您的期望,設定該參數值的大小。建議如下:- 如果您期望儘早對錶進行最佳化,可以將該值設定得小一點。
- 如果您期望減少表最佳化的頻率,可以將該值設定得大一點。
- 單位是毫秒。
- 預設值是600000,即10分鐘。
表最佳化相關參數 auto-optimize.rewrite.enable 是否開啟檔案重寫的功能。參數取值如下: - true(預設值):開啟檔案重寫的功能。
- false:不開啟檔案重寫的功能。
如果您需要最佳化單個資料庫,但不希望最佳化資料庫中的某些表,可以將這些表的該參數設定為false。
不涉及 auto-optimize.rewrite.target-file-size-bytes 將檔案重寫至多大size的檔案。 - 單位是byte。
- 預設值為536870912,即512 MB。