如何替换蜂巢中的字符?

时间:2013-08-06 21:05:47

标签: hadoop hive

我在hive表中有一个字符串列description,其中可能包含制表符'\t',但这些字符在将hive连接到外部应用程序时会弄乱一些视图。 是否有一种简单的方法来摆脱该列中的所有制表符?我可以运行一个简单的python程序来完成它,但我想找到一个更好的解决方案。

5 个答案:

答案 0 :(得分:41)

regexp_replace UDF执行我的任务。以下是apache Wiki的定义和用法。

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT):

这将返回替换INITIAL_STRING中所有子字符串的字符串 与PATTERN中定义的java正则表达式语法匹配,其实例为REPLACEMENT

例如:regexp_replace("foobar", "oo|ar", "")会返回fb

答案 1 :(得分:8)

自定义SerDe可能是一种方法。或者您可以使用regex_replace进行某种调解过程:

create table tableB as 
select 
    columnA
    regexp_replace(description, '\\t', '') as description
from tableA
;

答案 2 :(得分:3)

您也可以使用translate()。如果第三个参数太短,则删除第二个参数中的相应字符。与regexp_replace()不同,您不必担心特殊字符。 Source code

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions

答案 3 :(得分:1)

select translate(description,'\\t','') from myTable;
  

通过将from字符串中的字符替换为to字符串中的相应字符来转换输入字符串。这类似于PostgreSQL中的translate函数。如果此UDF的任何参数为NULL,则结果也为NULL。 (从Hive 0.10.0开始,对于字符串类型)

     

从Hive 0.14.0开始添加Char / varchar支持

答案 4 :(得分:0)

目前没有OOTB功能允许这样做。实现这一目标的一种方法是编写一个自定义的InputFormat和/或SerDe,它将为您完成此任务。你可能对这个JIRA有用:https://issues.apache.org/jira/browse/HIVE-3751。 (虽然不直接与你的问题有关。)