Esempi: query geospaziali - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempi: query geospaziali

Gli esempi in questo argomento creano due tabelle a partire dai dati di esempio disponibili GitHub e interrogano le tabelle in base ai dati. I dati di esempio, che sono solo a scopo illustrativo e non sono garantiti per essere accurati, si trovano nei seguenti file:

  • earthquakes.csv: elenca i terremoti che si sono verificati in California. Nella tabella di esempio earthquakes vengono utilizzati i campi di questi dati.

  • california-counties.json: elenca i dati della contea per lo stato della California in formato ESRI-compliant GeoJSON. I dati includono molti campi, ad esempio AREA, PERIMETER, STATE, COUNTY, e NAME, ma nella tabella counties di esempio ne vengono utilizzati solo due: Name (stringa) e BoundaryShape (binario).

    Nota

    Athena utilizza com.esri.json.hadoop.EnclosedEsriJsonInputFormat per convertire i dati JSON in formato binario geospaziale.

Il seguente esempio di codice crea una tabella denominata 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/';

Il seguente esempio di codice crea una tabella denominata 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/';

La seguente query di esempio utilizza la funzione CROSS JOIN nelle tabelle counties e earthquake. L'esempio utilizza ST_CONTAINS per eseguire query per le contee i cui confini includono le località dei terremoti, specificate con ST_POINT. La query raggruppa quindi gruppi tali paesi per nome, li ordina per conteggio e li restituisce in modo decrescente.

Nota

A partire dalla versione 2 del motore Athena, le funzioni come ST_CONTAINS non supportano più il tipo VARBINARY come input. Per questo motivo, l'esempio utilizza la funzione ST_GeomFromLegacyBinary(varbinary) per convertire il valore binario boundaryshape in una geometria. Per ulteriori informazioni, consulta Modifiche alle funzioni geospaziali nella referenza per Versione 2 del motore 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

Questa query restituisce:

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

Risorse aggiuntive

Per altri esempi di query geospaziali, consulta i seguenti post di blog: