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)を参照してください。
- 空間データインポート時のエラー処理の詳細については、空間データ 機能中 空間データ 型フィールド及び関連関数実行エラー ERROR 3548を参照してください。
- インデックスクエリの詳細については、クエリ計算関数を参照してください。