如何在 HIVE 中加载压缩的 json snappy

How to load json snappy compressed in HIVE

我在 HDFS 中有一堆 json 活泼的压缩文件。 它们是 HADOOP snappy 压缩的(不是 python,请参见其他 SO 问题) 并具有嵌套结构。

找不到将它们加载到的方法 进入HIVE(使用json_tuple)?

我能得到一些关于如何加载它们的信息吗ressources/hints

以前的参考资料(没有有效答案)

Hive: parsing JSON

  1. 将所有文件放入 HDFS 文件夹并在其上创建外部 table。如果文件的名称类似于 .snappy,Hive 将自动识别它们。您可以指定 SNAPPY 输出格式以写入 table:

set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
 


CREATE EXTERNAL TABLE mydirectory_tbl(
  id   string,
  name string
)
ROW FORMAT SERDE
  'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/mydir' --this is HDFS/S3 location
;
  1. JSONSerDe 可以解析所有复杂的结构,比使用json_tuple容易得多。 json中的简单属性按原样映射到列中所有在方括号[]中的是一个array<>,在{}中是一个struct<>或map<>,复杂类型可以嵌套。仔细阅读自述文件:https://github.com/rcongiu/Hive-JSON-Serde。有一个关于嵌套结构的部分和许多 CREATE TABLE.

    的例子
  2. 如果您仍想使用 json_tuple,则使用单个 STRING 列创建 table,然后使用 json_tuple 进行解析。但这要困难得多。

  3. 所有 JSON 记录应该在单行中(JSON 对象内没有换行符,以及 \r)。同样这里提到https://github.com/rcongiu/Hive-JSON-Serde

如果您的数据已分区(例如按日期)

在 Hive

中创建 table
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'

恢复分区(恢复前,table好像是空的)

MSCK REPAIR TABLE database.table