Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 配置单元:当列值由分隔符(~)分隔时,将单个记录扩展为多个记录_Regex_Hadoop_Hive_Hiveql - Fatal编程技术网

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。编辑了答案