2015-06-04 13 views
16

Sto provando a caricare i dati da un file csv in cui i valori sono racchiusi tra virgolette "" "e tab separati" \ t ". Ma quando provo a caricarlo in hive non viene generato alcun errore e i dati sono . caricato senza alcun errore, ma penso che tutti i dati sono sempre caricato in una singola colonna e la maggior parte dei valori che mostrando come NULL di seguito è la mia istruzione CREATE tABLECome caricare i dati CSV con racchiusi tra virgolette e separati da tabulazione nella tabella HIVE?

CREATE TABLE example 
(
organization STRING, 
order BIGINT, 
created_on TIMESTAMP, 
issue_date TIMESTAMP, 
qty INT 
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
ESCAPED BY '"' 
STORED AS TEXTFILE; 

campione del file di input, -.

"Organization" "Order" "Created on" "issue_date" "qty" 
"GB" "111223" "2015/02/06 00:00:00" "2015/05/15 00:00:00" "5" 
"UK" "1110" "2015/05/06 00:00:00" "2015/06/1 00:00:00" "51" 

e Carica istruzione per inserire dati nella tabella alveare.

LOAD DATA INPATH '/user/example.csv' OVERWRITE INTO TABLE example 

Quale potrebbe essere il problema e come ignorare l'intestazione del file. e se tolgo escape dal '"' da creare dichiarazione suo carico in rispettive colonne, ma tutti i valori sono racchiusi tra virgolette. Come posso rimuovere le virgolette dai valori e ignoro intestazione del file?

+0

Hai in esecuzione HUE? In questo caso potresti fare la webapp del gestore metastore. – maxymoo

risposta

0

È don 't voglio usare escaped by, che è per i caratteri di fuga, non citare caratteri.Non credo che Hive abbia effettivamente supporto per i caratteri di citazione.Vuoi dare un'occhiata a this csv serde che accetta una proprietà quotechar

Anche se hai HUE, puoi utilizzare la webapp del gestore metastore per caricare il CSV, che si occuperà della riga di intestazione, dei tipi di dati della colonna e così via.

+0

grazie per la risposta rapida ma se rimuovo ESCAPED BY '"' dall'istruzione create il suo caricamento nelle rispettive colonne ma tutti i valori sono racchiusi tra virgolette – Sharad

+0

sì che è sfortunatamente vero. Puoi usare il csv serde per aggirare quel problema, oppure potresti anche fare 'replace (column, '"', '') 'quando selezioni da ciascuna delle tue colonne per rimuovere le virgolette. – maxymoo

+1

dovrebbe essere 'regexp_replace (column, '"', '') ', vedere https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions –

-2

È possibile utilizzare un CSV serde "csv-serde-1.1.2.jar" per caricare il file senza virgolette.

link per il download:

http://ogrodnek.github.io/csv-serde/

e l'istruzione CREATE TABLE come

CREATE TABLE <table_name> (col_name_1 type1, col_name_2 type2, ...) row format serde 'com.bizo.hive.serde.csv.CSVSerde'; 

è possibile rimuovere l'intestazione con la seguente proprietà nel creare tabella di stmt

tblproperties ("skip.header.line.count"="1"); 
+0

Questo serde è ora costruito nel – Marcin

+0

@Marcin re: "questo serde è costruito ora" ... è per questo che il link csv-serde-1.1.2-0.11.0-all.jar non funziona più dalla sorgente (https://github.com)/ogrodnek/csv-serde)? Come faccio a far funzionare il SerDe in "Metastore Tables" di Hue ora? –

-1

Utilizzare CSV Serde per creare il tavolo. Ho creato un tavolo nell'alveare come segue, e funziona come un incantesimo.

CREATE EXTERNAL TABLE IF NOT EXISTS myTable (
id STRING, 
url STRING, 
name STRING 
) 
row format serde 'com.bizo.hive.serde.csv.CSVSerde' 
with serdeproperties ("separatorChar" = "\t") 
LOCATION '<folder location>'; 
+0

Per tutti i neofiti là fuori (me compreso), nel caso non si sappia "SerDe" sta per Serializer/Deserializer. Ecco alcune informazioni molto utili: https://cwiki.apache.org/confluence/display/Hive/SerDe –

0

"Hive ora include un OpenCSVSerde che correttamente analizzare quei campi citati senza l'aggiunta di vasi aggiuntivi o errori regex prona e lento."

ROW FORMATO SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'

source = Ben Doerr

How to handle fields enclosed within quotes(CSV) in importing data from S3 into DynamoDB using EMR/Hive

+0

Per tutti i neofiti là fuori (me compreso), nel caso non lo sapessi "SerDe" sta per Serializer/Deserializer. Ecco alcune informazioni molto utili: https://cwiki.apache.org/confluence/display/Hive/SerDe –

14

È ora possibile utilizzare OpenCSVSerde che consente di definire il carattere separatore e facilmente sfuggire alle doppie virgolette circostanti:

CREATE EXTERNAL TABLE example (
    organization STRING, 
    order BIGINT, 
    created_on TIMESTAMP, 
    issue_date TIMESTAMP, 
    qty INT 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES (
    "separatorChar" = "\t", 
    "quoteChar"  = "\"" 
) 
LOCATION '/your/folder/location/'; 
+1

"Questo SerDe considera tutte le colonne come di tipo String. Anche se si crea una tabella con tipi di colonna non stringa usando questo SerDe, l'output DESCRIBE TABLE mostrerà il tipo di colonna di stringhe.Le informazioni sul tipo vengono recuperate da SerDe. Per convertire le colonne nel tipo desiderato in una tabella, puoi creare una vista sulla tabella che esegue il CAST sul tipo desiderato. " C'è un modo alternativo in cui non devo creare una vista successiva? – zzztimbo

+0

Per tutti i neofiti là fuori (me compreso), nel caso non si sappia "SerDe" sta per Serializer/Deserializer. Ecco alcune informazioni molto utili: https://cwiki.apache.org/confluence/display/Hive/SerDe –

+0

Upvote :) La risposta sarà completa se aggiungi tblproperties ("skip.header.line.count" = "1") prima dei due punti. –

Problemi correlati