我有一个以JSON格式存储在Azure BLOB中的大量数据集。一些应用程序不断向其添加新数据。 BLOB组织在像
这样的分区中/dataset={name}/date={YYYY-MM-DD}/one_or_more_json_files
数据片段不遵循任何特定架构。 JSON字段名称不是一致的字母大小写。某些JSON行可能会被破坏。
有人可以建议一种很好的方法来查询这些数据,而无需事先定义架构。我想做点什么
select * from my_huge_json_dataset where dataset='mydataset' and date>'2015-04-01'
没有为表格定义显式模式
我首先考虑的是HIVE,但事实证明SerDe需要定义模式来创建表格。 json_tuple可能是一个答案,但如果遇到格式错误的json行,它会区分大小写并崩溃。
我也在考虑使用Apache Drill和Pig但没有经验,并希望得到一些指导。
答案 0 :(得分:0)
您可以使用Apache Drill,只需配置指向数据集文件夹的新存储:
{
"type": "file",
"enabled": true,
"connection": "file:///",
"config": null,
"workspaces": {
"root": {
"location": "/",
"writable": false,
"defaultInputFormat": null
},
"tmp": {
"location": "/tmp",
"writable": true,
"defaultInputFormat": null
}
},
"formats": {
"json": {
"type": "json",
"extensions": [
"json"
]
}
}
因此,如果您将Storage Plugin定义为'dfs',您可以从根目录查询而不使用ANSI SQL定义任何架构,就像:
SELECT * FROM dfs.dataset.date.`file.json`;
甚至使用dir0
在同一查询中按您的文件夹名称进行过滤。
我们建议您专门访问他们的文档网站Apache Drill documentation Querying JSON files