hudi系列-不支持flink计算列

本文讨论了在Hudi MOR表中使用Flink SQL进行增量查询并与外部维表进行LOOKUP JOIN时遇到的问题。由于Flink SQL的计算列在数据文件中不存在,导致查询错误。解决方案包括在构建动态表时过滤计算列或在查询时临时添加process_time列。这两种方法都可成功避免数组越界错误并实现正常查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用场景

有个hudi mor的事实表,需要与外部的维表进行关联以生成明细宽表,方案是基于flink sql对事实表进行增量查询,同时与外部的维表进行lookup join,除了无需编码之外,通过jdbc的方式连接外部表还能利用flink jdbc-connector的缓存功能。

这种join方式要求事实表必须有一个处理时间(process time)属性,所以在定义事实表时增加了一个计算列

create table if not exists ods_test_hudi (
    `id` int,
    `test` string,
    `name` string,
    `age` int,
    `dt` string,
    `create_date` timestamp(3),
    `process_time` AS PROCTIME(),  //增加计算列
    PRIMARY KEY(`id`) NOT ENFORCED
)
WITH (
    'connector'='hudi',
    'table.type'='MERGE_ON_READ'
)

从flink sql的角度来看,这并没什么毛病,但是直接查这个表的数据时就会报错

 tEnv.sqlQuery("select * from ods_test_hudi /*+ OPTIONS('read.start-commit'='earliest')*/").execute().print();
 from ods_test_hudi /*+ OPTIONS('read.start-commit'='earlie
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值