JSON-Daten abfragen - Amazon Athena

JSON-Daten abfragen

Mit Amazon Athena können Sie JSON-kodierte Werte abfragen, Daten aus verschachtelten JSON-Daten extrahieren, nach Werten suchen und die Länge und Größe von JSON-Arrays ermitteln. Betrachten Sie die folgenden Beispielplanetendaten, um die Grundlagen der Abfrage von JSON-Daten in Athena zu erlernen:

{name:"Mercury",distanceFromSun:0.39,orbitalPeriod:0.24,dayLength:58.65} {name:"Venus",distanceFromSun:0.72,orbitalPeriod:0.62,dayLength:243.02} {name:"Earth",distanceFromSun:1.00,orbitalPeriod:1.00,dayLength:1.00} {name:"Mars",distanceFromSun:1.52,orbitalPeriod:1.88,dayLength:1.03}

Beachten Sie, dass jeder Datensatz (im Grunde jede Zeile in der Tabelle) in einer separaten Zeile steht. Um diese JSON-Daten abzufragen, können Sie eine CREATE TABLE-Anweisung wie die folgende verwenden:

CREATE EXTERNAL TABLE `planets_json`( `name` string, `distancefromsun` double, `orbitalperiod` double, `daylength` double) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/json/'

Verwenden Sie eine einfache SELECT-Anweisung wie das folgende Beispiel, um die Daten abzufragen.

SELECT * FROM planets_json

Die Abfrageergebnisse sehen wie folgt aus.

# Name distancefromsun orbitalperiod daylength
1 Merkur 0,39 0,24 58,65
2 Venus 0,72 0,62 243,02
3 Erde 1,0 1,0 1,0
4 Mars 1,52 1,88 1,03

Beachten Sie, wie die CREATE TABLE-Anweisung OpenX JSON SerDe verwendet, wodurch jeder JSON-Datensatz in einer separaten Zeile stehen muss. Wenn das JSON in einem hübschen Druckformat vorliegt oder wenn alle Datensätze in einer einzigen Zeile stehen, werden die Daten nicht korrekt gelesen.

Um JSON-Daten abzufragen, die in einem hübschen Druckformat vorliegen, können Sie Amazon Ion Hive SerDe anstelle des OpenX JSON SerDe verwenden. Betrachten Sie die vorherigen Daten, die im hübschen Druckformat gespeichert wurden:

{ name:"Mercury", distanceFromSun:0.39, orbitalPeriod:0.24, dayLength:58.65 } { name:"Venus", distanceFromSun:0.72, orbitalPeriod:0.62, dayLength:243.02 } { name:"Earth", distanceFromSun:1.00, orbitalPeriod:1.00, dayLength:1.00 } { name:"Mars", distanceFromSun:1.52, orbitalPeriod:1.88, dayLength:1.03 }

Um diese Daten ohne Neuformatierung abzufragen, können Sie eine CREATE TABLE-Anweisung wie die folgende verwenden. Beachten Sie, dass die Anweisung anstelle der Angabe des OpenX JSON-SerDe STORED AS ION spezifiziert.

CREATE EXTERNAL TABLE `planets_ion`( `name` string, `distancefromsun` DECIMAL(10, 2), `orbitalperiod` DECIMAL(10, 2), `daylength` DECIMAL(10, 2)) STORED AS ION LOCATION 's3://amzn-s3-demo-bucket/json-ion/'

Die Abfrage SELECT * FROM planets_ion liefert dieselben Ergebnisse wie zuvor. Weitere Informationen zum Erstellen von Tabellen auf diese Weise mit dem Amazon Ion Hive SerDe finden Sie unter Amazon-Ion-Tabellen erstellen.

Das vorherige Beispiel für JSON-Daten enthält keine komplexen Datentypen wie verschachtelte Arrays oder Strukturen. Weitere Informationen zur Verwendung der Abfrage von verschachtelten JSON-Daten finden Sie unter Beispiel: Deserialisierung von verschachteltem JSON.