16.20 - AggGeom - Teradata Vantage NewSQL Engine

Teradata Vantage™ 地理空間データ型

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1181-162K-JPN

目的

ST_Geometryオブジェクトのグループの合併または共通部分を返します。

このテーブル演算子は、廃止予定のAggGeomUnionおよびAggGeomIntersection関数を置き換えます。

構文



ageometry
集約が計算される定数式または列式。ageometryのデータ型はST_Geometryです。
part_column_list
行をオペレータに渡す前にパーティション化するのに使用される列名のセット。PARTITION BY句を使用する場合、列のリストはテーブル演算子に渡されたpart_column_listに一致する必要があります。
database_name
table_name
集約を計算する対象のジオメトリ型列を含んでいるテーブル。
value
望まれる集約演算の型、UnionまたはIntersectionのいずれか。Unionがデフォルトです。値は単一引用符文字で区切る必要があります。
correlation_name
テーブル演算子により返されるテーブルに割り当てられる名前。
column_list
テーブル演算子により返される列のカスタム名のリスト(任意選択)。これらの名前は列名を上書きします。それらは上書きされなければ演算子により生成される名前です。列名を指定する場合は、返されるすべての列の名前を入力する必要があります。演算子により複数の列が返される場合は、名前をカンマで区切ります。

返される値

テーブル演算子によって返されるST_Geometry型列でのジオメトリ オブジェクトの種類は、集約されたジオメトリ オブジェクトの種類と一致します。

交差演算では、オブジェクト間に交差がない場合に"GEOMETRYCOLLECTION EMPTY"が返されます。

ジオメトリのWell-Known Binary(WKB)表現が結果的にジオメトリ最大サイズ(16MBまで)を超える場合に、Teradata Databaseによってエラーがレポートされます。

空でないジオメトリの集合はサポートされないので、結果的に集合になる合併または交差は、中間または最終の結果としてエラーを生成します。関連する要素は結果としてエラーになります。

有効なデータ型

Points、LineStrings、Polygons、MultiPoints、MultiLineStrings、MultiPolygons、GeometryCollectionsを表わすST_Geometryオブジェクト。

使用上の注意

  • ON句の最初の入力列は、ST_GEOMETRYデータ型を持ち、集約されるオブジェクトを含んでいる必要があります。それ以降、任意の数のパーティション列をON句に含めることができ、それらの列は現状のまま出力に書き込まれます。PARTITION BY句には最初の列以外のすべての列を指定する必要があり、指定がないとテーブル演算子はエラーを返します。
  • NULL引数は集約操作に含まれません。集約に含まれるすべての値がNULLの場合は、行は返されません。
  • PARTITION BY句が省略される場合、各AMPはローカルの集約操作をその行で実行します。AMPごとに出力行が1つ生成されます。
  • PARTITION BY句によって入力行が他のAMPに再配置される場合は、再配置の順序は実行ごとに異なります。このため、集約により生成されるジオメトリは実行ごとに異なります。結果的なジオメトリが等しくなっても、ジオメトリ内の点の順序が異なる場合があります。例えば、ポリゴンの異なる開始点と終了点が表示される場合です。

    同様にジオメトリの構造が異なる場合もあり、例えば、1つのLineStringが2つのLineStringまたは1つのMultiLineStringを表わす場合があります。合併または交差のステップは実行ごとに異なる順序で生じるので、通常これらの操作の計算で生じる精度のエラーがわずかに異なる場合もあります。

例: AggGeom

AggGeomを使用して、パーティション値(またはリスト)ごとに集約できます。この例では、ジオメトリの合併をジップ・コードごとに集約する処理を実行します。ジップ コード列でPARTITION BY句によりAggGeomを呼び出すと、すべての行がジップ コードにより再分散され、ジップ コードごとに1つの出力行を返します。

CREATE TABLE geom_table(pkey integer, zipcode CHAR(5), geom
ST_Geometry);

INSERT INTO geom_table VALUES(
 0, '92127', new ST_Geometry('LineString(10 10, 20 20)'));
INSERT INTO geom_table VALUES(
 1, '92127', new ST_Geometry('LineString(20 20, 30 30, 40 5)'));
INSERT INTO geom_table VALUES(
 2, '90338', new ST_Geometry('LineString(40 5, 50 50)'));

SELECT zipcode, geom
FROM AggGeom( ON (
  SELECT geom, zipcode
  FROM geom_table)
PARTITION BY zipcode
USING Operation('Union') ) L;

zipcode geom
------- -------------------------------------------------------------
90338   LINESTRING (40 5,50 50)
92127   MULTILINESTRING ((20 20,30 30,40 5),(10 10,20 20))

この2番目の例では、ローカル集約と最後のグローバル集約を使用して、すべてのジオメトリ値を集約します。

すべての入力ジオメトリ値の1つの集約を実行する文で、AggGeom演算子を2回呼び出すことができます。PARTITION BY句なしのSQLでAggGeomを一度呼び出すと、AggGeomはローカル集約を各AMPで実行し、各AMPから1つの行が返されます。

すべてのAMPから最終的な合併を実行するには、AggGeomへの2番目の呼び出しを入れ子にします。AggGeomへの内部呼び出しはローカル集約を各AMPで実行し、外部呼び出しはそのローカル集約の最終的な集約を実行して、すべてのジオメトリの合併を表わす1つの結果行を生成します。

Partition BY句を定数値とともに使用して、最終的な集約を1つのAMPで実行します。数値1のような定数値を指定することで、各AMPからローカルで集約された行は同じパーティションに含まれるため、最終的な集約で同じAMPに再分散されます。1つの出力行が返されます。

AggGeomへの1回の呼び出しを使用し、定数値ごとにパーティション化することで、すべての値を集約することもできますが、この場合すべての行を1つのAMPに再分散して集約を実行します。これは、Teradata Databaseの並列処理機能を活用しません。AggGeomへの2回の呼び出しによって、すべてのAMPはローカル集約を並行して実行し、最終の集約のみが1つのAMPで実行されます。

CREATE TABLE geom_table(pkey integer,
                        zipcode CHAR(5),
                        geom ST_Geometry);

INSERT INTO geom_table VALUES(
 0, '92127', new ST_Geometry('LineString(10 10, 20 20)'));
INSERT INTO geom_table VALUES(
 1, '92127', new ST_Geometry('LineString(20 20, 30 30, 40 5)'));
INSERT INTO geom_table VALUES(
 2, '90338', new ST_Geometry('LineString(40 5, 50 50)'));

SELECT *
FROM AggGeom( ON (
  SELECT L.*, 1 as p from AggGeom( ON (
    SELECT geom from geom_table)
USING Operation('Union') ) L)
PARTITION BY p
) G;

geom
----------------------------------------------------------------
MULTILINESTRING ((40 5,50 50),(20 20,30 30,40 5),(10 10,20 20))