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.
Beispiele: Koordinatenbasierte Abfragen
Die Beispiele in diesem Thema erstellen zwei Tabellen aus Beispieldaten, die auf verfügbar sind, GitHub und fragen die Tabellen auf der Grundlage der Daten ab. Die Beispieldaten, die nur zu Illustrationszwecken dienen und nicht garantiert korrekt sind, befinden sich in den folgenden Dateien:
-
earthquakes.csv
– Führt Erdbeben auf, die sich in Kalifornien ereignet haben. In der earthquakes
-Beispieltabelle werden Felder aus diesen Daten verwendet. -
california-counties.json
– Führt Daten auf Landkreisebene für den Bundesstaat Kalifornien im ESRI-gemäßen GeoJSON-Format auf. Die Daten beinhalten zahlreiche Felder wie AREA
,PERIMETER
,STATE
,COUNTY
undNAME
, aber diecounties
-Beispieltabelle verwendet nur zwei:Name
(Zeichenfolge) undBoundaryShape
(binär).Anmerkung
Athena verwendet die
com.esri.json.hadoop.EnclosedEsriJsonInputFormat
, um die JSON-Daten in das koordinatenbasierte Binärformat zu konvertieren.
Mit dem folgenden Code-Beispiel wird eine Tabelle namens earthquakes
erstellt:
CREATE external TABLE earthquakes ( earthquake_date string, latitude double, longitude double, depth double, magnitude double, magtype string, mbstations string, gap string, distance string, rms string, source string, eventid string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 's3://DOC-EXAMPLE-BUCKET/my-query-log/csv/';
Mit dem folgenden Code-Beispiel wird eine Tabelle namens counties
erstellt:
CREATE external TABLE IF NOT EXISTS counties ( Name string, BoundaryShape binary ) ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.EsriJsonSerDe' STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedEsriJsonInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/my-query-log/json/';
Die folgende Beispielabfrage verwendet die Funktion CROSS JOIN
für die counties
- und earthquake
-Tabellen. Im Beispiel wird ST_CONTAINS
verwendet, um nach Landkreisen abzufragen, deren Grenzen Erdbebenstandorte enthalten, die mit ST_POINT
angegeben sind. Die Abfrage gruppiert solche Landkreise nach Namen, ordnet sie nach Anzahl und gibt sie in absteigender Reihenfolge zurück.
Anmerkung
Ab der Athena-Engine-Version 2 unterstützen Funktionen wie ST_CONTAINS
nicht mehr den VARBINARY
-Typ als Eingabe. Aus diesem Grund verwendet das Beispiel die ST_GeomFromLegacyBinary(varbinary)-Funktion, um den boundaryshape
-Binärwert in eine Geometrie umzuwandeln. Weitere Informationen finden Sie unter Änderungen an Geodatenfunktionen in der Athena-Engine-Version 2-Referenz.
SELECT counties.name, COUNT(*) cnt FROM counties CROSS JOIN earthquakes WHERE ST_CONTAINS (ST_GeomFromLegacyBinary(counties.boundaryshape), ST_POINT(earthquakes.longitude, earthquakes.latitude)) GROUP BY counties.name ORDER BY cnt DESC
Diese Abfrage gibt Folgendes zurück:
+------------------------+
| name | cnt |
+------------------------+
| Kern | 36 |
+------------------------+
| San Bernardino | 35 |
+------------------------+
| Imperial | 28 |
+------------------------+
| Inyo | 20 |
+------------------------+
| Los Angeles | 18 |
+------------------------+
| Riverside | 14 |
+------------------------+
| Monterey | 14 |
+------------------------+
| Santa Clara | 12 |
+------------------------+
| San Benito | 11 |
+------------------------+
| Fresno | 11 |
+------------------------+
| San Diego | 7 |
+------------------------+
| Santa Cruz | 5 |
+------------------------+
| Ventura | 3 |
+------------------------+
| San Luis Obispo | 3 |
+------------------------+
| Orange | 2 |
+------------------------+
| San Mateo | 1 |
+------------------------+
Weitere Ressourcen
Weitere Beispiele für koordinatenbasierte Abfragen finden Sie in den folgenden Blogbeiträgen: