Как заменить персонажей в улье?

У меня есть строковый столбец 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. (не связанный непосредственно с вашей проблемой, хотя).