Flink将Hive数据导入StarRocks中任务重跑如何避免数据重复?

Hive表中其实没有主键的概念,但是设计StarRocks表时可以增加concat_id这个逻辑主键。我们可以将所有的字段都添加到主键中,变成一个联合主键:

复制代码
CREATE TABLE `bikeda_ebik_saas_user_ride_assort_gather_df_v1` (
  `concat_id` varchar(65533) NOT NULL COMMENT "",
  `pt` date NOT NULL COMMENT "",
  `tenant_id` varchar(65533) NOT NULL COMMENT "",
  `city_guid` bigint NOT NULL COMMENT "",
) ENGINE=OLAP 
PRIMARY KEY(`concat_id`, `pt`)
COMMENT "测试表"
PARTITION BY date_trunc('day', pt)
DISTRIBUTED BY HASH(`concat_id`)
PROPERTIES (
"replication_num" = "3",
"in_memory" = "false",
"enable_persistent_index" = "true",
"replicated_storage" = "true",
"partition_live_number" = "62",
"compression" = "LZ4"
);

Flink写入时用concat_ws把所有字段连接在一起:

复制代码
-- 创建Sink,链接StarRocks的表
CREATE TABLE IF NOT EXISTS `df_v1` (
  `concat_id` varchar(65533) NOT NULL,
  `pt` date not null,
  `tenant_id` string not null,
  `city_guid` bigint not null,
  PRIMARY KEY (concat_id, pt) NOT ENFORCED
) WITH (
  'connector' = 'starrocks',
  'jdbc-url' = 'jdbc:mysql:loadbalance://:9030,:9030,:9030',
  'load-url' = ':8030;:8030;:8030',
  'database-name' = 'test',
  'table-name' = 'df',
  'username' = 'root',
  'password' = '123456'
);
-- 创建hive catalog
-- pro生产环境中hive-conf-dir为/app/hive/conf
-- fat测试环境中hive-conf-dir为/app/hive/dev-conf
CREATE CATALOG flinkHiveCatalog WITH (
  'type' = 'hive',
  'default-database' = 'default',
  'hive-conf-dir' = '/app/hive/conf'
);

-- 使用hive catalog
-- 直接使用hive catalog,只是为了的select部分查询hive表,写法方便
-- 查询hive部分直接db.table即可,不用catalog.db.table三段名字
USE CATALOG flinkHiveCatalog;

-- insert语句插入StarRocks
-- 注意,这时候默认catalog是flinkHiveCatalog,所以StarRocks的sink表要加default_catalog和default_database
insert into
  default_catalog.default_database.df_v1
select
    concat_ws('\001',CAST(TO_TIMESTAMP(CAST(`pt` AS STRING), 'yyyyMMdd') AS VARCHAR),coalesce(`tenant_id`, ''),CAST(coalesce(`city_guid`, -777) AS VARCHAR),),
    TO_TIMESTAMP(CAST(`pt` AS STRING), 'yyyyMMdd'),
    coalesce(`tenant_id`, ''),
    coalesce(`city_guid`, '')
    
from test.df
where pt = '${dt}'
相关推荐
电子科技圈1 小时前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
紧固件情报站1 小时前
紧固件报价逻辑重构:成本、合规与智能博弈
大数据·人工智能·重构
辛迪聊物业数字化1 小时前
智慧社区小程序落地避坑指南:3类物业方案选型+成本测算,线上服务零翻车
大数据·嵌入式硬件·百度·系统架构
Leo.yuan1 小时前
企业业务人员如何独立完成数据分析?2026年自助BI工具选型与应用指南
大数据·数据库·人工智能
@小匠2 小时前
Flink + Iceberg 批量失败复盘:一次超时如何变成 Hive Metastore 锁泄漏
大数据·hive·flink
小海测评2 小时前
生成式引擎优化技术解析:大语言模型外部内容采信机制与工程实践
大数据·人工智能·语言模型·geo·企业获客
yyzc111112 小时前
合规稳定资金结算收款系统助力门店发展
大数据·运维·人工智能
IT研究室3 小时前
最新大数据毕业设计选题推荐-基于大数据的AI助手系统性软件缺陷评论挖掘与可视化-大数据-Spark-Hadoop-Bigdata
大数据·人工智能·课程设计
Sayai3 小时前
Flink 日志解析任务性能优化实战:正则/Grok 预编译、Guava 缓存权重陷阱与 ES 写入隔离
java·大数据·性能优化·flink·实时计算