Contoh: Kueri geospasial - Amazon Athena

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. Contohearthquakestabel menggunakan bidang dari data ini.

  • california-counties.json— Daftar data county untuk negara bagian California diFormat GeoJSON sesuai dengan ESRI. Data mencakup banyak bidang sepertiAREA,PERIMETER,STATE,COUNTY, danNAME, tetapi contohcountiestabel hanya menggunakan dua:Name(string), danBoundaryShape(biner).

    catatan

    Athena menggunakancom.esri.json.hadoop.EnclosedEsriJsonInputFormatuntuk 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 JOINfungsi padacountiesdanearthquaketabel. Contoh menggunakanST_CONTAINSuntuk 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 mengkonversiboundaryshapenilai 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: