Regex 配置单元:当列值由分隔符(~)分隔时,将单个记录扩展为多个记录
我有以下资料Regex 配置单元:当列值由分隔符(~)分隔时,将单个记录扩展为多个记录,regex,hadoop,hive,hiveql,Regex,Hadoop,Hive,Hiveql,我有以下资料 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
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
Tilde(~
)不是Java正则表达式中的元字符(Hive使用Java正则表达式),不需要转义。也可以对数组应用“分解”或“分解”,在分解之前,需要拆分字符串以获得数组。使用posexplode(拆分(a.user,~+'))t1作为(pos,user)
另外(这只是一个观点):我不会将数组位置命名为“爆炸测试”
pos
或position
或干脆p
看起来就不会那么混乱了您能格式化数据以了解问题吗?我的理解是你有3个输入行,如果可能的话,你能根据你的分隔符将你的输入行分解成列,然后格式化你想要的输出吗?我尽了最大的努力格式化,有人能告诉我如何正确格式化吗,谢谢,但是在我上面的问题中,有多个~分隔值,我想忽略~的多次出现,而只考虑一次出现的~~。有没有可能通过以下方式实现这一点posexplode@shanmukh根据这个问题的预期结果,我相信你正在尝试把多个Trdes看作是单个的,然后被它分开,对吧?然后在regexp中使用'~+'
,它的意思是:一个或多个tilde。编辑了答案