

# 例: 地理空間クエリ
<a name="geospatial-example-queries"></a>

このトピックの例では、GitHub で利用可能なサンプルデータから 2 つのテーブルを作成し、そのデータに基づいてテーブルをクエリします。サンプルデータは、あくまで例に過ぎず、正確であることは保証されていません。以下のファイルにあります。
+ **[https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/earthquake-data/earthquakes.csv](https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/earthquake-data/earthquakes.csv)** – カリフォルニアで発生した地震をリスト化します。この `earthquakes` テーブルの例では、このデータのフィールドを使用しています。
+ **[https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/counties-data/california-counties.json](https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/counties-data/california-counties.json)** – [ESRI 準拠の GeoJSON 形式](https://doc.arcgis.com/en/arcgis-online/reference/geojson.htm)でカリフォルニア州の郡データをリスト化します。データには `AREA`、`PERIMETER`、`STATE`、`COUNTY`、および `NAME` など多くのフィールドが含まれていますが 、サンプルの `counties` テーブルでは `Name` (文字列) と `BoundaryShape` (バイナリ) の 2 つしか使用していません。
**注記**  
Athena は、`com.esri.json.hadoop.EnclosedEsriJsonInputFormat` を使用して JSON データを地理空間バイナリ形式に変換します。

以下のコード例は、`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/';
```

以下のコード例は、`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/';
```

以下のサンプルクエリは、`CROSS JOIN` 関数を `counties` および `earthquake` テーブルで使用します。この例では、境界に `ST_POINT` で指定される地震位置が含まれる郡のクエリに `ST_CONTAINS` を使用します。クエリはこれらの郡を名前でグループ化し、発生数順に並べて、それらを降順で返します。

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

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

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

## その他のリソース
<a name="geospatial-example-queries-additional-resources"></a>

地理空間クエリのその他の例については、次のブログ記事を参照してください。
+ [Extend geospatial queries in Amazon Athena with UDFs and AWS Lambda](https://aws.amazon.com/blogs/big-data/extend-geospatial-queries-in-amazon-athena-with-udfs-and-aws-lambda/) 
+ [Visualize over 200 years of global climate data using Amazon Athena and Amazon Quick](https://aws.amazon.com/blogs/big-data/visualize-over-200-years-of-global-climate-data-using-amazon-athena-and-amazon-quicksight/).
+ [Querying OpenStreetMap with Amazon Athena](https://aws.amazon.com/blogs/big-data/querying-openstreetmap-with-amazon-athena/)