对大量JSON数据集的即席查询

时间:2016-08-04 03:53:27

标签: json hadoop hive apache-pig apache-drill

我有一个以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但没有经验,并希望得到一些指导。

1 个答案:

答案 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