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)