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
;
我有一个 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
;