文档首页/ 数据湖探索 DLI/ 常见问题/ Flink作业类/ Flink SQL作业类/ Flink作业输出流写入数据到OBS,通过该OBS文件路径创建的DLI表查询无数据
更新时间:2024-11-08 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';

解决方案

  1. 在DLI创建Flink结果表到OBS的作业时,如上述举例中的car_infos_sink表,是否开启了Checkpoint。如果未开启则需要开启Checkpoint参数,重新运行作业生成OBS数据文件。

    开启Checkpoint步骤如下。

    1. 到DLI管理控制台,左侧导航栏选择“作业管理 > Flink作业”,在对应的Flink作业所在行,操作列下单击“编辑”。
    2. 在“运行参数”下,查看“开启Checkpoint”参数是否开启。
      图1 开启Checkpoint
  2. 确认Flink结果表的表结构和DLI分区表的表结构是否保持一致。如问题描述中car_infos_sink和car_infos表的字段是否一致。
  3. 通过OBS文件创建DLI分区表后,是否执行以下命令从OBS路径中恢复分区信息。如下,在创建完DLI分区表后,需要恢复DLI分区表car_infos分区信息。
    alter table car_infos recover partitions;