Abfragen von &JSON - Amazon Athena

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Abfragen von &JSON

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

{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 sich jeder Datensatz (im Grunde jede Zeile in der Tabelle) in einer separaten Zeile befindet. 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://DOC-EXAMPLE-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 Entfernung von der Sonne Umlaufzeit Länge des Tages
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 den verwendetOpenX JSON SerDe, was erfordert, dass sich jeder JSON-Datensatz in einer separaten Zeile befindet. Wenn die JSON-Datei ein hübsches Druckformat hat oder wenn sich alle Datensätze in einer einzigen Zeile befinden, 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 von OpenX JSON SerDe das 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 nicht das OpenX-JSON spezifiziert SerDe, sondern spezifiziertSTORED AS ION.

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

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

Das vorherige Beispiel für JSON-Daten enthält keine komplexen Datentypen wie verschachtelte Arrays oder Strukturen. Weitere Hinweise zum Abfragen verschachtelter JSON-Daten finden Sie unter. Beispiel: Deserialisierung von verschachteltem JSON