web-dev-qa-db-fra.com

comment remplacer les caractères dans la ruche?

J'ai une colonne de chaîne description dans une table Hive qui peut contenir des tabulations '\t', ces personnages gâchent cependant certaines vues lors de la connexion de Hive à une application externe. existe-t-il un moyen simple de se débarrasser de tous les caractères de tabulation dans cette colonne?. Je pourrais exécuter un simple programme python pour le faire, mais je veux trouver une meilleure solution pour cela.

22
user1745713

regexp_replace UDF exécute ma tâche. Vous trouverez ci-dessous la définition et l'utilisation du wiki Apache.

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

Cela renvoie la chaîne résultant du remplacement de toutes les sous-chaînes dans INITIAL_STRING Qui correspondent à la syntaxe d'expression régulière Java définie dans PATTERN par des instances de REPLACEMENT,

par exemple: regexp_replace("foobar", "oo|ar", "") renvoie fb

46
user2637464

SerDe personnalisé pourrait être un moyen de le faire. Ou vous pouvez utiliser une sorte de processus de médiation avec regex_replace:

create table tableB as 
select 
    columnA
    regexp_replace(description, '\\t', '') as description
from tableA
;
10
ferics2

Vous pouvez également utiliser translate (). Si le troisième argument est trop court, les caractères correspondants du deuxième argument sont supprimés. Contrairement à regexp_replace (), vous n'avez pas à vous soucier des caractères spéciaux. Code source .

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

3
iggy
select translate(description,'\\t','') from myTable;

Traduit la chaîne d'entrée en remplaçant les caractères présents dans la chaîne from par les caractères correspondants dans la chaîne to. Ceci est similaire à la fonction de traduction de PostgreSQL. Si l'un des paramètres de cette UDF est NULL, le résultat est également NULL. (Disponible à partir de Hive 0.10.0, pour les types de chaîne)

Prise en charge de Char/varchar ajoutée à partir de Hive 0.14.0

2
Guest

Il n'y a pas de fonction OOTB en ce moment qui le permet. Une façon d'y parvenir pourrait être d'écrire un InputFormat et/ou SerDe personnalisé qui le fera pour vous. Vous pourriez utiliser ce JIRA utile: https://issues.Apache.org/jira/browse/Hive-3751 . (mais pas directement lié à votre problème).

0
Tariq