Как заменить персонажей в улье?
У меня есть строковый столбец description
в таблице улей, который может содержать символы табуляции '\t'
, однако эти символы используют некоторые представления при подключении улья к внешнему приложению.
есть ли простой способ избавиться от всех символов табуляции в этом столбце?. Я мог бы запустить простую программу python для этого, но я хочу найти лучшее решение для этого.
Ответы
Ответ 1
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
Ответ 2
Пользовательский SerDe может быть способом сделать это. Или вы можете использовать какой-то процесс посредничества с regex_replace:
create table tableB as
select
columnA
regexp_replace(description, '\\t', '') as description
from tableA
;
Ответ 3
Вы также можете использовать translate(). Если третий аргумент слишком короткий, соответствующие символы из второго аргумента удаляются. В отличие от regexp_replace() вам не нужно беспокоиться о специальных символах.
Исходный код.
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions
Ответ 4
В данный момент нет функции OOTB, которая позволяет это. Одним из способов достижения этого может быть создание пользовательского InputFormat и/или SerDe, который сделает это за вас. Вы можете использовать эту JIRA: https://issues.apache.org/jira/browse/HIVE-3751. (не связанный непосредственно с вашей проблемой, хотя).