(1)在MySQL中准备数据库、表,表数据
(2)在FlinkSQL中创建MySQL oe_course_tpye的映射表mysql_bxg_oe_course_type(源表)
(3)在FlinkSQL中创建Hudi的映射表hudi_bxg_oe_course_type(目标表) (hudi不需要创建物理表,但是Doris需要创建物理表)
(4)使用FlinkSQL拉起任务 insert into hudi_bxg_oe_course_type select col1,col2,col3,col4... from mysql_bxg_oe_course_type
(5)验证结果 首先验证hudi的数据(HDFS之上是否有数据) 验证Hive中是否有数据(登录hive客户端去查看)
--设置checkpoint时间
set execution.checkpointing.interval=30sec;
--创建源表的映射表
CREATE TABLE if not exists mysql_bxg_oe_course_type (
`id` INT,
`type_code` STRING,
`desc` STRING,
`creator` STRING,
`operator` STRING,
`create_time` TIMESTAMP(3),
`update_time` TIMESTAMP(3),
`delete_flag` BOOLEAN,
PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
'connector'= 'mysql-cdc', -- 指定connector,这里填 mysql-cdc
'hostname'= '192.168.88.161', -- MySql server 的主机名或者 IP 地址
'port'= '3306', -- MySQL 服务的端口号
'username'= 'root', -- 连接 MySQL 数据库的用户名
'password'='密码', -- 连接 MySQL 数据库的密码
'server-time-zone'= 'Asia/Shanghai', -- 时区
'debezium.snapshot.mode'='initial', -- 启动模式,默认为initial
'database-name'= 'bxg', -- 需要监控的数据库名
'table-name'= 'oe_course_type' -- 需要监控的表名
);
--创建目标表的映射表
CREATE TABLE if not exists hudi_bxg_oe_course_type (
`id` INT,
`type_code` STRING,
`desc` STRING,
`creator` STRING,
`operator` STRING,
`create_time` TIMESTAMP(3),
`update_time` TIMESTAMP(3),
`delete_flag` BOOLEAN,
`partition` STRING,
PRIMARY KEY (`id`) NOT ENFORCED
) PARTITIONED BY (`partition`)
with(
'connector'='hudi',
'path'= 'hdfs://192.168.88.161:8020/hudi/bxg_oe_course_type', -- 数据存储目录
'hoodie.datasource.write.recordkey.field'= 'id', -- 主键
'write.precombine.field'= 'update_time', -- 自动precombine的字段
'write.tasks'= '1',
'compaction.tasks'= '1',
'write.rate.limit'= '2000', -- 限速
'table.type'= 'MERGE_ON_READ', -- 默认COPY_ON_WRITE,可选MERGE_ON_READ
'compaction.async.enabled'= 'true', -- 是否开启异步压缩
'compaction.trigger.strategy'= 'num_commits', -- 按次数压缩
'compaction.delta_commits'= '1', -- 默认为5
'changelog.enabled'= 'true', -- 开启changelog变更
'read.tasks' = '1',
'read.streaming.enabled'= 'true', -- 开启流读
'read.streaming.check-interval'= '3', -- 检查间隔,默认60s
'hive_sync.enable'= 'true', -- 开启自动同步hive
'hive_sync.mode'= 'hms', -- 自动同步hive模式,默认jdbc模式
'hive_sync.metastore.uris'= 'thrift://192.168.88.161:9083', -- hive metastore地址
'hive_sync.table'= 'bxg_oe_course_type', -- hive 新建表名
'hive_sync.db'= 'bxg', -- hive 新建数据库名
'hive_sync.username'= '', -- HMS 用户名
'hive_sync.password'= '', -- HMS 密码
'hive_sync.support_timestamp'= 'true'-- 兼容hive timestamp类型
);
解释:
--写数据的配置
'write.precombine.field'= 'update_time', -- 自动precombine的字段
'write.tasks'= '1',
'compaction.tasks'= '1',
'write.rate.limit'= '2000', -- 限速
'table.type'= 'MERGE_ON_READ', -- 默认COPY_ON_WRITE,可选MERGE_ON_READ
'compaction.async.enabled'= 'true', -- 是否开启异步压缩
'compaction.trigger.strategy'= 'num_commits', -- 按次数压缩
'compaction.delta_commits'= '1', -- 默认为5
'changelog.enabled'= 'true', -- 开启changelog变更
--读数据的配置
'read.tasks' = '1',
'read.streaming.enabled'= 'true', -- 开启流读
'read.streaming.check-interval'= '3', -- 检查间隔,默认60s
--开启湖仓建仓的功能
'hive_sync.enable'= 'true', -- 开启自动同步hive
'hive_sync.mode'= 'hms', -- 自动同步hive模式,默认jdbc模式
'hive_sync.metastore.uris'= 'thrift://192.168.88.161:9083', -- hive metastore地址
'hive_sync.table'= 'bxg_oe_course_type', -- hive 新建表名
'hive_sync.db'= 'bxg', -- hive 新建数据库名
'hive_sync.username'= '', -- HMS 用户名
'hive_sync.password'= '', -- HMS 密码
'hive_sync.support_timestamp'= 'true'-- 兼容hive timestamp类型
INSERT INTO hudi_bxg_oe_course_type SELECT `id`,`type_code` ,`desc`,`creator` ,`operator`,`create_time` ,`update_time` ,`delete_flag`,DATE_FORMAT(`create_time`, 'yyyyMMdd') FROM mysql_bxg_oe_course_type;