Impala正则表达式先行和后行的解决方法

时间:2018-07-11 03:44:41

标签: sql regex hive impala

如果我使用Hive,则可以正常工作。但是,如果我使用Impala,则会引发错误:

<pre><code contentEditable="true">
</code></pre>

基本上,Impala不支持先行和后行

https://www.cloudera.com/documentation/enterprise/release-notes/topics/impala_incompatible_changes.html#incompatible_changes_200

今天有解决方法吗?也许使用UDF?

谢谢。

1 个答案:

答案 0 :(得分:1)

由于您使用的是regexp_replace,因此可以匹配并捕获要保留(但要用作必备上下文)的字符串部分,并替换为反向引用。参见regexp_replace Impala reference

  

这些示例说明了如何用替换文本替换与模式匹配的字符串部分,替换文本可以包括对模式字符串中任何()组的反向引用。反向引用编号从1开始,并且任何\个字符都必须转义为\\

因此,在这里,您可以使用

select regexp_replace("foobarbarfoo","bar(bar)","<NA>\\1");
                                         ^   ^       ^^^   

请注意,它不能替换连续的匹配项,但是,它将在当前方案和foobarbarfoo will turn into foo<NA>barfoo下工作(请注意,Go regex引擎也是RE2,因此在regex101.com上选择了此选项)。 / p>