hadoop - summoners - Carga de datos de un archivo.txt a la tabla almacenada como ORC en Hive
hive meaning (5)
Tengo un archivo de datos que está en formato .txt
. Estoy usando el archivo para cargar datos en tablas de Hive. Cuando cargo el archivo en una tabla como
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;
los datos se cargan correctamente usando
LOAD DATA LOCAL INPATH ''/home/user/test_details.txt'' INTO TABLE test_details_txt;
y puedo ejecutar un SELECT * FROM test_details_txt;
sobre la mesa en Colmena.
Sin embargo, si intento cargar los datos en una tabla que es
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC;
Recibo el siguiente error al intentar ejecutar un SELECT:
Failed with exception java.io.IOException:java.io.IOException: Malformed ORC file hdfs://master:6000/user/hive/warehouse/test.db/transaction_details/test_details.txt. Invalid postscript.
Al cargar los datos utilizando la instrucción LOAD anterior, no recibo ningún error o excepción.
¿Hay algo más que deba hacerse al usar el comando LOAD DATA IN PATH..
para almacenar datos en una tabla ORC?
Dado que Hive no realiza ninguna transformación a nuestros datos de entrada, el formato debe ser el mismo: o bien el archivo debe estar en formato ORC, o podemos cargar datos de un archivo de texto en una tabla de texto en Hive.
El archivo ORC es un formato de archivo binario, por lo que no puede cargar archivos de texto directamente en tablas ORC. ORC significa Columna de fila optimizada, lo que significa que puede almacenar datos de forma optimizada en comparación con otros formatos de archivo. ORC reduce el tamaño de los datos originales hasta en un 75%. Como resultado, la velocidad de procesamiento de datos también aumenta. ORC muestra un mejor rendimiento que los formatos de archivo de Texto, Secuencia y RC. Un archivo ORC contiene datos de filas en grupos llamados como Stripes junto con un pie de página de archivo. El formato ORC mejora el rendimiento cuando Hive está procesando los datos.
Primero necesita crear una tabla normal como archivo de texto, cargar sus datos en la tabla de archivo de texto y luego puede usar la opción sobreescribir insertar para escribir sus datos en el archivo ORC.
create table table_name1 (schema of the table) row format delimited by '','' | stored as TEXTFILE
create table table_name2 (schema of the table) row format delimited by '','' | stored as ORC
load data local inpath ‘path of your file’ into table table_name1;(loading data from a local system)
INSERT OVERWRITE TABLE table_name2 SELECT * FROM table_name1;
Ahora todos sus datos se almacenarán en un archivo ORC. El procedimiento similar se aplica a todos los formatos de archivos binarios, es decir, archivos de secuencia, archivos RC y archivos de Parquet en Hive.
Puede consultar el enlace a continuación para obtener más detalles.
Pasos para cargar datos en el formato de archivo ORC en la colmena
1.Crea una tabla normal usando el formato de archivo de texto
2. Carga los datos normalmente en esta tabla
3.Cree una tabla con el esquema de los resultados esperados de su tabla de colmena normal usando como archivo guardado
4.Inserte la consulta de sobrescritura para copiar los datos de la tabla textFile a la tabla orcfile
Consulte el blog para obtener información sobre cómo cargar datos en todos los formatos de archivo en la colmena
Pasos:
- Primero crea una tabla usando almacenado como TEXTFILE (es decir, por defecto o en qué formato quieres crear la tabla)
- Cargar datos en la tabla de texto.
- Crear tabla utilizando almacenado como ORC como select * from text_table;
- Seleccione * de la tabla orc.
Ejemplo:
CREATE TABLE text_table(line STRING);
LOAD DATA ''path_of_file'' OVERWRITE INTO text_table;
CREATE TABLE orc_table STORED AS ORC AS SELECT * FROM text_table;
SELECT * FROM orc_table; /*(it can not be read)*/
LOAD DATA
simplemente copia los archivos para colgar archivos de datos. Hive no realiza ninguna transformación mientras carga datos en tablas.
Entonces, en este caso, el archivo de entrada /home/user/test_details.txt
debe estar en formato ORC si lo está cargando en una tabla ORC.
Una solución posible es crear una tabla temporal con STORED AS TEXT
, luego LOAD DATA
en él, y luego copiar los datos de esta tabla a la tabla ORC.
Aquí hay un ejemplo:
CREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;
CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;
-- Load into Text table
LOAD DATA LOCAL INPATH ''/home/user/test_details.txt'' INTO TABLE test_details_txt;
-- Copy to ORC table
INSERT INTO TABLE test_details_orc SELECT * FROM test_details_txt;