Aunque se puede utilizar INSERT OVERWRITE
para obtener datos de Hive, es posible que no sea el mejor método para su caso particular. Primero déjeme explicar qué INSERT OVERWRITE
hace, luego describiré el método que uso para obtener archivos tsv de las tablas de Hive.
Según el manual , su consulta almacenará los datos en un directorio en HDFS. El formato no será csv.
Los datos escritos en el sistema de archivos se serializan como texto con columnas separadas por ^ A y filas separadas por líneas nuevas. Si alguna de las columnas no es de tipo primitivo, esas columnas se serializan en formato JSON.
Una ligera modificación (agregando la LOCAL
palabra clave) almacenará los datos en un directorio local.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
Cuando ejecuto una consulta similar, así es como se ve el resultado.
[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
Personalmente, generalmente ejecuto mi consulta directamente a través de Hive en la línea de comando para este tipo de cosas, y la canalizo al archivo local de esta manera:
hive -e 'select books from table' > /home/lvermeer/temp.tsv
Eso me da un archivo separado por tabulaciones que puedo usar. Espero que también te sea útil.
Basado en este parche-3682 , sospecho que hay una mejor solución disponible cuando se usa Hive 0.11, pero no puedo probarlo por mí mismo. La nueva sintaxis debería permitir lo siguiente.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;
Espero que ayude.