

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Amazon Redshift での空間データのクエリ
<a name="geospatial-overview"></a>

*空間データ*は、定義された空間 (空間参照系) におけるジオメトリの位置と形状を説明するものです。Amazon Redshift は、`GEOMETRY` および `GEOGRAPHY` データ型の空間データをサポートします。これには空間データが含まれており、さらにオプションでデータの空間参照系識別子 (SRID) を使用できます。

空間データには、ジオメトリの特徴を表すために使用できるジオメトリデータが含まれます。このタイプのデータの例としては、天気予報、地図の案内、位置情報を含むツイート、店舗の場所、航空路線などがあります。空間データは、ビジネス分析、レポート、および予測で重要な役割を果たします。

空間データは、Amazon Redshift SQL 関数を使ってクエリできます。空間データには、オブジェクトのジオメトリ値が含まれます。

`GEOMETRY` データ型の演算は、デカルト平面上で動作します。空間参照系識別子 (SRID) はオブジェクト内に格納されますが、この SRID は座標系の識別子に過ぎず、`GEOMETRY` オブジェクトの処理で使用するアルゴリズム内の処理とは特に関係がありません。一方、`GEOGRAPHY` データ型の演算では、オブジェクト内の座標は回転楕円体上の球座標として扱われます。この回転楕円体は、地理空間参照系を参照する SRID によって定義されます。デフォルトで `GEOGRAPHY` データ型は、世界測地系 (WGS) 84 を参照しながら、空間参照 (SRID) 4326 を使用して作成されます。SRA の詳細については、Wikipedia で「[Spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system)」を参照してください。

ST\$1Transform 関数を使用すると、さまざまな空間参照系からの座標を変換できます。座標変換の完了後は、これら 2 つの座標間で単純なキャストを使用できるようになります (ただし、入力された `GEOMETRY` が地理的 SRID でエンコードされている場合に限ります)。このキャストでは追加的な変換は行わず、単に座標をコピーします。例: 

```
SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(10 20)')::geography);
```

```
st_asewkt
------------------------
 SRID=4326;POINT(10 20)
```

`GEOMETRY` と `GEOGRAPHY` データ型間での違いをよりよく理解するためには、世界測地系 (WGS) 84 を使用して、ベルリン空港 (BER) とサンフランシスコ空港 (SFO) の間の距離を計算してみるということもできます。`GEOGRAPHY` データ型を使用した場合、結果はメートル単位で返されます。SRID 4326 による `GEOMETRY` データ型を使用する場合、結果は度数で返されます。1 度に対応する距離が地球上でのジオメトリの位置によって異なるため、度数をメートルに変換することはできません。

`GEOGRAPHY` データ型での計算は、国の正確な面積をゆがみなく計算する場合など、地球面上での現実に沿った計算に主に使用されます。ただし、これらの処理ではコストが高くなります。したがって、ST\$1Transform により、ローカルに投影された適切な座標系に座標を変換することで、`GEOMETRY` データ型を使用して計算を高速化できるようになります。

空間データを使って、以下を実行するクエリを実行できます。
+ 2 点間の距離を確認する。
+ あるエリア (ポリゴン) 内に別のエリアが含まれているかどうかを確認する。
+ あるラインストリングが別のラインストリングまたはポリゴンと交差するかどうかを確認する。

空間データの値を保持するには、`GEOMETRY` データ型を使います。Amazon Redshift の`GEOMETRY` 値では、2 次元 (2D)、3 次元 (3DZ)、メジャー付 2 次元 (3DM)、および 4 次元 (4D) ジオメトリの、プリミティブデータ型を定義できます。
+ 2 次元 (2D) ジオメトリは、平面上の 2 つのデカルト座標 (x, y) によって表現されます。
+ 3 次元 (3DZ) ジオメトリは、空間内の 3 つのデカルト座標 (x, y, z) によって表現されます。
+ メジャー付き 2次元 (3DM) ジオメトリは、3 つの座標 (x、y、m) によって表現されます。最初の 2 つは平面内のデカルト座標であり、3 つ目は測定尺度です。
+ 4 次元 (4D) ジオメトリは、4 つの座標 (x, y, z, m) によって表現されます。最初の 3 つは空間内のデカルト座標、4 つ目は測定尺度です。

ジオメトリプリミティブのデータ型に関する詳細は、ウィキペディアの [Well-known text](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) を参照してください。

空間データの値を保持するには、`GEOGRAPHY` データ型を使います。Amazon Redshift の`GEOGRAPHY` 値では、2 次元 (2D)、3 次元 (3DZ)、メジャー付 2 次元 (3DM)、および 4 次元 (4D) ジオメトリの、プリミティブデータ型を定義できます。
+ 2 次元 (2D) ジオメトリは、回転楕円体上の経度と緯度の座標によって表現されます。
+ 3 次元 (3DZ) ジオメトリは、回転楕円体上の経度、緯度、および標高によって表現されます。
+ メジャー付き 2 次元 (3DM) ジオメトリは、3 つの座標 (経度、緯度、メジャー) によって表現されます。最初の 2 つは球体面上の角座標であり、3 つ目は測定尺度です。
+ 4 次元 (4D) ジオメトリは、4 つの座標 (経度、緯度、標高、メジャー) によって表現されます。最初の 3 つが経度、緯度、高度で、4 つ目は測定尺度です。

地理座標系の詳細については、ウィキペディアで「[地理座標系](https://en.wikipedia.org/wiki/Geographic_coordinate_system)」および「[球形座標系](https://en.wikipedia.org/wiki/Spherical_coordinate_system)」を参照してください。

`GEOMETRY` および `GEOGRAPHY` データ型には、以下のサブタイプがあります。
+ `POINT`
+ `LINESTRING`
+ `POLYGON`
+ `MULTIPOINT`
+ `MULTILINESTRING`
+ `MULTIPOLYGON`
+ `GEOMETRYCOLLECTION`

ジオメトリデータの次の表記をサポートする Amazon Redshift SQL 関数があります。
+ GeoJSON
+ Well-known text (WKT) 
+ Extended well-known text (EWKT)
+ Well-known binary (WKB) 表記 
+ Extended well-known binary (EWKB)

`GEOMETRY` データ型と `GEOGRAPHY` データ型の間はキャストすることが可能です。

次の SQL は、`GEOMETRY` から `GEOGRAPHY` にラインストリングをキャストします。

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geography);
```

```
 st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

次の SQL は、`GEOGRAPHY` から `GEOMETRY` にラインストリングをキャストします。

```
SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geometry);
```

```
 st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

Amazon Redshift は、空間データをクエリするための多くの SQL 関数が用意されています。`ST_IsValid` 関数を除いて、引数として `GEOMETRY` オブジェクトを受け入れる空間関数は、この `GEOMETRY` オブジェクトが有効なジオメトリであることを期待します。`GEOMETRY` あるいは `GEOGRAPHY` オブジェクトが有効でない場合、空間関数の動作が定義されていません。検証についての詳細は、[幾何学的妥当性](spatial-terminology.md#spatial-terminology-validity) を参照してください。

空間データをクエリする SQL 関数の詳細については、「[空間関数](geospatial-functions.md)」を参照してください。

空間データのロードの詳細については、「[GEOMETRY もしくは GEOGRAPHY データ型の列のロード](copy-usage_notes-spatial-data.md)」を参照してください。

**Topics**
+ [チュートリアル: Amazon Redshift での空間 SQL 関数の使用](spatial-tutorial.md)
+ [シェープファイルを Amazon Redshift にロードする](spatial-copy-shapefile.md)
+ [Amazon Redshift 空間データの用語](spatial-terminology.md)
+ [Amazon Redshift で空間データを使用する際の考慮事項](spatial-limitations.md)