hive:字符串中的第一个和最后一个引用

qyswt5oh  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(1127)

我有一个id列和一个string列,如下所示:

id   values
1   AD123~DF123~SQ345
2   CF234~DF234
3   BG123

我需要在配置单元中第一次出现和最后一次出现下面的列

id  first   last    
1   AD123   SQ345    
2   CF234   DF234    
3   BG123   BG123

我已经尝试过使用hive split函数来解决它

select id, split(values, '\~') [0] as first, reverse(split(reverse(values), '\~')[0]) from demo;

我在hive中不断得到一个语法错误,说[这是意外的]。
另一个选择,我发现是正则表达式,但我是新的Hive,有人能帮我在这里与正则表达式或分裂。谢谢

uxhixvfz

uxhixvfz1#

使用拆分:

with your_table as(
select stack(3,
1, 'AD123~DF123~SQ345',
2, 'CF234~DF234',
3, 'BG123'
 ) as (id,values)
 ) --use your_table instead of this

select id, values[0] as first, values[size(values)-1] as last
from
( 
 select id, split(values,'~') values
   from your_table t
)s   
;

退货:

id      first   last
1       AD123   SQ345
2       CF234   DF234
3       BG123   BG123

使用regexp:

select id, 
       regexp_extract(values,'^([^~]*)',1) as first,
       regexp_extract(values,'([^~]*)$',1) as last
   from your_table t 
;

相关问题