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)を参照してください。
- インデックスクエリの詳細については、クエリ計算関数を参照してください。