如何使用反映在HIVE中的替换字符串?

时间:2013-12-02 03:59:56

标签: hive

我想将一个字符串从“\ 7”替换为“\ 1”,我的输入文件如下:

a\7b\7c\7

我的另一个表FIELDS TERMINATED BY'\ 001',所以我必须将“\ 7”替换为“\ 1”。

我试过

select regexp_replace(value, "\\u0007", "\\u0001") from test_tbl where dbs="test" and dt=20131130;

但它不起作用。

我写了一个像这样的PHP脚本:

<?php
$strCmd = "hive -e 'select regexp_replace(value, \"\\u0007\", \"\1\") from test_tbl where dbs=\"test\" and dt=20131130;' > tmp";
exec($strCmd);

但它会返回一些错误。

2 个答案:

答案 0 :(得分:0)

要在配置单元中替换,您可以使用以下查询。

select regexp_replace(value, "\\u0007", "\\u0001") from test_tbl where dbs="test" and dt=20131130;

Hive中的Reflect用于调用静态函数。因此,String替换可能不起作用。在这里,我找到了您正在寻找的一些信息。 http://comments.gmane.org/gmane.comp.java.hadoop.hive.user/7712

您可以使用reflect2 UDF尝试patch

编辑:

如果您的输入的纯文本为'\ 7'而不是某些ascii字符,则下面的查询应该有效。

select regexp_replace(value, "\\\\7", "\\\\1") from test_tbl where dbs="test" and dt=20131130;

答案 1 :(得分:0)

我用“transform”方法解决了它,我编写了一个包含str_replace的简单php脚本。但我发现了另一个问题,请参阅here

谢谢所有人帮助过我。