2016-08-04 16 views
-1

大量のデータセットがAzure BLOBにJSON形式で格納されています。一部のアプリでは常に新しいデータが追加されています。 BLOBは、大規模なJSONデータセットへのアドホッククエリ

のように構成されています。
/dataset={name}/date={YYYY-MM-DD}/one_or_more_json_files 

データは特定のスキーマに従いません。 JSONのフィールド名は一貫した文字ではありません。一部のJSON行が壊れる可能性があります。

スキーマを事前に定義しなくても、このデータをクエリする良い方法がありますか?私は私の最初の考慮事項は、HIVEたテーブル

のための明示的なスキーマを定義せずに

select * from my_huge_json_dataset where dataset='mydataset' and date>'2015-04-01' 

ような何かをしたいと思いますが、それはSerDeスキーマを必要とする表を作成するために定義することが判明しました。 json_tupleは答えになる可能性がありますが、大文字と小文字が区別され、誤ったjson行が見つかるとクラッシュします。

私はApache DrillとPigも検討していますが、経験はなく、いくつかのガイダンスが必要です。

答えて

0

、あなただけのデータセットフォルダを指す新しいストレージを構成する必要がありますが、Apacheのドリルを使用することができます:あなたはあなたから照会でき、たとえば「DFS」としてそのストレージのプラグインを定義した場合

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

ので、

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

あるいはdir0を使用して、同じクエリで自分のフォルダ名でフィルタリング:同じように、ANSI SQLを使用して、任意のスキーマを定義せずにルートディレクトリ。

私はそれだけで単一のファイルに分割またはクエリをサポートしています特別Querying JSON files

+0

あなたのケースで自分のドキュメントサイトApache Drill documentationをご覧になることをお勧め? – irriss

+0

@Ruslanはい1つのファイルまたはディレクトリを問い合わせることができます(すべてのファイルがjson構造に似ていると仮定します)。データをパーティション分割することでクエリを最適化することもできます(この例を参照)(https://drill.apache.org/ docs/how-to-partition-data /) –

関連する問題