Hive:字符串中的第一次和最后一次出现
Posted
技术标签:
【中文标题】Hive:字符串中的第一次和最后一次出现【英文标题】:Hive: First and last occurrence in a string 【发布时间】:2019-10-16 03:48:46 【问题描述】:我有一个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】:使用拆分:
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
;
【讨论】:
以上是关于Hive:字符串中的第一次和最后一次出现的主要内容,如果未能解决你的问题,请参考以下文章
如何在PostgreSQL中的字符串中查找特定字符的第一次和最后一次出现