如何在 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
- 将所有文件放入 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
;
JSONSerDe 可以解析所有复杂的结构,比使用json_tuple容易得多。 json中的简单属性按原样映射到列中所有在方括号[]中的是一个array<>,在{}中是一个struct<>或map<>,复杂类型可以嵌套。仔细阅读自述文件:https://github.com/rcongiu/Hive-JSON-Serde。有一个关于嵌套结构的部分和许多 CREATE TABLE.
的例子
如果您仍想使用 json_tuple,则使用单个 STRING 列创建 table,然后使用 json_tuple 进行解析。但这要困难得多。
所有 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
我在 HDFS 中有一堆 json 活泼的压缩文件。 它们是 HADOOP snappy 压缩的(不是 python,请参见其他 SO 问题) 并具有嵌套结构。
找不到将它们加载到的方法 进入HIVE(使用json_tuple)?
我能得到一些关于如何加载它们的信息吗ressources/hints
以前的参考资料(没有有效答案)
Hive: parsing JSON
- 将所有文件放入 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
;
JSONSerDe 可以解析所有复杂的结构,比使用json_tuple容易得多。 json中的简单属性按原样映射到列中所有在方括号[]中的是一个array<>,在{}中是一个struct<>或map<>,复杂类型可以嵌套。仔细阅读自述文件:https://github.com/rcongiu/Hive-JSON-Serde。有一个关于嵌套结构的部分和许多 CREATE TABLE.
的例子如果您仍想使用 json_tuple,则使用单个 STRING 列创建 table,然后使用 json_tuple 进行解析。但这要困难得多。
所有 JSON 记录应该在单行中(JSON 对象内没有换行符,以及 \r)。同样这里提到https://github.com/rcongiu/Hive-JSON-Serde
如果您的数据已分区(例如按日期)
在 Hive
中创建 tableCREATE 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