我description
在配置单元表中有一个字符串列,其中可能包含制表符'\t'
,但是当将配置单元连接到外部应用程序时,这些字符会弄乱一些视图。有没有一种简单的方法来摆脱该列中的所有制表符?我可以运行一个简单的 python 程序来做到这一点,但我想为此找到一个更好的解决方案。
5 回答
regexp_replace
UDF 执行我的任务。以下是 apache Wiki 的定义和用法。
regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT):
这将返回通过替换与INITIAL_STRING
定义的 java 正则表达式语法中的所有子字符串匹配的字符串,PATTERN
REPLACEMENT
例如:regexp_replace("foobar", "oo|ar", "")
返回fb
自定义 SerDe 可能是一种方法。或者您可以使用某种带有 regex_replace 的中介过程:
create table tableB as
select
columnA
regexp_replace(description, '\\t', '') as description
from tableA
;
select translate(description,'\\t','') from myTable;
通过将 from 字符串中存在的字符替换为 to 字符串中的相应字符来翻译输入字符串。这类似于 PostgreSQL 中的翻译功能。如果此 UDF 的任何参数为 NULL,则结果也为 NULL。(从 Hive 0.10.0 开始可用,用于字符串类型)
从 Hive 0.14.0 开始添加 Char/varchar 支持
您也可以使用 translate()。如果第三个参数太短,则从第二个参数中删除相应的字符。与 regexp_replace() 不同,您无需担心特殊字符。 源代码。
目前没有允许这样做的 OOTB 功能。实现这一目标的一种方法可能是编写一个自定义的 InputFormat 和/或 SerDe 来为您执行此操作。您可能对这个 JIRA 有用:https ://issues.apache.org/jira/browse/HIVE-3751 。(虽然与您的问题没有直接关系)。