Hive MatchPath函数使用案例

支持版本:0.13(更早版本中函数名为NPath)
源码参考:https://github.com/intel-hadoop/hive-on-spark/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/MatchPath.java

函数说明:
MatchPath根据窗口中列的数据匹配特定的Pattern.
根据筛选的结果列名,MatchPath匹配成功后返回符合Pattern的所有行数据中第一行的筛选列数据和一个Array<Struct> 格式的tpath字段数据
tpath中包含了符合Pattern的所有行中筛选列数据,每一行筛选数据都存在Struct<>中,Struct<>中的元素名称与筛选列相同
MatchPath包含至少4个参数:
1、匹配模式Pattern: 字符串格式,可以包含一个以上的Symbol,Symbol之间以“.”分隔,Symbol可以与*/+符号结合匹配0个以上或者一个以上,类似于正则表达式
2、符号Symbol: 与Pattern中的Symbol对应
3、符号条件
4、筛选结果列

使用案例:划分用户连续访问批次(sesseion)
sesseion:用户距离上一次访问超过30分钟记为一次新session

源数据
tmp.user_visit

Paste_Image.png

使用MatchPath匹配距离上次访问不超过30分钟的Pattern
select
tpath
,tpath[0]
,tpath[0].user_id
,tpath[0].visit_time
,concat(tpath[0].user_id,"_",unix_timestamp(tpath[0].visit_time)) as session_id
from matchpath(
on
(select user_id,visit_time
from tmp.user_visit
) a
distribute by user_id sort by visit_time
arg1("A.B*"),
arg2("A"),
arg3(floor((unix_timestamp(visit_time) - unix_timestamp(lag(visit_time,1,"1900-01-01 00:00:00")))/60) >= 30),
arg4("B"),
arg5(floor((unix_timestamp(visit_time) - unix_timestamp(lag(visit_time,1,"1900-01-01 00:00:00")))/60) < 30),
arg6('user_id,visit_time,tpath')
)

结果:

Paste_Image.png

原理:


Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,317评论 6 13
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,076评论 0 19
  • 相信每个人身边都会出现这样一些符号吧, QQ微信对话框,邮件中,一个又一个感叹号,甚至并排两三个。 如立定的士兵,...
    黄點點阅读 729评论 0 3
  • 第一条评论: 无人与我立黄昏 无人问我粥可温 无人与我捻熄灯 无人共我书半生 无人陪我夜已深 无人与我把酒分 无人...
    L_当时只道是寻常阅读 708评论 0 0