Cómo cargar json snappy comprimido en HIVE

Oct 14 2020

Tengo un montón de archivos json comprimidos rápidos en HDFS. Son HADOOP comprimidos con rapidez (no python, cf otras preguntas SO) y tienen estructuras anidadas.

¿No pudo encontrar un método para cargarlos en HIVE (usando json_tuple)?

¿Puedo obtener algunos recursos / sugerencias sobre cómo cargarlos?

Referencias previas (no tiene respuestas válidas)

pyspark cómo cargar un archivo rápido comprimido

Hive: analizar JSON

Respuestas

4 leftjoin Oct 21 2020 at 22:55
  1. Coloque todos los archivos en la carpeta HDFS y cree una tabla externa encima. Si los archivos tienen nombres como .snappy, Hive los reconocerá automáticamente, aunque puede especificarTBLPROPERTIES ("orc.compress"="SNAPPY")
CREATE EXTERNAL TABLE mydirectory_tbl(
  id   string,
  name string
)
ROW FORMAT SERDE
  'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/mydir' --this is HDFS/S3 location
TBLPROPERTIES ("orc.compress"="SNAPPY")
;
  1. JSONSerDe puede analizar todas las estructuras complejas, es mucho más fácil que usar json_tuple. Los atributos simples en json se asignan a columnas como está. Todo entre corchetes [] es una matriz <>, en {} es una estructura <> o mapa <>, los tipos complejos se pueden anidar. Lea atentamente el archivo Léame:https://github.com/rcongiu/Hive-JSON-Serde. Hay una sección sobre estructuras anidadas y muchos ejemplos de CREATE TABLE.

  2. Si aún desea usar json_tuple, cree una tabla con una sola columna STRING y luego analice usando json_tuple. Pero es mucho más difícil.

  3. Todos los registros JSON deben estar en una sola línea (sin nuevas líneas dentro de los objetos JSON, así como \ r). Lo mismo se menciona aquíhttps://github.com/rcongiu/Hive-JSON-Serde

2 FrançoisB. Oct 27 2020 at 07:03

Si sus datos están particionados (por ejemplo, por fecha)

Crea la tabla en Hive

CREATE EXTERNAL TABLE IF NOT EXISTS database.table (
  filename STRING,
  cnt BIGINT,
  size DOUBLE
) PARTITIONED BY (   \`date\` STRING ) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'  
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'folder/path/in/hdfs'

Recupere la partición (antes de la recuperación, la tabla parece estar vacía)

MSCK REPAIR TABLE database.table