通过AUTO OPTIMIZE语句,将启动一个流式优化任务,自动地对外部数据湖的表进行优化。本文为您介绍AUTO OPTIMIZE语句的背景信息、前提条件、使用限制、注意事项、基本语法和参数配置。

背景信息

  • 功能详情

    目前仅支持将Iceberg表的若干小文件重写为大文件,将小文件重写成大文件有利于减轻元数据的负载和提高查询效率。启动该优化任务后,该任务将定时检查指定的Iceberg表。如果表分区下存在多个小文件,则会将这些小文件重写成为大文件。当您的Iceberg表的读性能瓶颈是因为存在大量小文件时,建议启动该优化任务以提高Iceberg的读性能。

  • 功能特性
    功能 详情
    优化单个表 对指定的表进行优化。
    优化单个数据库 对指定的数据库下的所有表进行优化。
  • 优化流程
    当执行AUTO OPTIMIZE语句时,阿里云Flink将会按照以下流程执行:
    1. 检查要优化的表或者数据库是否存在,如果不存在则会报错。
    2. 持续监控对应的表,如果表满足对应的优化条件,则会对表进行优化。

前提条件

执行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。