hadoop - summoners - hive sql
¿Cómo cargar datos CSV entre comillas dobles y separados por tabulaciones en la tabla de HIVE? (5)
"Hive ahora incluye un OpenCSVSerde que analizará correctamente los campos citados sin agregar archivos jar adicionales o propensos a errores y regex lenta".
SERIE DE FORMATO DE FILA ''org.apache.hadoop.hive.serde2.OpenCSVSerde''
fuente = Ben Doerr
Estoy tratando de cargar datos de un archivo csv en el que los valores están encerrados entre comillas dobles "" y separados por tabulaciones ''/ t''. Pero cuando intento cargar eso en la sección, no se produce ningún error y los datos se cargan sin ningún error, pero creo que todos los datos se cargan en una sola columna y la mayoría de los valores que se muestran como NULL. A continuación, se encuentra mi declaración de creación de tabla.
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;
Muestra de archivo de entrada;
"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"
y la declaración de carga para insertar datos en la tabla hive.
LOAD DATA INPATH ''/user/example.csv'' OVERWRITE INTO TABLE example
¿Cuál podría ser el problema y cómo puedo ignorar el encabezado del archivo? y si elimino ESCAPED BY ''"'' de la sentencia create, se carga en las columnas respectivas, pero todos los valores están entre comillas dobles. ¿Cómo puedo eliminar las comillas dobles de los valores e ignorar el encabezado del archivo?
Ahora puede usar OpenCSVSerde que le permite definir el carácter separador y escapar fácilmente de comillas dobles:
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/'';
No desea utilizar escaped by
, eso es para caracteres de escape, no para citar caracteres. No creo que Hive tenga soporte para comillas. Es posible que desee echar un vistazo a esta csv serde que acepta una propiedad quotechar.
Además, si tiene HUE, puede utilizar la aplicación web metastore manager para cargar el CSV, esto se ocupará de la fila del encabezado, los tipos de datos de la columna, etc.
Puede usar una versión CSV "csv-serde-1.1.2.jar" para cargar el archivo sin comillas dobles.
enlace de descarga:
http://ogrodnek.github.io/csv-serde/
y la declaración de crear tabla como
CREATE TABLE <table_name> (col_name_1 type1, col_name_2 type2, ...) row format serde ''com.bizo.hive.serde.csv.CSVSerde'';
Puede eliminar el encabezado con la siguiente propiedad en el cuadro de creación de la tabla
tblproperties ("skip.header.line.count"="1");
Usa CSV Serde para crear la tabla. He creado una tabla en la colmena de la siguiente manera, y funciona a la perfección.
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>'';