Bootstrap

[实时计算flink]INSERT INTO语句

本文为您介绍如何使用INSERT INTO语句在一个作业中写入一个Sink或多个Sink。

背景信息

INSERT语句支持使用Hints使用OPTIONS选项给结果表传递参数,详情请参见SQL Hints

写入一个Sink示例

--源表
CREATE TEMPORARY TABLE datagen_source (
  name VARCHAR,
  score BIGINT
) WITH (
  'connector' = 'datagen' 
);

--结果表
CREATE TEMPORARY TABLE blackhole_sink(
  name VARCHAR,
  score BIGINT
) WITH (
  'connector' = 'blackhole' 
);

--DML
INSERT INTO blackhole_sink SELECT UPPER(name), score FROM datagen_source;

写入多个Sink示例

重要

写入多个Sink语句时,需要以BEGIN STATEMENT SET;开头,以END;结尾。

本文以写入两个Sink为例。

--源表
CREATE TEMPORARY TABLE datagen_source (
  name VARCHAR,
  score BIGINT
) WITH (
  'connector' = 'datagen'
);

--结果表A
CREATE TEMPORARY TABLE blackhole_sinkA(
  name VARCHAR,
  score BIGINT
) WITH (
  'connector' = 'blackhole' 
);

--结果表B
CREATE TEMPORARY TABLE blackhole_sinkB(
  name VARCHAR,
  score BIGINT
) WITH (
  'connector' = 'blackhole' 
);

--DML
BEGIN STATEMENT SET;      --写入多个Sink时,必填。
INSERT INTO blackhole_sinkA 
  SELECT UPPER(name), sum(score) 
  FROM datagen_source 
  GROUP BY UPPER(name);
INSERT INTO blackhole_sinkB 
  SELECT LOWER(name), max(score) 
  FROM datagen_source 
  GROUP BY LOWER(name);
END;      --写入多个Sink时,必填。

AUTO OPTIMIZE语句

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

类别参数说明单位和默认值 

;