本文为您介绍如何使用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将会按照以下流程执行:
- 检查要优化的表或者数据库是否存在,如果不存在则会报错。
- 持续监控对应的表,如果表满足对应的优化条件,则会对表进行优化。
前提条件
执行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。
类别参数说明单位和默认值