流计算 Oceanus Paimon 连接器

Paimon 连接器可以作为 Sink,把上游的变更事件写入 Apache Paimon 湖存储,提供自动建表、表结构变更同步与数据实时同步能力。

相关产品
流计算 Oceanus 产品页,含版本规格、价格与购买入口。

一、前置准备

·已部署可用的 Paimon catalog,支持 filesystem 与 hive 两种 metastore。

·使用 filesystem metastore 时,作业运行环境需可访问 warehouse 目录,并具备读写权限。

·使用 hive metastore 时,需提供 Hive metastore 服务地址,并保证网络可访问。

二、版本说明

Flink 版本 说明
1.20 基于 Flink-cdc 社区 release-3.6 开发,JDK 版本为 11,支持 Paimon 版本为 0.6、0.7、0.8、0.9、1.0、1.1、1.2、1.3

三、使用范围

可作为 Sink(type: paimon)使用。

四、快速示例

从 MySQL 同步到 Paimon:

source: type: mysql name: MySQL Source hostname: 127.0.0.1 port: 3306 username: admin password: pass tables: adb.\\.* server-id: 5401-5404sink: type: paimon name: Paimon Sink catalog.properties.metastore: filesystem catalog.properties.warehouse: /path/warehousepipeline: name: MySQL to Paimon Pipeline parallelism: 2

使用 Hive metastore 并指定分桶:

sink: type: paimon name: Paimon Sink catalog.properties.metastore: hive catalog.properties.uri: thrift://127.0.0.1:9083 catalog.properties.warehouse: hdfs:///path/warehouse table.properties.bucket: 4

五、Sink 配置项

参数 是否必填 默认值 类型 说明
catalog.properties.metastore required (none) String Paimon catalog 的类型,可取 filesystem 或 hive。
catalog.properties.warehouse optional (none) String Paimon 仓库的根目录,无默认值。filesystem 模式下需要配置, 缺少时无法定位存储位置。例如 /path/warehouse 或 hdfs:///path/warehouse。
catalog.properties.uri optional (none) String Hive metastore 的服务地址,metastore 为 hive 时需要配置。例如 thrift://127.0.0.1:9083。
commit.user-prefix optional admin String 提交数据文件时使用的用户名,用于区分不同作业的写入。也可写作 commit.user。
partition.key optional (空) String 为目标表指定分区字段,详见「分区表」章节。
catalog.properties.* optional (none) String 透传给 Paimon catalog 的参数,属性名去掉该前缀后传给 catalog,可参考 Paimon catalog options。
table.properties.* optional (none) String 建表时写入 Paimon 表属性的参数,属性名去掉该前缀后作为表属性,可参考 Paimon table options。例如 table.properties.bucket: 4、table.properties.file.format: parquet。

Sink 侧的时区取自 pipeline 配置 local-time-zone,未配置时使用作业运行环境的系统时区。

六、分区表

通过 partition.key 可以为目标表指定分区字段。多条配置之间用英文分号(;)分隔,

表名与分区字段之间用英文冒号(:)分隔,同一张表的多个分区字段之间用英文逗号(,)分隔。

sink: type: paimon partition.key: testdb.table1:id1,id2;testdb.table2:name

配置时需要注意:

·分区字段会被自动并入主键。即使源表未把这些字段声明为主键,建出的 Paimon 表也会包含它们作为主键的一部分,且这些列会被设为 NOT NULL。源表中该字段存在空值时,请谨慎选择为分区字段。

·表名需要与上游表的标识一致,格式为 namespace.tableName。

·配置了 partition.key 时,优先使用这里的分区字段;未配置时使用上游表结构自带的分区字段。

七、表结构变更同步

Paimon Sink 支持下列表结构变更:

变更类型 说明
CREATE TABLE 自动建库建表。
ADD COLUMN 新增列,支持 FIRST、AFTER、BEFORE、LAST 四种位置。待新增的列已存在时跳过该操作,不导致作业失败。
DROP COLUMN 删除列。待删除的列不存在时跳过该操作,不导致作业失败。
RENAME COLUMN 重命名列。
ALTER COLUMN TYPE 修改列类型,同时更新列注释。
TRUNCATE TABLE 清空表数据。
DROP TABLE 删除表。
ALTER TABLE COMMENT 修改表注释。

需要注意:

·上游需要开启表结构变更事件的发送,下游才能感知并同步。以 MySQL 为例,需要开启 Source 侧的 schema-change.enabled。

·新增或修改列时,若列的默认值为 0000-00-00 00:00:00,时间戳类型的列会被改写为 1970-01-01 00:00:00,避免写入非法时间值。

八、自动建表

上游表不存在时,连接器会自动创建对应的 Paimon 表,规则如下:

·数据库不存在时自动创建。

·列的类型按下表「数据类型映射」转换,并保留列注释。

·主键取自上游表的主键;若配置了 partition.key,分区字段会追加到主键中。

·表注释取自上游表的注释。

·table.properties.* 指定的参数会写入表属性,对所有新建表生效。

·上游表没有主键时,创建的是无主键表。无主键表按追加方式写入,只有包含主键的表才能正确处理上游的 UPDATE 与 DELETE 事件,因此建议同步有主键的源表。

九、数据类型映射

CDC type Paimon type NOTE
TINYINT TINYINT 
SMALLINT SMALLINT 
INT INT 
BIGINT BIGINT 
FLOAT FLOAT 
DOUBLE DOUBLE 
DECIMAL(p, s) DECIMAL(p, s) 
BOOLEAN BOOLEAN 
BINARY(n) BINARY(n) 
VARBINARY(n) VARBINARY(n) 
BYTES BYTES 
CHAR(n) CHAR(n) 
VARCHAR(n) VARCHAR(n) 
STRING STRING 
DATE DATE 
TIME(p) TIME(p) 未显式指定精度时为 0。
TIMESTAMP(p) TIMESTAMP(p) 未显式指定精度时为 6。
TIMESTAMP_LTZ(p) TIMESTAMP WITH LOCAL TIME ZONE(p) 未显式指定精度时为 6。
VARIANT VARIANT 
赞 (0)
上一篇 4天前
下一篇 4天前