Hive 如何在配置单元中最后一次出现单词后提取字符串

Hive 如何在配置单元中最后一次出现单词后提取字符串,hive,Hive,我的一个配置单元表中的字符串列如下所示 select * from ( select "edition_xx/news/radio_today_news_xx" as my_column union all select "edition_xx/news/news/television_1.3" as my_column ) A 我想提取news/之后的字符串部分。所以我的输出列看起来像 radio_today_news_xx television_1.3 如何在Hive中使用正则表达式

我的一个配置单元表中的字符串列如下所示

select * from
(
select "edition_xx/news/radio_today_news_xx" as my_column
union all 
select "edition_xx/news/news/television_1.3" as my_column
) A 
我想提取
news/
之后的字符串部分。所以我的输出列看起来像

radio_today_news_xx
television_1.3
如何在Hive中使用正则表达式提取此内容?请注意,
news/
可以出现X次,我希望字符串在最后一次出现之后出现。

使用
split()

此regexp表示
news/
一次或多次

结果:

radio_today_news_xx
television_1.3
Time taken: 37.218 seconds, Fetched: 2 row(s)

使用“拆分”获取最后一个匹配项

select split(A.my_column,'news\/')[size(split(A.my_column,'news\/'))-1] lt
    from
    (
    select "edition_xx/news/radio_today_news_xx" as my_column
    union all 
    select "edition_xx/news/news/television_1.3" as my_column
    union all
    select "edition_xx/news/radio_today/news_xx" as my_column
    ) 
输出

radio_today_news_xx
television_1.3
radio_today/news_xx

这假设所需的输出总是在字符串的末尾,我认为根据OP的描述,这是不正确的。是的,如果我有一个值为
edition\u xx/news/radio\u today/news\u xx
的记录,则此逻辑将失败,在这种情况下,我需要在输出中使用
radio\u today/news\u xx
。但是逻辑将返回
news\u xx
,尽管我认为使用
反向('news/')
而不是
'/'
进行拆分将对我有效
radio_today_news_xx
television_1.3
radio_today/news_xx