Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh: Kueri geospasial
Contoh dalam topik ini membuat dua tabel dari data sampel yang tersedia GitHub dan menanyakan tabel berdasarkan data. Data contoh, yang hanya untuk tujuan ilustrasi dan tidak dijamin akurat, adalah dalam file berikut:
-
earthquakes.csv
— Daftar gempa bumi yang terjadi di California. Contoh earthquakes
tabel menggunakan bidang dari data ini. -
california-counties.json
— Daftar data county untuk negara bagian California diFormat GeoJSON sesuai dengan ESRI . Data mencakup banyak bidang seperti AREA
,PERIMETER
,STATE
,COUNTY
, danNAME
, tetapi contohcounties
tabel hanya menggunakan dua:Name
(string), danBoundaryShape
(biner).catatan
Athena menggunakan
com.esri.json.hadoop.EnclosedEsriJsonInputFormat
untuk mengkonversi data JSON ke format biner geospasial.
Contoh berikut membuat direktori yang disebut 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/';
Contoh berikut membuat direktori yang disebut 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/';
Contoh kueri berikut menggunakanCROSS JOIN
fungsi padacounties
danearthquake
tabel. Contoh menggunakanST_CONTAINS
untuk kueri untuk kabupaten yang batas-batasnya termasuk lokasi gempa bumi, yang ditentukan denganST_POINT
. Grup kueri kabupaten tersebut dengan nama, memerintahkannya dengan hitungan, dan mengembalikannya dalam urutan menurun.
catatan
Mulai dari mesin Athena versi 2, fungsi seperti ST_CONTAINS
tidak lagi mendukung VARBINARY
tipe sebagai input. Untuk alasan ini, contoh menggunakanST_GeomFromLegacyBinary(varbinary)fungsi untuk mengkonversiboundaryshape
nilai biner menjadi geometri. Untuk informasi selengkapnya, lihat Perubahan fungsi geospasial di referensi Versi mesin Athena 2.
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
Kueri ini menghasilkan:
+------------------------+
| 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 |
+------------------------+
Sumber daya tambahan
Untuk contoh tambahan kueri geospasial, lihat postingan blog berikut: