2013-08-06 14 views
16

Ho una colonna di stringhe description in una tabella alveare che può contenere caratteri di tabulazione '\t', tuttavia questi caratteri creano dei problemi durante la connessione di hive a un'applicazione esterna. c'è un modo semplice per sbarazzarsi di tutti i caratteri di tabulazione in quella colonna ?. Potrei eseguire un semplice programma python per farlo, ma voglio trovare una soluzione migliore per questo.come sostituire i caratteri nell'alveare?

risposta

32

regexp_replace UDF esegue il mio compito. Di seguito la definizione e l'utilizzo da Wiki di apache.

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

Questo restituisce la stringa risultante dalla sostituzione di tutte le sottostringhe in INITIAL_STRING che corrispondono al java normale sintassi delle espressioni definite PATTERN con casi di REPLACEMENT,

ad esempio: regexp_replace("foobar", "oo|ar", "") rendimenti fb

0

Al momento non è presente la funzione OOTB che consente questo. Un modo per ottenere ciò potrebbe essere quello di scrivere un InputFormat e/o un SerDe personalizzati che faranno questo per te. Potrebbe essere utile questa JIRA: https://issues.apache.org/jira/browse/HIVE-3751. (non correlato direttamente al tuo problema).

7

SerDe personalizzato potrebbe essere un modo per farlo. Oppure si potrebbe utilizzare una sorta di processo di mediazione con regex_replace:

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

questo dovrebbe essere REGEXP_REPLACE non regex_replace, sembra di essere al lavoro finora – user1745713

Problemi correlati