1.
页面日志解析思路:
页面日志表中每行数据对应
一个页面访问记录
,一个页面访问记录
应该包含日志中的公共信息和页面信息。
先将所有包含
page
字段的日志过滤出来
,然后使
用
get_json_object
函数解析每个字段。
1
)建表语句
hive (gmall)>
drop table if exists dwd_page_log;
CREATE EXTERNAL TABLE dwd_page_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
版本号
',
`during_time` bigint COMMENT '
持续时间毫秒
',
`page_item` string COMMENT '
目标
id ',
`page_item_type` string COMMENT '
目标类型
',
`last_page_id` string COMMENT '
上页类型
',
`page_id` string COMMENT '
页面
ID ',
`source_type` string COMMENT '
来源类型
',
`ts` bigint
) COMMENT '
页面日志表
'
PARTITIONED BY (dt string)
stored as parquet
LOCATION '/warehouse/gmall/dwd/dwd_page_log'
TBLPROPERTIES('parquet.compression'='lzo');
2
)数据导入
hive (gmall)>
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFo
rmat;
insert overwrite table dwd_page_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.during_time'),
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,'$.ts')
from ods_log
where dt='2020-06-14'
and
get_json_object(line,'$.page') is not null;
3
)查看数据
hive (gmall)>
select * from dwd_page_log where dt='2020-06-14' limit 2;
2.
动作日志表
动作日志解析思路:
动作日志表中每行数据对应用户的
一个动作记录
,一个动作记录应
当包含公共信息、页面信息以及动作信息。
先将包含
action
字段的日志过滤出来,
然后
通过
UDTF
函数
,
将
action
数组“炸开”
(类似于
explode
函数的效果),然后使用
get_json_object
函数解析每个字段。
1
)建表语句
hive (gmall)>
drop table if exists dwd_action_log;
CREATE EXTERNAL TABLE dwd_action_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
版本号
'
,
`during_time` bigint
COMMENT '
持续时间毫秒
'
,
`page_item` string
COMMENT '
目标
id '
,
`page_item_type` string
COMMENT '
目标类型
'
,
`last_page_id` string
COMMENT '
上页类型
'
,
`page_id` string
COMMENT '
页面
id '
,
`source_type` string
COMMENT '
来源类型
'
,
`action_id` string
COMMENT '
动作
id'
,
`item` string
COMMENT '
目标
id '
,
`item_type` string
COMMENT '
目标类型
'
,
`ts` bigint
COMMENT '
时间
'
) COMMENT '
动作日志表
'
PARTITIONED BY (dt string)
stored as parquet
LOCATION '/warehouse/gmall/dwd/dwd_action_log'
TBLPROPERTIES('parquet.compression'='lzo');
2)创建UDTF函数-设计思路