Hive:从/分隔列中提取子字符串

Posted

技术标签:

【中文标题】Hive:从/分隔列中提取子字符串【英文标题】:Hive: Extracting sub-string from / separated column 【发布时间】:2019-06-06 23:32:14 【问题描述】:

我的表格有如下条目:

this/is/my/dir/file
this/is/my/another/dir/file

我想显示不带 /filename 的字符串:

this/is/my/dir

这是我的代码:

select regexp_replace(filepath,'[^/]+[/]$','')

【问题讨论】:

你的想法是正确的,只是倒退了。 [/][^/]+$,或者更简单地说,\/[^/]+$ 【参考方案1】:

你可以使用

select regexp_replace(filepath,'/[^/]+$','')

查看regex demo 和regex graph:

正则表达式详细信息

/ - 一个 / 字符 [^/]+ - 除了/ 之外的 1+ 个字符 $ - 字符串结束。

【讨论】:

【参考方案2】:

在这里,我们可以使用类似于以下的表达式:

(.+)(\/.+)

我们的代码可能如下所示:

select regexp_replace(filepath,'^(.+)(\/.+)$','$1')

select regexp_replace(filepath,'(.+)(\/.+)','$1')

我们想要的输出在第一个捕获组$1,后面是最后一个斜杠和文件名,在第二个捕获组$2

Demo

【讨论】:

以上是关于Hive:从/分隔列中提取子字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式从 mysql 列中提取子字符串

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

Python - 从列中提取/复制分隔文本到新列 xlsx

使用 Impala 或 Hive 提取表列中的多个字符串元素

从列中的字符串中提取每行的最大值