Exemples : requêtes géospatiales - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemples : requêtes géospatiales

Les exemples présentés dans cette rubrique créent deux tables à partir d'échantillons de données disponibles sur GitHub et interrogent les tables en fonction de ces données. Les exemples de données, qui sont à titre d'illustration seulement et dont l'exactitude n'est pas garantie, se trouvent dans les fichiers suivants :

  • earthquakes.csv – Répertorie les tremblements de terre qui se sont produits en Californie. La table earthquakes d'exemple utilise des champs provenant de ces données.

  • california-counties.json – Répertorie les données de comté de l'État de Californie au format GeoJSON conforme ESRI. Les données comprennent de nombreux champs tels que AREA, PERIMETER, STATE, COUNTY et NAME, mais la counties table d'exemple en utilise seulement deux : Name (chaîne) et BoundaryShape (binaire).

    Note

    Athena utilise le format com.esri.json.hadoop.EnclosedEsriJsonInputFormat pour convertir les données JSON au format binaire géospatial.

L'exemple de code suivant crée une table appelée earthquakes :

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/';

L'exemple de code suivant crée une table appelée counties :

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/';

L'exemple de requête suivant utilise la fonction CROSS JOIN sur les tables counties et earthquake. L'exemple utilise ST_CONTAINS pour interroger les comtés dont les limites incluent des zones sismiques, qui sont spécifiées avec ST_POINT. La requête regroupe ces comtés par nom, les ordonne par nombre et les renvoie en ordre décroissant.

Note

À partir de la version 2 du moteur Athena, les fonctions comme ST_CONTAINS ne prennent plus en charge le type VARBINARY comme entrée. Pour cette raison, l'exemple utilise la fonction ST_GeomFromLegacyBinary(varbinary) pour convertir la valeur binaire boundaryshape en une géométrie. Pour plus d'informations, voir Modifications apportées aux fonctions géospatiales dans la référence Version 2 du moteur Athena.

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

Cette requête renvoie :

+------------------------+ | 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 | +------------------------+

Ressources supplémentaires

Pour obtenir des exemples supplémentaires de requêtes géospatiales, veuillez consulter les billets de blog suivants :