6 SODA索引仕様(参考)
索引仕様を使用してJSONドキュメントのデータに索引付けできます。SODA索引仕様の詳細な定義を示します。
ノート:
-
Bツリー索引を作成するには、Oracle Databaseリリース12c (12.2.0.1)以上が必要です。
DATE
またはTIMESTAMP
値に索引付けするBツリー索引を作成するには、Oracle Databaseリリース18c (18.1)以上が必要です。 -
空間索引または検索索引を作成するには、Oracle Databaseリリース12c (12.2.0.1)以上が必要です。
索引仕様は、JSONドキュメントに対する操作に使用される特定の種類のデータベース索引を指定するJSONオブジェクトです。次の種類の索引を指定できます。
-
Bツリー: スカラーJSON値の索引付けに使用されます。フィールド
fields
の有無で識別されます。(Bツリー索引のみが、このフィールドを持っています。) -
空間: GeoJSON地理データを索引付けするために使用されます。フィールド
spatial
の有無で識別されます。(空間索引のみが、このフィールドを持っています。) -
検索: 次のいずれか、または両方に使用されます。
-
非定型の構造的問合せまたは全文検索
-
JSONデータ・ガイド
検索索引仕様は、フィールド
fields
およびspatial
の欠如によって識別されます。 -
各種類の索引仕様にname
フィールドが必要です。これは索引の名前を指定する文字列です。
Bツリー索引仕様
SODA Bツリー索引仕様では、JSONドキュメントにスカラー値を問い合せるためにSODAが使用するSQL/JSON関数json_value
に対して、Bツリー関数ベースの索引を指定します。Bツリー索引仕様では、次のフィールドを持つことができます。フィールドfields
は、Bツリー索引仕様に必要です。その他のフィールドはオプションです。
-
fields
— 索引付けされスカラーJSON値を持つドキュメントのフィールドをターゲットとする、オブジェクトの配列。配列に複数の要素がある場合、索引仕様によって複合Bツリー索引が作成されます。配列
fields
の要素の順序によって、索引付けのプライマリ順序(ターゲット・フィールド間の順序)が指定されます。最初の配列要素のフィールドは優先度が最も高くなり、最後の要素のフィールドは優先度が最も低くなります。配列内の各オブジェクトには、次のフィールドを指定できます。
-
path
- ターゲット値へのパスを指定する文字列。その値はスカラーであることが必要です。必須です。パス内に配列ステップがある場合、このような各配列の最初の要素のみが索引付けに使用されます。ドキュメントでは、ターゲット・フィールドのスカラー値のみが索引によって処理され、フィールドの非スカラー値は索引によって無視されます。
-
datatype
- 索引付けの目的で、targeted-field値のデータ型を指定する文字列。オプションです。可能な値(すべて大/小文字は区別されません):"varchar2"
(デフォルト)、"number"
、"date"
"timestamp"
および"varchar2"
シノニム"string"
と"varchar"
。QBEフィルタ基準と一致する入力データの有効なタイプが索引
datatype
値と一致する場合、QBEフィルタ基準を評価する際のパフォーマンスを向上させるために、索引を使用できます。索引を取得して特定のQBEを評価するには、QBEで対象になっているスカラーJSON値を索引仕様の
datatype
値と同じSQLデータ型として解釈することで十分です。これは、JSONの数値または文字列値および索引で、datatype
がそれぞれ"number"
または"varchar2"
(または"varchar2"
シノニム、またはdatatype
なし)の場合です。他の
datatype
値の場合には、直接対応するJSONスカラー・データ型がないため、QBEで索引を取得するには、項目メソッド演算子を使用してJSON値を適切なデータ型のSQL値に変換する必要があります。たとえば、
{"dateField" : {"$date" : "2017-07-25"}}
のようなQBEで入力文字列値"2017-07-25"
(サポートされているISO 8601日付書式の1つ)は、QBEの項目メソッド演算子$date
によってデータ型"date"
に変換されます。"date"
のdatatype
値で指定された索引を取得して、QBEを評価できます。項目メソッド演算子
$number
または$string
を明示的に使用しないQBEでは、datatype
がそれぞれ"number"
または"varchar2"
(またはそのシノニムの1つ)である索引を取得できます。このような値ではJSONとSQLデータ型の間に直接的な対応があるためです。次に例を示します。-
{"numField" : {"$number" : 20}}
を使用するのと同じように、QBE{"numField" : 20}
を使用すると、datatype
値"number"
で作成された索引を取得できます。 -
{"stringField" : {"$string" : "my string"}}
を使用するのと同じように、QBE{"stringField" : "my string"}
を使用すると、datatype
値"varchar2"
(またはそのシノニムの1つ)で作成された索引を取得できます。
-
-
maxlength
— 索引付けする値の最大長を指定する数値。オプションです。datatype
が長さを持たないもの(number
など)の場合は無視されます。maxlength
が指定されていない場合、索引付けされた値の長さは、索引付けされているstringフィールドの数で4000を割ったものです。 -
order
— 索引のソート順序。オプションです。フィールドorder
の値は、昇順を意味する文字列"asc"
または数値1
、あるいは降順を意味する文字列"desc"
または数値-1
が可能です。デフォルト: 昇順。
-
-
unique
— ブール値。オプションです。索引が一意かどうか。デフォルト: 一意でない(false
)。 -
indexNulls
— ブール値。オプションです。選択した列に対してNULL
値を索引付けするかどうか(索引付けする列のリストに1を加算)。デフォルト:NULL
値を索引付けしません(false
)。ノート:
QBEのorderby句で索引が取得されるように、
indexNulls
にはtrue
値を指定する必要があります。
デフォルトのエラー処理動作では、ターゲット・フィールドが存在する必要はありませんが、存在する場合、その値はdatatype
データ型に変換可能なJSONスカラーである必要があります。ドキュメントについて、そうでない場合には問合せ時にエラーが発生します。さらに、このような索引が存在する場合に、そうではないドキュメントを書き込もうとすると、書込み操作のエラーが発生します。脚注1
Bツリー索引仕様では、フィールドscalarRequired
にtrue
値を指定することで、デフォルトとは異なるエラー処理動作を指定できます。これには、ターゲット・フィールドが存在し、データ型datatype
に変換可能な値が必要です。索引付けするドキュメントについて、そうでない場合には索引付け時にエラーが発生します。さらに、このような索引が存在する場合に、そうではないドキュメントを書き込もうとすると、書込み操作のエラーが発生します。脚注2
ノート:
データ内のJSON null
値は、常に、索引に指定されたデータ型に変換可能です。そのデータは索引付けされていません。(これは、scalarRequired
の値に関係なく適用されます。)
空間索引仕様
SODA空間索引仕様では、GeoJSONデータを索引付けするOracle Spatial and Graph索引を指定します。空間索引仕様には spatial
フィールドがあり、その値は索引付けするJSONフィールドへのパスを指定する文字列です。対象となるJSONフィールドの値は、単一のGeoJSON geometry
オブジェクト、つまりGeoJSON geometry
オブジェクトでもあるJSONスカラーである必要があります。
デフォルトのエラー処理動作では、ターゲット・フィールドの存在が必須ではなく、存在する場合、その値は単一のGeoJSON geometry
オブジェクトである必要があります。索引付けするドキュメントについて、そうでない場合には索引付け時にエラーが発生します。さらに、このような索引が存在する場合に、そうではないドキュメントを書き込もうとすると、書込み操作のエラーが発生します。脚注3
空間索引仕様では、true
値を使用して次のいずれかのブール値を含めることで、デフォルトとは異なるエラー処理動作を指定できます。(true
として指定できるのは、エラー処理フィールドの1つのみです。そうしないと、索引作成時に構文エラーが発生します。)
-
scalarRequired
- ブール値。オプションです。ターゲット・フィールドが存在し、その値としてGeoJSONgeometry
オブジェクトを持つ必要があります。索引付けするドキュメントについて、そうでない場合には索引付け時にエラーが発生します。さらに、このような索引が存在する場合に、そうではないドキュメントを書き込もうとすると、書込み操作のエラーが発生します。脚注4 -
lax
— ブール値。オプションです。ターゲット・フィールドが存在する必要も、その値としてGeoJSONgeometry
オブジェクトを持つ必要もありません。索引付けするドキュメントの索引付け時に、フィールドが欠落しているか、またはフィールド値がジオメトリでないドキュメントの索引付け時にエラーは発生しません。さらに、このような索引が存在する場合に、そうではないドキュメントを書き込もうとしても、書込み操作のエラーは発生しません。脚注5
ノート:
値がGeoJSON geometry
オブジェクトであるフィールドに対してSODA空間索引を作成しており、そのフィールドをターゲットとするQBEを使用するとき、索引とQBEの両方がそのフィールドに対して同じエラー処理動作を指定している場合には、QBEに対してのみの索引を選択できます。どちらにも、次のうち同じものを指定する必要があります。
-
scalarRequired : true
-
lax : true
-
scalarRequired : true
もlax : true
も指定しない
検索索引仕様
SODA検索索引仕様では、JSON検索索引を指定します。これにより、JSONドキュメントのテキスト・コンテキストが一般的な方法で索引付けされます。検索索引によって、(1)非定型の構造的問合せ、つまり、定期的には予測または使用されない可能性のある問合せと、(2)全文検索を使用する問合せの両方のパフォーマンスを向上させることができます。これは、JSONデータでの使用に特化して設計されたOracle Text索引です。
JSON検索索引は、ドキュメントに関する集計情報を累積して更新することもできます。ここには、一連のJSONドキュメントに含まれる構造および型情報の概要を示す、JSON データ・ガイドが提供されています。これらの文書内で使用されているフィールドに関するメタデータを記録します。
データ・ガイド情報は、次の用途に使用できます。
-
JSONドキュメントのセットを記述するJSONスキーマ・ドキュメントを生成します。
-
ドキュメント内のデータに対してSQL操作を実行するために使用できるデータベース・ビューを作成します。
-
ドキュメント内の追加または変更されたフィールドに対応する仮想列を自動的に追加または更新します。
JSON検索索引に含まれるデータガイド情報は、新しいJSONコンテンツが追加されると自動的に更新されます。
デフォルトで、検索索引仕様が、これらの両方の機能を提供する索引(一般索引とデータ・ガイド)を作成します。これらの機能は、それぞれsearch_on
(文字列)フィールドおよびdataguide
(文字列)フィールドで指定されます。
フィールドsearch_on
が値"none"
で存在する場合、索引はデータ・ガイド機能のみを提供します(一般検索索引なし)。フィールドdataguide
が値"off"
で存在する場合、一般的な検索索引機能のみが提供されます(データ・ガイドのサポートなし)。(dataguide
値が"on"
の場合、またはフィールドdataguide
がない場合は、データ・ガイドのサポートを指定します)。
none
以外に、フィールドsearch_on
は値"text"
または"text_value"
を持つこともできます。これらはどちらも、QBE演算子$contains
を使用する全文問合せをサポートしています。また、いずれも、$eq
、$ne
および$gt
などの他のQBE演算子を作成する非定型の問合せもサポートしています。
さらに、search_on
の値"text_value"
は数値の範囲に索引付けします。パフォーマンス・コストが追加されているため、これは別の値です。範囲の索引付けを必要としない場合は、text_value
のかわりに値text
を指定することで、一部の索引メンテナンスの時間とディスク領域を節約できます。search_on
のデフォルト値はtext_value
です。
関連項目:
-
SQLを使用して
json_value
Bツリー索引を作成する方法の詳細は、Oracle Database JSON開発者ガイドを参照 -
SQLを使用して複合
json_value
Bツリー索引で複数のJSONフィールドを索引付けする方法の詳細は、Oracle Database JSON開発者ガイドを参照してください。 -
索引付け順序の詳細は、Oracle Databaseパフォーマンス・チューニング・ガイドの索引内の列の順序付けおよびOracle Database SQL言語リファレンスのセクションASC | DESCを参照
-
json_value
式に作成されるBツリー索引のNULL ON EMPTY
句の使用の詳細は、Oracle Database JSON開発者ガイドを参照 -
JSON検索索引の詳細は、Oracle Database JSON開発者ガイドを参照
-
ISOの日付形式については、ISO 8601を参照
-
空間索引の詳細は、Oracle Spatial開発者ガイドを参照
脚注凡例
脚注1: デフォルトのエラー処理動作は、json_value
式で作成する関数索引にSQL句ERROR ON ERROR
およびNULL ON EMPTY
を使用することに相当します。脚注2:
scalarRequired
のtrue
値は、json_value
式で作成する関数索引にSQL句ERROR ON ERROR
を使用することに対応します。脚注3: デフォルトのエラー処理動作は、
json_value
式で作成する関数索引にSQL句ERROR ON ERROR
およびNULL ON EMPTY
を使用することに相当します。脚注4:
scalarRequired
のtrue
値は、json_value
式で作成する関数索引にSQL句ERROR ON ERROR
を使用することに対応します。脚注5:
lax
のtrue
値は、json_value
式で作成する関数索引にSQL句NULL ON ERROR
を使用することに対応します。