2016-08-04 52 views
-1

我有一个以JSON格式存储在Azure BLOB中的海量数据集。有些应用程序不断向其添加新数据。 BLOB被组织在分区中,如对大量JSON数据集的临时查询

/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

你可以使用Apache钻,你只需要配置新的存储指向你的数据集文件夹:

{ 
    "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" 
     ] 
    } 
} 

所以,如果你定义的存储插件为“DFS”例如,你可以从查询没有定义使用ANSI SQL任何模式的根目录,就像:

SELECT * FROM dfs.dataset.date.`file.json`; 

,甚至你的文件夹名使用dir0相同的查询过滤器。

我鼓励你去访问他们的文件网站Apache Drill documentation你的情况特殊Querying JSON files

+0

它支持分区或疑问,只有单一的文件? – irriss

+0

@Ruslan是的,您可以查询单个文件或目录(假设所有文件具有非常类似的json结构),并且还可以通过对数据进行分区来优化查询[请参阅此示例](https://drill.apache.org/文档/如何对分区数据/) –