错误日志解析思路:
错误日志表中每行数据对应
一个错误记录
,为方便定位错误,一个
错误记录应当包含与之对应的公共信息、页面信息、曝光信息、动作信息、启动信息以及错
误信息。
先将包含
err
字段的日志过滤出来
,然后使用
get_json_object
函数解析所有字段。
1
)建表语句
hive (gmall)>
drop table if exists dwd_error_log;
CREATE EXTERNAL TABLE dwd_error_log(
`area_code` string
COMMENT '
地区编码
'
,
`brand` string
COMMENT '
手机品牌
'
,
`channel` string
COMMENT '
渠道
'
,
`model` string
COMMENT '
手机型号
'
,
`mid_id` string
COMMENT '
设备
id'
,
`os` string
COMMENT '
操作系统
'
,
`user_id` string
COMMENT '
会员
id'
,
`version_code` string
COMMENT 'app
版本号
'
,
`page_item` string
COMMENT '
目标
id '
,
`page_item_type` string
COMMENT '
目标类型
'
,
`last_page_id` string
COMMENT '
上页类型
'
,
`page_id` string
COMMENT '
页面
ID '
,
`source_type` string
COMMENT '
来源类型
'
,
`entry` string
COMMENT ' icon
手机图标
notice
通知
install
安装后启动
'
,
`loading_time` string
COMMENT '
启动加载时间
'
,
`open_ad_id` string
COMMENT '
广告页
ID '
,
`open_ad_ms` string
COMMENT '
广告总共播放时间
'
,
`open_ad_skip_ms` string
COMMENT '
用户跳过广告时点
'
,
`actions` string
COMMENT '
动作
'
,
`displays` string
COMMENT '
曝光
'
,
`ts` string
COMMENT '
时间
'
,
`error_code` string
COMMENT '
错误码
'
,
`msg` string
COMMENT '
错误信息
'
) COMMENT '
错误日志表
'
PARTITIONED BY (dt string)
stored as parquet
LOCATION '/warehouse/gmall/dwd/dwd_error_log'
TBLPROPERTIES('parquet.compression'='lzo');
说明:此处为对动作数组和曝光数组做处理,如需分析错误与单个动作或曝光的关联,
可先使用
explode_json_array
函数将数组“炸开”,再使用
get_json_object
函数获取具体
字段。
4
)数据导入
hive (gmall)>
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFo
rmat;
insert overwrite table dwd_error_log partition(dt='2020-06-14')
select
get_json_object(line,'$.common.ar'),
get_json_object(line,'$.common.ba'),
get_json_object(line,'$.common.ch'),
get_json_object(line,'$.common.md'),
get_json_object(line,'$.common.mid'),
get_json_object(line,'$.common.os'),
get_json_object(line,'$.common.uid'),
get_json_object(line,'$.common.vc'),
get_json_object(line,'$.page.item'),
get_json_object(line,'$.page.item_type'),
get_json_object(line,'$.page.last_page_id'),
get_json_object(line,'$.page.page_id'),
get_json_object(line,'$.page.sourceType'),
get_json_object(line,'$.start.entry'),
get_json_object(line,'$.start.loading_time'),
get_json_object(line,'$.start.open_ad_id'),
get_json_object(line,'$.start.open_ad_ms'),
get_json_object(line,'$.start.open_ad_skip_ms'),
get_json_object(line,'$.actions'),
get_json_object(line,'$.displays'),
get_json_object(line,'$.ts'),
get_json_object(line,'$.err.error_code'),
get_json_object(line,'$.err.msg')
from ods_log
where dt='2020-06-14'
and
get_json_object(line,'$.err') is not null;
5
)查看数据
hive (gmall)>
select * from dwd_error_log where dt='2020-06-14' limit 2;