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à.
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
, eNAME
, ma nella tabellacounties
di esempio ne vengono utilizzati solo due:Name
(stringa) eBoundaryShape
(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://amzn-s3-demo-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://amzn-s3-demo-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.
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: