Como carregar json snappy compactado em HIVE
Eu tenho um monte de arquivos compactados rápidos JSON no HDFS. Eles são HADOOP compactados rapidamente (não python, cf outras questões SO) e têm estruturas aninhadas.
Não foi possível encontrar um método para carregá-los no HIVE (usando json_tuple)?
Posso obter alguns recursos / dicas sobre como carregá-los
Referências anteriores (não tem respostas válidas)
pyspark como carregar arquivo rápido compactado
Hive: analisando JSON
Respostas
- Coloque todos os arquivos na pasta HDFS e crie uma tabela externa em cima dela. Se os arquivos tiverem nomes como .snappy, o Hive os reconhecerá automaticamente, embora você possa 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 pode analisar todas as estruturas complexas, é muito mais fácil do que usar json_tuple. Atributos simples em json são mapeados para colunas como estão Todos nos colchetes [] é uma matriz <>, em {} é uma estrutura <> ou mapa <>, tipos complexos podem ser aninhados. Leia com atenção o Leiame:https://github.com/rcongiu/Hive-JSON-Serde. Há uma seção sobre estruturas aninhadas e muitos exemplos de CREATE TABLE.
Se você ainda quiser usar json_tuple, crie uma tabela com uma coluna STRING única e analise usando json_tuple. Mas é muito mais difícil.
Todos os registros JSON devem estar em uma única linha (sem novas linhas dentro de objetos JSON, assim como \ r). O mesmo é mencionado aquihttps://github.com/rcongiu/Hive-JSON-Serde
Se seus dados forem particionados (por exemplo, por data)
Crie a tabela no 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 a partição (antes da recuperação, a mesa parece estar vazia)
MSCK REPAIR TABLE database.table