24.3 データ・ガイドの形式およびデータ・ガイドの作成方法

データ・ガイドには、フラット階層およびスキーマの3つの形式があります。いずれもSQLおよびPL/SQLでCLOB JSON文書として使用できます。階層データ・ガイドとスキーマ・データ・ガイドはどちらもJSONスキーマ文書(JSONスキーマ)ですが、JSON文書の検証用に設計されたのはスキーマ形式のみです。

  • スキーマ・データ・ガイドを使用して、JSON文書を検証できます。

  • 階層データ・ガイドまたはschemaデータ・ガイドを使用して、データ・ガイド情報に基づいて選択する特定の文書フィールドを使用することでビューを作成したり、仮想列を追加できます。

  • フラット・データ・ガイドを使用すると、文書で使用されるフィールドの型や発生頻度などのデータ・ガイド情報をより簡単に問い合せることができます。

フラット・データ・ガイドは、JSONではオブジェクトの配列として表され、それぞれが文書セット内の特定のパスのJSONデータを示します。発注書の文書のフラット・データ・ガイドで、例1-1の発注データのフラット・データ・ガイドについて説明しています。

階層データ・ガイドおよびスキーマ・データ・ガイドは、JSONではネストされたJSONデータを持つオブジェクトとして表され、JSONスキーマで定義されているのと同じ形式です。階層データ・ガイドはJSONスキーマですが、JSONデータの検証には使用しないでください。その場合はスキーマ・データ・ガイドを使用してください。発注書の文書の階層データ・ガイドで、例1-1の発注データの階層データ・ガイドについて説明しています。

JSON文書セットをスキャンすることで、任意の形式(フラット、階層またはスキーマ)のデータ・ガイドを作成できます。これを行うには、SQL集計ファンクションjson_dataguideを使用します。これは、データ・ガイド対応JSON検索索引を必要としません。データ・ガイドは、ファンクションjson_dataguideの起動時の文書セットを正確に反映します。

フラット・データ・ガイドまたは階層データ・ガイドは、JSON検索索引に格納されているデータ・ガイド情報から作成できます。これを行うには、PL/SQLファンクションDBMS_JSON.get_index_dataguideを使用します。(検索索引データからスキーマ形式のデータ・ガイドを作成することはできません。)

データ・ガイドには、文書セットで各JSONフィールドが使用される頻度などの統計フィールドを含めることができます。

  • SQLファンクションjson_dataguideを使用する場合、統計フィールドが存在するのは、3つ目の引数にDBMS_JSON.gather_statsを指定した場合のみです。これらは、gather_statsの起動時に動的に計算(最新に)されます。

  • PL/SQLファンクションDBMS_JSON.get_index_dataguideを使用する場合、統計フィールドはJSON検索索引で収集した場合にのみ存在します。自動的には更新されません。最新の情報にするには新たに収集します。

表24-1 データ・ガイドを取得するためのSQLファンクションおよびPL/SQLファンクション

データ・ガイド対応検索索引を使用するかどうか フラット・データ・ガイド 階層データ・ガイド スキーマ・データ・ガイド
はい PL/SQLファンクションget_index_dataguide(形式DBMS_JSON.FORMAT_FLAT) PL/SQLファンクションget_index_dataguide(形式DBMS_JSON.FORMAT_HIERARCHICAL) なし
いいえ SQLファンクションjson_dataguide (フォーマット引数を指定しないか、フォーマット引数としてDBMS_JSON.FORMAT_FLATを指定) SQLファンクションjson_dataguide (フォーマット引数としてDBMS_JSON.FORMAT_HIERARCHICALを指定) SQLファンクションjson_dataguide (形式引数としてDBMS_JSON.FORMAT_SCHEMAを指定)
データ・ガイド対応JSON検索索引に基づいてデータ・ガイドを取得するメリットは次のとおりです:
  • 文書セットに対する加算的な更新は、索引が同期されるたびに永続的なデータ・ガイド情報に自動的に反映されます。

  • このデータ・ガイド情報は永続的であるため、この情報に基づいてデータ・ガイドを取得する(PL/SQLファンクションget_index_dataguideを使用)方法は、通常、文書セットを分析してデータ・ガイドを取得する(SQLファンクションjson_dataguideを使用)方法よりも高速です。

データ・ガイド対応JSON検索索引を使用せずにデータ・ガイドを取得するメリットには、データ・ガイドの正確性を保証できることや、索引のメンテナンスのオーバーヘッドが不要であることなどがあります。さらに、索引から導出されたのでないデータ・ガイドは、次のような特定のユースケースに適しています:

  • JSONデータが外部表にある場合。外部表に索引を作成することはできません。

  • JSON列に索引を付けることができても、その索引があまり有用にならない場合。列に種類が異なる文書が含まれている場合などがこれに該当します。このようなときは、JSON列に格納された文書の種類を特定するための列を表に追加すると役立つ場合があります。そうすると、SQL集計関数とGROUP BYを持つデータ・ガイドを使用できるようになります。文書セットごとの複数のデータ・ガイドを参照してください。

関連項目: