2016-08-04 21 views
-1

Ich habe einen massiven Datensatz in Azure BLOB im JSON-Format gespeichert. Einige Apps fügen ständig neue Daten hinzu. BLOBs sind in Partitionen organisiert wieAd-hoc-Abfragen an einen massiven JSON-Datensatz

/dataset={name}/date={YYYY-MM-DD}/one_or_more_json_files 

Datenstücke folgen keinem bestimmten Schema. JSON-Feldnamen sind nicht in konsistentem Groß-/Kleinbuchstaben. Einige JSON-Zeilen können unterbrochen werden.

Könnte jemand einen guten Weg empfehlen, diese Daten abzufragen, ohne vorher ein Schema zu definieren. Ich möchte etwas tun, wie

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

ohne explizite Schema für die Tabelle zu definieren

Meine erste Überlegung war HIVE aber es stellt sich heraus, dass SerDe Schema definiert werden muss, um eine Tabelle zu erstellen. json_tuple könnte eine Antwort sein, aber es ist die Groß- und Kleinschreibung und stürzt ab, wenn die JS-Zeile falsch formatiert ist.

Ich denke auch über Apache Drill und Pig, aber habe keine Erfahrung mit ihnen und möchte etwas Anleitung.

Antwort

0

Sie Apache Drill verwenden könnten, müssen Sie nur einen neuen Speicher zeigen auf Dataset Ordner konfigurieren müssen:

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

Also, wenn Sie als ‚dfs‘, dass Storage-Plugin definieren zum Beispiel aus der Abfrage könntest Stammverzeichnis ohne Schema mit ANSI SQL definiert, gerade wie:

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

oder auch filtern, indem Sie Ihre Ordnernamen in der gleichen Abfrage mit dir0.

Ich möchte Sie ermutigen ihre Dokumentation Website Apache Drill documentation in Ihrem Fall besuchen speziell Querying JSON files

+0

Ist es Partitionierung oder Abfragen nur einzelne Datei unterstützen? – irriss

+0

@Ruslan Ja, Sie können eine einzelne Datei oder ein Verzeichnis abfragen (vorausgesetzt, dass alle Dateien eine sehr ähnliche json-Struktur haben) und Sie können Abfragen auch durch Partitionieren von Daten optimieren [siehe dieses Beispiel] (https://drill.apache.org/ docs/how-to-partition-data /) –