Улей: первое и последнее вхождение в строку - PullRequest
1 голос
/ 16 октября 2019

У меня есть столбец 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 для ее решения

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

Я продолжаю получать синтаксическую ошибку в Hive, говоря, что [неожиданно.

Другая альтернатива, которую я нашел, это регулярное выражение, но я новичок в Hive, может кто-нибудь помочь мне с регулярным выражением или разделением. Спасибо

1 Ответ

1 голос
/ 16 октября 2019

Использование split:

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

Использование регулярного выражения:

select id, 
       regexp_extract(values,'^([^~]*)',1) as first,
       regexp_extract(values,'([^~]*)$',1) as last
   from your_table t 
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...