30

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

4

5 回答 5

60

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

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

这将返回通过替换与INITIAL_STRING 定义的 java 正则表达式语法中的所有子字符串匹配的字符串,PATTERNREPLACEMENT

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

于 2013-08-07T08:58:13.023 回答
12

自定义 SerDe 可能是一种方法。或者您可以使用某种带有 regex_replace 的中介过程:

create table tableB as 
select 
    columnA
    regexp_replace(description, '\\t', '') as description
from tableA
;
于 2013-08-07T05:46:09.330 回答
8
select translate(description,'\\t','') from myTable;

通过将 from 字符串中存在的字符替换为 to 字符串中的相应字符来翻译输入字符串。这类似于 PostgreSQL 中的翻译功能。如果此 UDF 的任何参数为 NULL,则结果也为 NULL。(从 Hive 0.10.0 开始可用,用于字符串类型)

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

于 2018-05-01T18:21:10.957 回答
4

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

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

于 2015-03-23T21:28:15.553 回答
0

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

于 2013-08-06T21:40:37.807 回答