Chociaż można użyć INSERT OVERWRITE
do pobrania danych z Hive, może to nie być najlepsza metoda w Twoim konkretnym przypadku. Najpierw wyjaśnię, co to INSERT OVERWRITE
robi, a następnie opiszę metodę, której używam do pobierania plików tsv z tabel Hive.
Zgodnie z instrukcją , twoje zapytanie zapisze dane w katalogu w HDFS. Format nie będzie csv.
Dane zapisywane w systemie plików są serializowane jako tekst z kolumnami oddzielonymi ^ A i wierszami oddzielonymi znakami nowej linii. Jeśli którakolwiek z kolumn nie jest typu pierwotnego, te kolumny są serializowane do formatu JSON.
Niewielka modyfikacja (dodanie LOCAL
słowa kluczowego) spowoduje zapisanie danych w katalogu lokalnym.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
Kiedy uruchamiam podobne zapytanie, oto jak wygląda wynik.
[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE
Osobiście zwykle uruchamiam zapytanie bezpośrednio przez Hive w wierszu poleceń i przesyłam je do lokalnego pliku w następujący sposób:
hive -e 'select books from table' > /home/lvermeer/temp.tsv
To daje mi plik rozdzielany tabulatorami, którego mogę użyć. Mam nadzieję, że ci się to przyda.
W oparciu o tę poprawkę-3682 podejrzewam, że lepsze rozwiązanie jest dostępne podczas korzystania z Hive 0.11, ale nie jestem w stanie tego samodzielnie przetestować. Nowa składnia powinna umożliwiać następujące czynności.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;
Mam nadzieję, że to pomoże.