我在hive表中有一个字符串列description
,其中可能包含制表符'\t'
,但这些字符在将hive连接到外部应用程序时会弄乱一些视图。
是否有一种简单的方法来摆脱该列中的所有制表符?我可以运行一个简单的python程序来完成它,但我想找到一个更好的解决方案。
答案 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
答案 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。 (虽然不直接与你的问题有关。)