separado punto por para guardar delimitador delimitado convertir configurar como comas coma cambiar archivos abrir hadoop hbase hive hdfs delimiter

hadoop - guardar - convertir excel a csv separado por punto y coma



Colmenar CSV de carga con comas en campos cotizados (5)

Estoy intentando cargar un archivo CSV en una tabla Hive así:

CREATE TABLE mytable ( num1 INT, text1 STRING, num2 INT, text2 STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ","; LOAD DATA LOCAL INPATH ''/data.csv'' OVERWRITE INTO TABLE mytable;


El csv está delimitado por una coma (,) y se ve así:

1, "some text, with comma in it", 123, "more text"

Esto devolverá datos corruptos ya que hay un '','' en la primera cadena.
¿Hay alguna manera de establecer un delimitador de texto o hacer que Hive ignore el '','' en cadenas?

No puedo cambiar el delimitador de la csv ya que se extrae de una fuente externa.



Agregue una barra invertida en FIELDS TERMINATED BY ''/;''

Por ejemplo:

CREATE TABLE demo_table_1_csv COMMENT ''my_csv_table 1'' ROW FORMAT DELIMITED FIELDS TERMINATED BY ''/;'' LINES TERMINATED BY ''/n'' STORED AS TEXTFILE LOCATION ''your_hdfs_path'' AS select a.tran_uuid,a.cust_id,a.risk_flag,a.lookback_start_date,a.lookback_end_date,b.scn_name,b.alerted_risk_category, CASE WHEN (b.activity_id is not null ) THEN 1 ELSE 0 END as Alert_Flag FROM scn1_rcc1_agg as a LEFT OUTER JOIN scenario_activity_alert as b ON a.tran_uuid = b.activity_id;

Lo probé y funcionó.


El problema es que Hive no maneja los textos citados. Necesita preprocesar los datos cambiando el delimitador entre los campos (p. Ej .: con un trabajo de Hadoop-streaming) o también puede intentar usar un SerDe de CSV personalizado que use OpenCSV para analizar los archivos.


Si puede volver a crear o analizar sus datos de entrada, puede especificar un carácter de escape para CREATE TABLE:

ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY ''//';

Aceptará esta línea como 4 campos

1,some text/, with comma in it,123,more text


mantenga el delimitador entre comillas simples, funcionará.

ROW FORMAT DELIMITED FIELDS TERMINATED BY '','' LINES TERMINATED BY ''/n'';

Esto funcionará