Hive - 在regexp_replace中使用$替换时出错

时间:2018-06-07 00:06:31

标签: hadoop hive

运行此行: regexp_replace('Hello from zzz','zzz','$15000')错误地说:

错误的参数''$ 15000'':org.apache.hadoop.hive.ql.metadata.HiveException:无法执行方法public org.apache.hadoop.io.Text org.apache.hadoop.hive.ql.udf对象org.apache.hadoop.hive.ql.udf.UDFRegExpReplace上的.UDFRegExpReplace.evaluate(org.apache.hadoop.io.Text,org.apache.hadoop.io.Text,org.apache.hadoop.io.Text)带有参数的Hello org.apache.hadoop.hive.ql.udf.UDFRegExpReplace的@ 6e85e0dd {来自zzz的Hello:org.apache.hadoop.io.Text,zzz:org.apache.hadoop.io.Text,$ 15000:org。大小为3的apache.hadoop.io.Text}

不支持$?有什么替代方案?

1 个答案:

答案 0 :(得分:0)

尝试使用两个反斜杠(\\)来转义$(是一个正则表达式特殊字符)

 hive> select regexp_replace('Hello from zzz','zzz','\\$15000');
    +--------------------+--+
    |        _c0         |
    +--------------------+--+
    | Hello from $15000  |
    +--------------------+--+

Hive-1.3.0 +中引入了替换功能 相关jira寻址替换功能

如果替换字符串来自中的字段,则使用 concat函数将字段值与反斜杠(\\)连接起来另一个参数是字段名称

   hive> select regexp_replace('Hello from zzz','zzz',concat('\\',"$15000"));
    +--------------------+--+
    |        _c0         |
    +--------------------+--+
    | Hello from $15000  |
    +--------------------+--+

<强>(或)

hive> select regexp_replace('Hello from zzz','zzz',concat('\\',field/column-name))