动作日志解析思路:
动作日志表中每行数据对应用户的一个动作记录,一个动作记录应当包含公共信息、页面信息以及动作信息。先将包含action字段的
大数据培训日志过滤出来,然后通过UDTF函数,将action数组“炸开”(类似于explode函数的效果),然后使用get_json_object函数解析每个字段。
真实情况下,一条日志是存在多个动作的. 和下面这条日志很类似:
{
"common":{"ar":"110000","ba":"Xiaomi","ch":"oppo","md":"Xiaomi 9","mid":"mid_128","os":"Android 10.0","uid":"160","vc":"v2.1.134"},
"displays":[ 这是一个json数组,一对多的关系
{"displayType":"activity","item":"1","item_type":"activity_id","order":1},
{"displayType":"activity","item":"2","item_type":"activity_id","order":2,
{"displayType":"promotion","item":"10","item_type":"sku_id","order":3},
{"displayType":"query","item":"4","item_type":"sku_id","order":4},
{"displayType":"query","item":"3","item_type":"sku_id","order":5},
{"displayType":"recommend","item":"8","item_type":"sku_id","order":6},
{"displayType":"promotion","item":"6","item_type":"sku_id","order":7},
{"displayType":"promotion","item":"5","item_type":"sku_id","order":8},
{"displayType":"query","item":"9","item_type":"sku_id","order":9},
{"displayType":"query","item":"2","item_type":"sku_id","order":10},
{"displayType":"query","item":"3","item_type":"sku_id","order":11}
],
"page":{"during_time":17802,"page_id":"home"},
"ts":1592125099885
}

UDTF思想:
写函数,首先想,输入参数是什么类型;输出参数是什么类型。
hive udtf 官网:
https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide+UDTF
1)建表语句
2)创建UDTF函数——设计思路
3)创建UDTF函数——编写代码
(1)创建一个maven工程:hivefunction【关注尚硅谷,轻松学IT】
(2)创建包名:com.alibaba.hive.udtf
(3)引入如下依赖
(4)代码
由于我们引入了hive依赖,我们打开依赖看下,
我们这里用这个:
完整的代码:
接下来打包上传集群,然后在hive里创建函数,用这个包。
hive里面函数有两种,一种是临时函数;一种是永久函数。因为我每次炸裂都要用它,所以我把它设置为永久函数。
同时注意下,
hive的永久函数和数据库名有关系。
4)创建函数
(1)打包
(2)将hivefunction-1.0-SNAPSHOT.jar上传到集群,然后再将该jar包上传到HDFS的/user/hive/jars路径下
(4)注意:如果修改了自定义函数重新生成jar包怎么处理?只需要替换HDFS路径上的旧jar包,然后重启Hive客户端即可。
转载于进击的大数据初学者
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70010293/viewspace-2848645/
,如需转载,请注明出处,否则将追究法律责任。