配置单元:当列值由分隔符(~)分隔时,将单个记录扩展为多个记录



我有以下信息

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

我尝试了横向视图的解释,但它不能正常工作,请帮助。

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

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

此外(这只是一种观点(:我不会将数组位置命名为"exploded_test"。posposition或简单的p看起来不那么令人困惑

最新更新