OceanBaseデータベースでスペースインデックスを作成する構文はOracleとは異なり、スペースインデックス列のSRIDはテーブル作成時に指定します。
注意
OceanBaseデータベースでのスペースインデックスの作成はOracleと互換性がありません。Oracleではスペースインデックスを作成するには、`USER_SDO_GEOM_METADATA` システムテーブル内のスペースインデックス列とインデックス情報のマッピングを手動でメンテナンスする必要があります。一方、OceanBaseデータベースはMySQLスタイルでOracleモードと互換性があり、`USER_SDO_GEOM_METADATA` テーブルをメンテナンスしないため、構文がOracleと一致しません。
注意事項
- スペースインデックスを作成する際は、必ずSRIDを指定する必要があります。
- パーティションテーブルにスペースインデックスを作成する場合、現在はローカルパーティションインデックスのみの作成がサポートされています(
LOCALキーワードを明示的に指定する必要があります)。グローバルパーティションインデックスはサポートされていません。
前提条件
GIS機能を使用する前に、業務テナントでGISメタデータを設定する必要があります。サーバーに接続した後、以下のコマンドを実行して default_srs_data_mysql.sql ファイルをデータベースにインポートします:
## $password はデータベースへのログインパスワードに置き換えてください
## $localhost はデータベースへのログインIPアドレスに置き換えてください
## $tenant_name はデータベースへのログインテナント名に置き換えてください
## $port はデータベースのポート番号に置き換えてください
$python /home/admin/oceanbase/bin/import_srs_data.py -p'$password' -h $localhost -P $port -t $tenant_name -f /home/admin/oceanbase/etc/default_srs_data_mysql.sql
以下の結果が返された場合、データファイルのインポートが成功したことを意味します:
INFO: succeed to import srs data
INFO: oceanbase.__all_spatial_reference_systems old result rows -- 1
INFO: oceanbase.__all_spatial_reference_systems new result rows -- 5152
例
以下の例では、スペースインデックスの作成方法を示します:
-- テーブル作成時にインデックス列のSRIDを指定する
CREATE TABLE geom (id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY SRID 4326);
-- 2件のテストデータを挿入する
INSERT INTO geom VALUES(1,'a',SDO_GEOMETRY(2003,4326,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0, 0,1, 1,1, 1,0, 0,0)));
INSERT INTO geom VALUES(2,'a',SDO_GEOMETRY(2001,4326, sdo_point_type(0, 0, NULL), NULL, NULL));
-- インデックスを作成する
CREATE INDEX g ON geom(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
以下の例では、パーティションテーブルにスペースインデックスを作成する方法を示します:
-- パーティションテーブル作成時にインデックス列のSRIDを指定する
CREATE TABLE geom_par (id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY SRID 4326)
PARTITION BY HASH(id) PARTITIONS 2;
-- 2件のテストデータを挿入する
INSERT INTO geom_par VALUES(1,'a',SDO_GEOMETRY(2003,4326,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0, 0,1, 1,1, 1,0, 0,0)));
INSERT INTO geom_par VALUES(2,'a',SDO_GEOMETRY(2001,4326, sdo_point_type(0, 0, NULL), NULL, NULL));
-- ローカルインデックスを作成する(LOCALキーワードを追加する)
CREATE INDEX g ON geom_par(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX LOCAL;
以下の例では、スペースインデックスの削除方法を示します:
DROP INDEX g;
関連ドキュメント
- SRIDの詳細については、空間参照系(SRS)を参照してください。
- インデックスクエリの詳細については、クエリ計算関数を参照してください。