Hive执行UDF UDTF HQL脚本解析

insert overwrite table dwd_base_event_log partition(dt='2020-03-10')
select
    base_analizer(line,'mid') as mid_id,
    base_analizer(line,'uid') as user_id,
    base_analizer(line,'vc') as version_code,
    base_analizer(line,'vn') as version_name,
    base_analizer(line,'l') as lang,
    base_analizer(line,'sr') as source,
    base_analizer(line,'os') as os,
    base_analizer(line,'ar') as area,
    base_analizer(line,'md') as model,
    base_analizer(line,'ba') as brand,
    base_analizer(line,'sv') as sdk_version,
    base_analizer(line,'g') as gmail,
    base_analizer(line,'hw') as height_width,
    base_analizer(line,'t') as app_time,
    base_analizer(line,'nw') as network,
    base_analizer(line,'ln') as lng,
    base_analizer(line,'la') as lat,
    event_name,
    event_json,
    base_analizer(line,'st') as server_time
from ods_event_log lateral view flat_analizer(base_analizer(line,'et')) tmp_flat as event_name,event_json
where dt='2020-03-10' and base_analizer(line,'et')<>'';

以此为例,将ods_event_log表的‘2020-03-10’分区数据的 并且通过UDF base_analizer()解析key为 ‘et’的字段不为空 的数据插入 表dwd_base_event_log 的2020-03-10分区。

base_analizer(): UDF 目的将原始数据解析成json,再根据传入的参数解析出公共字段mid uid cv 等
flat_analizer(): UDTF 目的解析出数据中含有的事件字段en ,即一条ods_event_log字段包含由多个en字段组成的json集合。而此处是将其全部解析成单个。[1,2,3]-> 1,2,3

lateral view flat_analizer(base_analizer(line,‘et’)) tmp_flat as event_name,event_json

lateral view : lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

此句话目的是将

NAMESCORE
小明[1,2,3]
小花[7,7,7]

转成

NAMESCORE
小明1
小明2
小明3
小花7
小花7
小花7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值