2016-08-04 57 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/文檔/如何對分區數據/) –