更新时间:2024-11-06 GMT+08:00
Flink作业输出流写入数据到OBS,通过该OBS文件路径创建的DLI表查询无数据
问题现象
使用Flink作业输出流写入数据到了OBS中,通过该OBS文件路径创建的DLI表进行数据查询时,无法查询到数据。
例如,使用如下Flink结果表将数据写入到OBS的“obs://obs-sink/car_infos”路径下。
create sink stream car_infos_sink ( carId string, carOwner string, average_speed double, buyday string ) partitioned by (buyday) with ( type = "filesystem", file.path = "obs://obs-sink/car_infos", encode = "parquet", ak = "{{myAk}}", sk = "{{mySk}}" );
通过该OBS文件路径创建DLI分区表,在DLI查询car_infos表数据时没有查询到数据。
create table car_infos ( carId string, carOwner string, average_speed double ) partitioned by (buyday string) stored as parquet location 'obs://obs-sink/car_infos';
解决方案
- 在DLI创建Flink结果表到OBS的作业时,如上述举例中的car_infos_sink表,是否开启了Checkpoint。如果未开启则需要开启Checkpoint参数,重新运行作业生成OBS数据文件。
- 到DLI管理控制台,左侧导航栏选择“作业管理 > Flink作业”,在对应的Flink作业所在行,操作列下单击“编辑”。
- 在“运行参数”下,查看“开启Checkpoint”参数是否开启。
图1 开启Checkpoint
- 确认Flink结果表的表结构和DLI分区表的表结构是否保持一致。如问题描述中car_infos_sink和car_infos表的字段是否一致。
- 通过OBS文件创建DLI分区表后,是否执行以下命令从OBS路径中恢复分区信息。如下,在创建完DLI分区表后,需要恢复DLI分区表car_infos分区信息。
alter table car_infos recover partitions;
父主题: Flink SQL作业类