Cómo cargar json snappy comprimido en HIVE
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
- 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 especificar
TBLPROPERTIES ("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")
;
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.
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.
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
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