HIVE SQL 中的 REGEXP_SUBSTR 等效项?

Posted

技术标签:

【中文标题】HIVE SQL 中的 REGEXP_SUBSTR 等效项?【英文标题】:REGEXP_SUBSTR equivalent in HIVE SQL? 【发布时间】:2020-03-24 14:24:12 【问题描述】:

早上好。我正在 Hive 中寻找 REGEXP_SUBSTR 中的等价物,我在 Teradata 等其他数据库中使用它。

我的具体情况是:我有一个包含字符串的字段。它看起来像这样:

Row1: ABC ACC ADF AFA BAC CAF
Row2: ACC BAC CAG HOL HRR NOM
Row3: ACC ARR BBA CAF LOM NOM

在我的 WHERE 子句中,我使用 RLIKE 来查找字符串的特定部分,例如:

WHERE mystring RLIKE 'BAC|BBA'

我想做的是将匹配的任何部分作为列返回。所以结果是:

Row1: BAC
Row2: BAC
Row3: BBA

在其他数据库中,我会通过将其放入 SELECT 语句中来做到这一点:REGEXP_SUBSTR(mystring,'(BAC|BBA)\S*')。 Hive 中是否有等效功能?如果是这样,语法是什么?

我查看了几个不同的 Hive 函数,但他们似乎希望字符串每次都在同一个位置,但这里的情况并非如此。但我承认我可能误解了语法。

【问题讨论】:

该函数在Hive中调用regexp_extract() 【参考方案1】:

对 \s 等特殊字符使用 regexp_extract 和双斜杠:

 select regexp_extract('ABC ACC ADF AFA BAC CAF','(BAC|BBA)\\s*');

在此处阅读有关语法的更多信息:Hive Language Manual - StringFunctions

【讨论】:

似乎可以完美运行,非常感谢您提供的语法示例!

以上是关于HIVE SQL 中的 REGEXP_SUBSTR 等效项?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Oracle中的SQL中的REGEXP_SUBSTR将自定义消息替换为空插槽

Oracle SQL 正则表达式 (regexp_substr)

使用 regexp_substr 时 SQL 获取缺少的表达式

尝试使用 REGEXP_SUBSTR 时出现错误 (PLS-00201)

SQL Clob 在 Clob 中使用连接搜索多个字符串,可能是 REGEXP_SUBSTR

SQL REGEXP_SUBSTR 拆分时返回空字符串