美文网首页
Hive MatchPath函数使用案例

Hive MatchPath函数使用案例

作者: phycsgy | 来源:发表于2017-05-04 16:50 被阅读0次

    支持版本: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

    相关文章

      网友评论

          本文标题:Hive MatchPath函数使用案例

          本文链接:https://www.haomeiwen.com/subject/zkoltxtx.html