Hive:当列值由分隔符(~)分隔时,将单条记录扩展为多条记录

Hive : Expand a single record into multiple records when column values are separated by delimiter (~)

我有以下信息

id     user                 date                          test

102   123~456~897   01JAN2019~6JUL2018~21DEC2017        abc~qwer~~wer~
103  13~45~88~34   01JAN2020~6JUN2019~21JAN2018~12MAR2017 pqr~~qw~wer*123~qwerty

我要的结果,记录必须按日期升序展开

id      user     date            test 

102     897      21DEC2017        wer
102     456      06JUL2018        qwer
102     123      01JAN2019        abc
103     34       12MAR2017        qwerty
103     88       21JAN2018        wer*123
103     45       06JUN2019        qw
103     13       01JAN2020        pqr

我试过横向视图posexplode,但它不能正常工作,请帮助。

a.id, 
    from demo a
    lateral view posexplode(a.test,'\~')) t1 as exploded_test,test
    lateral view posexplode(a.user,'\~')) t2 as exploded_user, user
    lateral view posexplode(a.date,'\~')) t3 as exploded_date, date
    where exploded_test == exploded_user and exploded_user == exploded_date
    order by 1,3

波浪号 (~) 不是 Java 正则表达式中的元字符(Hive 使用 Java 正则表达式)并且不需要转义。 posexplode 或 explode 也可以应用于数组,您需要在分解之前拆分字符串以获得数组。使用 posexplode(split(a.user,'~+')) t1 as (pos,user)

另外(这只是一个意见):我不会将数组位置命名为 "exploded_test"。 posposition 或简单地 p 看起来不那么混乱