2016-07-06 15 views

Antwort

0

Wenn Ihre Hive-Version 0.14 und höher ist, können Sie CSV Serde (https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) verwenden. DEFAULT_QUOTE_CHARACTER für dieses SerDe ist "

Wenn Sie frühere Hive-Version haben, versuchen Sie diese serde manuell ist https://github.com/ogrodnek/csv-serde

Die Sache hinzufügen Serde Ihr Array als String zu behandeln. Das ist nicht sehr großes Problem, können Sie konvertieren Spalte in einem Array, wenn dabei wählen oder erstellen sie weitere Ansicht für die gleichen

Beispiel:..

DROP TABLE my_table; 
CREATE EXTERNAL TABLE my_table(col1 int , col2 string, col3 int) 
row format SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
stored as textfile; 

ich die Textdatei erstellt und es in der Tabelle Standort setze

Dateiinhalt:

23,"we,are",100 
23,"you,are",100 

nun die Daten erhalten:

hive> select col1, split(col2,",") as col2, col3 from my_table; 
OK 
23  ["we","are"] 100 
23  ["you","are"] 100 

Alternativ können Sie eine Ansicht erstellen:

hive> create view my_table_view as select col1, split(col2,",") as col2, col3 from my_table; 
OK 
Time taken: 0.427 seconds 
hive> select * from my_table_view; 
OK 
23  ["we","are"] 100 
23  ["you","are"] 100 
Time taken: 0.369 seconds, Fetched: 2 row(s) 

--Select Array-Elemente:

hive> select col1,col2[0] as col2_1, col2[1] as col2_2, col3 from my_table_view; 
OK 
23  we  are  100 
23  you  are  100 
Time taken: 0.09 seconds, Fetched: 2 row(s) 
+0

könnten Sie bitte Probe ddl für Tabelle und Laden von Daten geben ... –

+0

Fertig. Bitte sehen Sie meine verbesserte Antwort – leftjoin

+0

Hinweis, auch wenn Sie Tabelle als Array enthalten wird, wird sowieso serde es als Zeichenfolge behandeln. Dies funktioniert genauso: CREATE EXTERNAL TABLE my_table (col1 int, col2 array , col3 int) ... – leftjoin

Verwandte Themen