DWD层问题:在DWD执行以下插入sql 语句,像dwd_start_log中插入数据时dwd_start_log 中会多出异常数据,所有字段均为 NULL

在DWD执行以下插入sql 语句,像dwd_start_log中插入数据时dwd_start_log 中会多出异常数据,所有字段均为 NULL

一、问题状况

在执行以下sql 语句,像 dwd_start_log 中插入数据时,dwd_start_log 中会多出一条异常数据,所有字段均为 NULL

insert overwrite table dwd_start_log
PARTITION (dt='2020-03-10')
select 
    get_json_object(line,'$.mid') mid_id,
    get_json_object(line,'$.uid') user_id,
    get_json_object(line,'$.vc') version_code,
    get_json_object(line,'$.vn') version_name,
    get_json_object(line,'$.l') lang,
    get_json_object(line,'$.sr') source,
    get_json_object(line,'$.os') os,
    get_json_object(line,'$.ar') area,
    get_json_object(line,'$.md') model,
    get_json_object(line,'$.ba') brand,
    get_json_object(line,'$.sv') sdk_version,
    get_json_object(line,'$.g') gmail,
    get_json_object(line,'$.hw') height_width,
    get_json_object(line,'$.t') app_time,
    get_json_object(line,'$.nw') network,
    get_json_object(line,'$.ln') lng,
    get_json_object(line,'$.la') lat,
    get_json_object(line,'$.entry') entry,
    get_json_object(line,'$.open_ad_type') open_ad_type,
    get_json_object(line,'$.action') action,
    get_json_object(line,'$.loading_time') loading_time,
    get_json_object(line,'$.detail') detail,
    get_json_object(line,'$.extend1') extend1
from ods_start_log 
where dt='2020-03-10';

异常如下图:
file

二、问题原因:

LZ0 文件并非原生支持 Split,需要借助索引才可以 Split。。但是 LZ0 文件的索引,只有 hadoop- z0 提供的 Deprecatedlzotextinputformat 才能识别,其余的 Inputformat 会将索引文件当作输入文件处理
Hive 的默认 Inputformat 为 CombineHiveInputFormat
如下图:
file
在读取 LZO 文件时,CombineHiveInputFormat 不会自动转为 DeprecateLzoTextInputFormat 故会将 LZ 的索引文件当做输入文件处理,所以多了一行异常数据。

三、问题解决

HivelnputFormat在读取LZO文件时,会转为DeprecatedLzoTextInputFormat,从而识别索引文件。
故在上述sq|之前声明hive.input.format为HivelnputFormat即可↵
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

!相应滴,导入脚本也应该修改,增加词条sql

版权声明:
作者:十下
链接:http://blog.edkso.cn/?p=671
来源:十下博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>