mysql表分区join_​实战:Flink 1.12 维表 Join Hive 最新分区功能体验

本文介绍了如何在 Flink 1.12 中使用新功能关联 Hive 的最新分区表,对比了 Flink 1.12 之前需要通过 DataStream 和 map 算子手动处理的情况,详细展示了 Flink 1.12 如何通过 SQL 方式直接关联 Hive 最新分区,并提供了配置参数和示例代码,简化了实时数据流与 Hive 维表 Join 的开发过程。
摘要由CSDN通过智能技术生成

​实战:Flink 1.12 维表 Join Hive 最新分区功能体验

余东@哗啦啦 Flink 中文社区

我们生产常有将实时数据流与 Hive 维表 join 来丰富数据的需求,其中 Hive 表是分区表,业务上需要关联上 Hive 最新分区的数据。上周 Flink 1.12 发布了,刚好支撑了这种业务场景,我也将 1.12 版本部署后做了一个线上需求并上线。对比之前生产环境中实现方案,最新分区直接作为时态表提升了很多开发效率,在这里做一些小的分享。

Flink 1.12 前关联 Hive 最新分区方案

Flink 1.12 关联 Hive 最新分区表

关联Hive最新分区 Demo

Flink SQL 开发小技巧

Flink 1.12 前关联 Hive 最新分区方案

在分区时态表出来之前,为了定期关联出最新的分区数据,通常要写 DataStream 程序,在 map 算子中实现关联 Hive 最新分区表的逻辑,得到关联打宽后的 DataStream 对象,通过将该 DataStream 对象转换成 Table 对象后,再进行后续的 SQL 业务逻辑加工。

StreamTableEnvironment tblEnv = StreamTableEnvironment.create(env, streamSettings);

DataStream> indexBeanStream = masterDataStream.map(new IndexOrderJoin());

map 算子中的主要逻辑: 将 T+2 的维度数据与实时数据关联,返回 Tuple2 数据,因为离线数仓出数一般在凌晨 3 点,有时候由于集群资源不稳定导致数据产出慢,业务对实时性要求也不高,所以这里用的是 T+2 的数据。

public class IndexOrderJoin extends RichMapFunction> {

private Map> map = null;

Logger logger;

@Override

public void open(Configuration parameters) throws Exception {

logger = LoggerFactory.getLogger(Class.forName("com.hll.util.IndexOrderJoin"));

map = new HashMap<>();

}

public Tuple2 map(MasterBean masterBean) {

if (map.get(masterBean.getReportDate() - 2) == null) {

//如果map里没有T+2的维表数据则查询一次Hive,并将结果存入线程级别map,所以保证Task维表数据是全的

logger.info("initial hive data : {}", masterBean.getReportDate());

map.put(masterBean.getReportDate() - 2, getHiveDayIndex(masterBean.getReportDate() - 2));

}

//将的kafka数据与hive join后返回打宽数据

return new Tuple2<>(masterBean, map.get(masterBean.getReportDate() - 2).get(masterBean.getGroupID()));

}

基于关联打宽后的 DataStream 创建视图,然后再做后续的 SQL 业务逻辑查询。

tblEnv.createTemporaryView("index_ord

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值