35.54 SDO_UTIL.H3SUM_CREATE_TABLE

書式

SDO_UTIL.H3SUM_CREATE_TABLE(
  table_out     IN VARCHAR2,  
  table_in      IN VARCHAR2,
  geomcol_spec  IN VARCHAR2,
  col_spec      IN VARCHAR2,
  max_H3_level  IN NUMBER DEFAULT 15,
  dop           IN NUMBER DEFAULT 16
);

説明

測地点データのH3サマリー表を作成します。

パラメータ

table_out

作成する表の名前。

table_in

測地(経度、緯度)座標系の点ジオメトリ情報を含む、入力表の名前。

geomcol_spec

点ジオメトリを含む列の説明。これは、点ジオメトリを含む列の名前('LOCATION'など)、またはカンマで区切られた(経度、緯度)ペアを形成する2つのNUMBER列の名前('X, Y'など)のいずれかです。

col_spec

結果表に集約する入力表の列のリストと、データを集約するルール。各フィールドに列名と集約演算をカンマで区切って指定し、各フィールドをセミコロンで区切ります。サポートされている演算は、MIN、MAX、AVG、SUM、CNTおよびANYです。値は、SQL関数MIN、MAX、AVG、SUM、COUNTおよびANY_VALUEを使用してそれぞれ計算されます。演算が指定されていない場合は、CNTが想定されます。値'1'は列名として使用でき、すべて1である値の列として機能します。

たとえば、'Name,CNT; Vehicles,AVG; col2; col3,MAX; col4,ANY'は、列NAME_CNT (null以外のName値をカウントする)、VEHICLES_AVGCOL2_CNTCOL3_MAXおよびCOL4_ANYを作成します。COUNTおよびANYは、数値以外の列で使用できる唯一の集計です。

max_H3_level

サマリー表に作成する最大レベル(最小セル)を指定します。

dop

パラレル化の程度を制御します。

dopがNULLの場合、パラレル化は要求されません。このパラメータを指定しない場合、デフォルトは16です。

H3SUM表は2つのステップで作成されます。まずデータ表自体が作成され、次に表に索引が作成されます。dopパラメータは、表作成と索引作成の両方に使用されます。

使用上のノート

H3解像度レベルごとに、指定された入力表の点データをH3の六角形ごとに1つのデータ行に集約する新しい表を作成します。単一点であるジオメトリのみが含まれます。点でないデータおよび複数点データは無視されます。H3値は、指定されたジオメトリ列から計算されます。ソース表のH3キー列(ある場合)は無視されます。

同じ六角形にあるすべての点のデータ値が結合されます。col_specは、結果の出力(H3サマリー)表に必要な数値列と、値を組み合せる方法を指定します。

表は、SDO_UTIL.H3SUM_GET_CURSORファンクションおよびSDO_UTIL.H3SUM_VECTORTILEファンクションによる高速アクセスのために索引付けされます。

例として、次のWORLD表を考えてみます。

SQL> describe WORLD
 Name                             Null?    Type
 -------------------------------- -------- -------------------
 X                                         NUMBER
 Y                                         NUMBER
 ID                                        NUMBER
 PT                                        PUBLIC.SDO_GEOMETRY
 INFO                                      VARCHAR2(20)

次のコードは、SDO_UTIL.H3SUM_CREATE_TABLEプロシージャを使用して、各六角形に結合された点の個数を単純に数えるH3サマリー表を作成します。

begin
sdo_util.h3sum_create_table('WORLD_H3', 'WORLD', 'pt', '1,CNT');
end;
/

H3サマリー表で次のSQL問合せを実行すると、点の個数は各レベルで同じですが、より粗いレベル(より小さいレベル番号)では六角形が大きくなり、数は少なくなることがわかります。レベル15にあったすべてのデータは、より粗いレベルのより少ない(より大きい)六角形に結合されています。

SQL> select levelnum, count(1), sum(id_cnt) from WORLD_H3 group by levelnum order by levelnum;

  LEVELNUM   COUNT(1) SUM(ID_CNT)
---------- ---------- -----------
         0        122       64621
         1        842       64621
         2       5882       64621
         3      38781       64621
         4      57074       64621
         5      61857       64621
         6      63650       64621
         7      64329       64621
         8      64442       64621
         9      64442       64621
        10      64442       64621

  LEVELNUM   COUNT(1) SUM(ID_CNT)
---------- ---------- -----------
        11      64442       64621
        12      64442       64621
        13      64442       64621
        14      64442       64621
        15      64442       64621

16 rows selected.