Hive:字符串中的第一次和最后一次出现

Hive: First and last occurrence in a string

我有一个 id 列和一个字符串列,如下所示:

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

我需要 Hive 中以下列的第一次出现和最后一次出现

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 的新手,有人可以帮我解决正则表达式或拆分问题。谢谢

使用拆分:

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   
;

Returns:

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

使用正则表达式:

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