メニュー
Amazon Athena
ユーザーガイド

例: 地理空間クエリ

以下の例では、2 つのテーブルを作成し、これらに対してクエリを発行します。

以下の例は、Amazon S3 内に保存されている 2 つのファイルに依存します。

  • earthquakes.csv サンプルファイルは、カリフォルニアで発生した地震を一覧表示します。このファイル内のフィールドは、以下の例に示す earthquakes テーブルのフィールドに対応します。

  • california-counties.json ファイルは、JSON エンコード形式の郡のデータを ESRI 準拠形式で表示します。AREA、PERIMETER、STATE、COUNTY、NAME など、多くのフィールドが含まれています。次の例は、このファイルの counties テーブルと、2 つのフィールドとして Name (文字列) と BoundaryShape (バイナリ) のみを示しています。

注記

以下のファイルに含まれているのはサンプルデータであり、正確性は保証されません。参考用としてドキュメントにのみ含まれており、製品自体には含まれていません。

次のコード例では、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://my-query-log/csv'

次のコード例では、counties という名前のテーブルを作成します。

CREATE external TABLE IF NOT EXISTS counties ( Name string, BoundaryShape binary ) ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde' STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://my-query-log/json'

次のコード例では、前に作成した 2 つのテーブルに対して CROSS JOIN 関数を使用します。さらに、両方のテーブルに対して ST_CONTAINS を使用し、ST_POINT で指定した地震の地理的な場所を境界に含む郡を要求します。次に、該当する郡を名前でグループ化し、発生カウントの順に並べて返します。

SELECT counties.name, COUNT(*) cnt FROM counties CROSS JOIN earthquakes WHERE ST_CONTAINS (counties.boundaryshape, ST_POINT(earthquakes.longitude, earthquakes.latitude)) GROUP BY counties.name ORDER BY cnt DESC

このクエリは以下を返します。

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