通过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。