Beispiele: Koordinatenbasierte Abfragen - 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.

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 und NAME, aber die counties-Beispieltabelle verwendet nur zwei: Name (Zeichenfolge) und BoundaryShape (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: