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に再分散して集約を実行します。これは、Vantageの並列処理機能を活用しません。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))