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"。 pos
或 position
或简单地 p
看起来不那么混乱
我有以下信息
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"。 pos
或 position
或简单地 p
看起来不那么混乱