18 JSONデータ・ガイド
JSONデータ・ガイドを使用すると、Oracle Databaseに格納されたJSON文書の構造と内容に関する情報を検出できます。
この情報には、次のような用途があります。
-
JSON文書セットについて記述するJSONスキーマ文書を生成します。
-
文書内のデータに対してSQL操作を実行するために使用できるビューを作成します。
-
文書内の追加または変更されたフィールドに対応する仮想列を自動的に追加または更新します。
トピック:
- JSONデータ・ガイドの概要
データ・ガイドは、一連のJSON文書に含まれる構造および型情報の概要を示します。これらの文書内で使用されているフィールドに関するメタデータを記録します。 - 永続的なデータ・ガイド情報: JSON検索索引の一部
JSONデータ・ガイド情報は、JSON検索索引インフラストラクチャの一部として永続的に保存でき、この情報は新しいJSONコンテンツの追加時に自動的に更新されます。これは、JSON検索索引の作成時のデフォルトの場合です。データ・ガイド情報は、索引インフラストラクチャの一部です。 - データ・ガイドの形式およびデータ・ガイドの作成方法
データ・ガイドには、フラットと階層の2つの形式があります。どちらもSQLおよびPL/SQLでCLOB
データとして使用できます。データ・ガイドは、JSON検索索引に保存されたデータ・ガイド情報から、またはJSON文書をスキャンすることによって構成できます。 - JSONデータ・ガイドのフィールド
JSONデータ・ガイドの事前定義済フィールドが記述されます。これらには、JSONスキーマ・フィールド(キーワード)およびOracle固有のフィールドが含まれます。 - フィールド列の優先名の指定
JSONフィールドは、データベース・ビュー内の列として、またはJSON列を含む同じ表に追加される仮想列として、データから投影されるようにできます。このような列に優先名を指定できます。 - データ・ガイド情報に基づくJSONデータのビューの作成
データ・ガイド情報に基づいて、JSON文書セットに存在する特定のスカラー・フィールドを投影した列を持つデータベース・ビューを作成できます。階層データ・ガイドを編集するか、SQL/JSONパス式を指定することによって、投影するフィールドを選択でき、フィールド出現の最小頻度を選択できます。 - データ・ガイド情報に基づくJSONフィールドの仮想列の追加と削除
JSON列のデータ・ガイド情報に基づいて、そのJSONデータからのスカラー・フィールドを同じ表内の仮想列として投影できます。投影されるスカラー・フィールドは、配列下にないフィールドです。 - データ・ガイド対応検索索引の変更トリガー
JSONデータが変更されると、データ・ガイド対応のJSON検索索引の一部の情報は自動的に更新されます。これが発生するたびに起動がトリガーされるプロシージャを指定できます。自分のPL/SQLプロシージャをこれに定義でき、事前定義済変更トリガー・プロシージャであるadd_vc
を使用することもできます。 - 文書セットごとの複数のデータ・ガイド
データ・ガイドは、所定のJSON文書セットの形状を反映しています。JSON列に、異なる構造または型情報を持つ異なる文書の型が含まれる場合、文書の型別に異なるデータ・ガイドを作成して使用できます。 - データ・ガイドの問合せ
データ・ガイドは、一連のJSON文書に関する情報です。Oracle SQLファンクションjson_dataguide
またはPL/SQLファンクションDBMS_JSON.get_index_dataguide
のいずれかを使用することで、取得するフラット・データ・ガイドからの情報を問合せられます。後者の場合、データ・ガイド対応JSON検索索引が、JSONデータ上で定義されている必要があります。 - 発注書の文書のフラット・データ・ガイド
サンプル・フラット・データ・ガイドのフィールドについて記述されます。これは発注書の文書セットに対応します。 - 発注書の文書の階層データ・ガイド
サンプル階層データ・ガイドのフィールドについて記述されます。これは発注書の文書セットに対応します。
18.1 JSONデータ・ガイドの概要
データ・ガイドは、一連のJSON文書に含まれる構造および型情報の概要を示します。これらの文書内で使用されているフィールドに関するメタデータを記録します。
たとえば、例2-1に示されたJSONオブジェクトの場合、その文書にShippingInstructions
オブジェクトがあり、これがname
、Address
、Phone
の各フィールドを持ち、それぞれの型が文字列、オブジェクト、配列であることが、その他の事項と一緒にデータ・ガイドに指定されます。同様に、オブジェクトAddress
の構造も配列Phone
内の要素の型として記録されます。
JSONデータ・ガイド情報は、JSON検索索引インフラストラクチャの一部として永続的に保存でき、この情報は新しいJSONコンテンツの追加時に自動的に更新されます。これは、JSON検索索引の作成時のデフォルトの場合です。データ・ガイド情報は、索引インフラストラクチャの一部です。
データ・ガイドは次の用途に使用できます。
-
データ・マイニング、ビジネス・インテリジェンス、その他のJSON文書の分析が関係するアプリケーションを開発するための基盤として。
-
検索を含む、要求されたJSON情報に関するユーザー支援を提供するための基盤として。
-
新しいJSON文書を文書セットに追加する前に、確認または操作する(特定のフィールドの検証、型チェック、除外など)目的。
このような目的のために、次の操作を実行できます。
-
フィールド長や最低特定の頻度で出現するフィールドなど、文書セットに関する情報について直接データ・ガイドに問い合せます。
-
データ・ガイドに従って、関係する特定のJSONフィールドの重要性に基づいて、フィールドを投影するビューを作成するか、仮想列を追加します。
注意:
-
ビューよりも仮想列に利点があるのは、仮想列の索引を構築し、オプティマイザ用に仮想列に関する統計を取得できることです。
-
仮想列には、一般的な列と同様に、1つの特定の表に対して1000列の制限があります。
永続的なデータ・ガイド情報を持つ列を記録するデータ・ディクショナリ・ビュー
次の静的データ・ディクショナリ・ビューが定義されます。それらを問い合せ、データ・ガイド対応JSON検索索引を持つJSON列がある表を参照できます。そのような表が含まれるかどうかによって、ビューは異なります。データ・ガイド対応の索引を持つJSON列がない表は、ビューに表示されません。
-
USER_JSON_DATAGUIDES
— 現在のユーザーが所有する表 -
ALL_JSON_DATAGUIDES
— 現在のユーザーがアクセス可能な表 -
DBA_JSON_DATAGUIDES
— すべての表
各ビューに、列TABLE_NAME
(表名)、COLUMN_NAME
(JSON列名)、DATAGUIDE
(データ・ガイド)があります。ビューALL_JSON_DATAGUIDE
およびDBA_JSON_DATAGUIDES
にも列OWNER
があり、この値は表の所有者です。
JSON列にデータ・ガイド対応JSON検索索引がある場合、列DATAGUIDE
の値はJSON列のデータ・ガイドであり、CLOB
インスタンスとしてフラット形式です。データ・ガイド対応の索引がない場合は、ビュー内にその列の行はありません。
関連項目
関連項目:
-
Oracle Databaseリファレンスおよび関連データ・ディクショナリ・ビュー
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database SQL言語リファレンス(SQLファンクション
json_dataguide
の詳細)
18.2 永続的なデータ・ガイド情報: JSON検索索引の一部
JSONデータ・ガイド情報は、JSON検索索引インフラストラクチャの一部として永続的に保存でき、この情報は新しいJSONコンテンツの追加時に自動的に更新されます。これは、JSON検索索引の作成時のデフォルトの場合です。データ・ガイド情報は、索引インフラストラクチャの一部です。
CREATE SEARCH INDEX
をキーワードFOR JSON
と一緒に使用して、検索索引、データ・ガイド、またはこの両方を同時に作成できます。デフォルトの動作では、両方が作成されます。
JSON検索索引の検索のサポートを有効にせずに、JSON検索索引の一部として永続的データ・ガイド情報を作成するには、SEARCH_ON NONE
をPARAMETERS
句内でCREATE SEARCH INDEX
に対して指定します。ただし、DATAGUIDE
の値はON
(デフォルト値)のままにします。例18-1に、これを示します。
ALTER INDEX
... REBUILD
を使用して、既存のJSON検索索引のデータ・ガイドのサポートを有効または無効にできます。例18-2にこれを示します。ここでは、例24-17でデフォルトで追加されたデータ・ガイド・サポートを無効にします。
注意:
データ・ガイド対応JSON検索索引を作成する、または既存のJSON検索索引をデータ・ガイド対応にするには、データベース権限CTXAPP
が必要です。
注意:
データ・ガイド対応JSON検索索引は、is json
チェック制約がある列にのみ構築できます。さらに、索引内のデータ・ガイド情報を更新するには、このチェック制約を有効にする必要があります。
このチェック制約が何かの理由で無効になった場合、次のようにして索引内のデータ・ガイド情報を再構築してチェック制約を再有効化し、自動データ・ガイド・サポート更新を再開する必要があります。
ALTER INDEX index_name REBUILD ('dataguide off');
ALTER INDEX index_name REBUILD ('dataguide on');
ALTER TABLE table_name ENABLE CONSTRAINT is_json_check_constraint_name;
具体的には、SQL*Loader (sqlldr
)を使用するとis json
チェック制約は無効になります。
永続的なデータ・ガイド情報は検索索引インフラストラクチャの一部であるため、常にライブです。そのコンテンツは、索引が同期されるときに毎回自動更新されます。索引付けされたデータの変更は、検索索引に反映されます。索引が同期された後にのみ、データ・ガイド情報が含まれます。
さらに、検索索引内のデータ・ガイド情報の更新では、常に情報が追加されます。情報が削除されることはありません。これは、索引が文書セット内のデータを正確に反映しないことがよくあるもう1つの理由です。適用先の文書内での削除は、データ・ガイド情報には反映されません。そのような情報が現在のデータを正確に反映する必要がある場合は、JSON検索索引を削除し、新しく作成します。
検索索引内の永続的データ・ガイド情報には、文書セット内での各JSONフィールドの使用頻度などの統計も含めることができます。統計は、文書セットに関する統計を明示的に収集した場合にのみ存在します(JSON検索索引に関して収集するなど)。自動的には更新されません。統計が最新のものであるようにするには、統計を新たに収集します。例18-3は、JSON検索索引po_search_idx
によって索引付けされたJSONデータに関する統計を収集します。この索引は、例24-17で作成されます。
注意:
シャーディング環境でローカル・データ・ガイド対応JSON検索索引が作成されると、個別の各シャードに、そのシャード内に保存されているJSON文書のデータ・ガイド情報が含まれます。この理由から、シャード・カタログ・データベースに対してデータ・ガイド関連操作を起動すると、その操作に効力はありません。
パーティション表のデータ・ガイド対応検索索引に関する考慮事項
パーティション表のローカルなデータ・ガイド対応JSON検索索引のデータ・ガイド情報は、パーティション化されません。すべてのパーティションで共有されます。
索引内のデータ・ガイド情報は加算的なものであるため、パーティションの削除、マージ、分割、切捨ては索引には影響しません。
パーティション表をパーティション化されていない表と交換すると、パーティション表の索引のデータ・ガイド情報が更新されます。ただし、パーティション化されていない表のデータ・ガイド対応索引は再構築する必要があります。
ハッシュ表データをシリアライズする場合は永続的なデータ・ガイド情報を使用しない
Javaハッシュ表または連想配列(JavaScriptにあるものなど)をJSONオブジェクトとしてシリアライズする場合、永続的なデータ・ガイド情報の使用を避けます。
GSONやJacksonなどの一般的なライブラリで提供されるデフォルトのハッシュ表シリアライズでは、ハッシュ表のキー・エントリから取得されたオブジェクト・フィールド名と、対応するJavaハッシュ表の値から取得されたフィールド値を持つテキストのJSONドキュメントが生成されます。単一のJavaハッシュ表エントリをシリアライズすると、新しい一意のJSONフィールドと値が生成されます。
永続的なデータ・ガイド情報は、データの形状を反映し、新しいJSON文書が挿入されると自動的に更新されます。各ハッシュ表のキー値のペアによって、JSON検索索引の個別のエントリが作成されます。そのため、このようなシリアライズによって、索引に保持される情報のサイズが大幅に増える可能性があります。サイズが大きいことに加え、多くの索引が更新されるためにパフォーマンスに悪影響がおよび、DMLが遅くなります。
ハッシュ表をシリアライズする、またはかわりに連想配列をオブジェクトのJSON配列としてシリアライズする場合、それぞれにハッシュ表キー・エントリから導出されたフィールドが含まれ、そのような問題は起きません。
ハッシュ表またはJSONオブジェクトとしての連想配列のデフォルトのシリアライズは、開発者によって割り当てられたフィールド名を持つオブジェクトと区別できません。JSONデータ・ガイドは、メタデータのようなフィールド名のどれが開発者が割り当てたものであり、データのようなフィールド名のどれがハッシュ表または連想配列から導出されたものかを識別できません。すべてのフィールド名は、開発者が指定したのと同様に、基本的にメタデータとして扱われます。
次に例を示します。
-
animalName
をハッシュ・キーとして持ち、一連の動物プロパティを値として持つハッシュ表を使用してアプリケーション・オブジェクトを構築する場合、デフォルトのシリアライズは、各ハッシュ表エントリについて個別のフィールド("cat"
、"mouse"
、...)を持ち、対応する動物プロパティを持つオブジェクトになるフィールド値を持つ単一のJSONオブジェクトになります。これは、通常ハッシュ・キーから導出されたフィールド("cat"
、"mouse"
、...)数が多数になるため、データ・ガイドのサイズとパフォーマンスの面で問題になる可能性があります。 -
かわりに、
animal
構造体のアプリケーション配列を構築し、それぞれに1つのフィールドanimalName
(値"cat"
または"mouse"
...を持つ)を持たせた場合、シリアライズはオブジェクトのJSON配列となり、それぞれに同じフィールドanimalName
を持ちます。対応するデータ・ガイドにサイズやパフォーマンスの問題はありません。
例18-1 JSONデータ・ガイドの検索用でない永続的サポートの有効化
CREATE SEARCH INDEX po_dg_only_idx ON j_purchaseorder (po_document) FOR JSON
PARAMETERS ('SEARCH_ON NONE');
例18-2 既存のJSON検索索引のJSONデータ・ガイド・サポートの無効化
ALTER INDEX po_search_idx REBUILD PARAMETERS ('DATAGUIDE OFF');
例18-3 JSON検索索引を使用したJSONデータに関する統計情報の収集
EXEC DBMS_STATS.gather_index_stats(docuser, po_search_idx, NULL, 99);
関連項目:
-
CREATE SEARCH INDEX
のPARAMETERS
句の詳細は、Oracle Textリファレンスを参照してください。 -
ALTER INDEX
...REBUILD
のPARAMETERS
句の詳細は、Oracle Textリファレンスを参照してください。 -
Faster XML / Jackson (Jackson JSONプロセッサの詳細)
-
google / gson (GSON Javaライブラリの詳細)
18.3 データ・ガイドの形式およびデータ・ガイドの作成方法
データ・ガイドには、フラットと階層の2つの形式があります。どちらもSQLおよびPL/SQLでCLOB
データとして使用できます。データ・ガイドは、JSON検索索引に保存されたデータ・ガイド情報から、またはJSON文書をスキャンすることによって構成できます。
-
フラット・データ・ガイドを使用して、フィールド頻度や型などのデータ・ガイド情報を問い合せられます。
フラット・データ・ガイドはJSONでオブジェクトの配列として表され、それぞれが文書セット内の特定のパスのJSONデータを示します。発注書の文書のフラット・データ・ガイドで、例2-1の発注データのフラット・データ・ガイドについて説明しています。
-
階層データ・ガイドを使用して、データ・ガイド情報に基づいて選択する特定のフィールドを使用することでビューを作成する、または仮想列を追加できます。
階層的データ・ガイドは、ネストされたJSONデータを持つオブジェクトとして、JSONで表されます。これは、JSONスキーマ(バージョン4、json-schema-core)で定義されているものと同じ形式です。発注書の文書の階層データ・ガイドで、例2-1の発注データの階層データ・ガイドについて説明しています。
PL/SQLファンクションDBMS_JSON.get_index_dataguide
を使用して、JSON検索索引に格納されているデータ・ガイド情報からデータ・ガイドを取得します。
SQL集計関数json_dataguide
を使用して、文書セットをスキャンし、データ・ガイド対応検索索引があるかどうかにかかわらず、データ・ガイドを設定して構築することもできます。データ・ガイドは、ファンクションの起動時の文書セットを正確に反映します。
表18-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 |
該当なし |
-
文書セットに対する加算的な更新は、索引が同期されるたびに永続的なデータ・ガイド情報に自動的に反映されます。
-
このデータ・ガイド情報は永続的であるため、この情報に基づいてデータ・ガイドを取得する(PL/SQLファンクション
get_index_dataguide
を使用)方法は、文書セットを分析してデータ・ガイドを取得する(SQLファンクションjson_dataguide
を使用)方法よりも高速です。 -
文書セットに関する統計情報を収集している場合、これらは格納された情報に含まれ、それから取得されたデータ・ガイドに含まれます。
-
ビューまたは仮想列の作成時に列名の競合が発生すると、自動的に解決されます。
データ・ガイド対応JSON検索索引を使用せずにデータ・ガイドを取得するメリットには、データ・ガイドの正確性を保証できることや、索引のメンテナンスのオーバーヘッドが不要であることなどがあります。さらに、索引から導出されたのでないデータ・ガイドは、次のような特定のユースケースに適しています。
-
JSONデータが外部表にある場合。外部表に索引を作成することはできません。
-
JSON列に索引を付けることができても、その索引があまり有用にならない場合。列に種類が異なる文書が含まれている場合などがこれに該当します。このようなときは、JSON列に格納された文書の種類を特定するための列を表に追加すると役立つ場合があります。そうすると、SQL集計関数と
GROUP BY
を持つデータ・ガイドを使用できるようになります。文書セットごとの複数のデータ・ガイドを参照してください。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database SQL言語リファレンス(SQLファンクション
json_dataguide
の詳細) -
Oracle Database SQL言語リファレンス(PL/SQL定数
DBMS_JSON.FORMAT_FLAT
およびDBMS_JSON.FORMAT_HIERARCHICAL
の詳細)
18.4 JSONデータ・ガイドのフィールド
JSONデータ・ガイドの事前定義済フィールドが記述されます。これらには、JSONスキーマ・フィールド(キーワード)およびOracle固有のフィールドが含まれます。
データ・ガイド内のフィールドの出現箇所は、JSON文書セットのいずれか、または複数の中に存在する1つのフィールドに対応します。
JSONスキーマ・フィールド(キーワード)
JSONスキーマはJSONオブジェクトが格納されたJSON文書であり、それ自体に子オブジェクト(サブスキーマ)を含めることができます。JSONスキーマで定義されているフィールドは、JSONスキーマ・キーワードと呼ばれます。表18-2に、Oracle JSONデータ・ガイド内で使用できるキーワードを示します。キーワードproperties
、items
、oneOf
は階層データ・ガイド内でのみ使用されます(JSONスキーマ)。キーワードtype
はフラットデータ・ガイド内と階層データ・ガイド内の両方で使用されます。
表18-2 JSONスキーマ・フィールド(キーワード)
フィールド(キーワード) | 値の説明 |
---|---|
properties |
1つのオブジェクトであり、これに属するメンバーは、階層データ・ガイド(JSONスキーマ)によって表されるJSONデータ内で使用されるJSONオブジェクトのプロパティを表します。 |
items |
1つのオブジェクトであり、これに属するメンバーは、階層データ・ガイド(JSONスキーマ)によって表されるJSONデータ内で使用される配列の要素(項目)を表します。 |
oneOf |
1つの配列であり、これに属する個々の項目は、階層データ・ガイド(JSONスキーマ)によって表されるJSONデータ内のJSONフィールドの1つまたは複数の出現箇所を表します。 |
type |
1つの文字列であり、フラットまたは階層データ・ガイドによって表されるJSONデータのいくつかの型の名前を表します。 可能な値は、 |
Oracle固有のJSONデータ・ガイド・フィールド
JSONスキーマ・キーワードに加えて、JSONデータ・ガイドはOracleデータ・ガイド固有のフィールドを格納できます。すべてのフィールド名に、接頭辞o:
が付きます。これについては表18-3で説明します。
表18-3 Oracle固有のデータ・ガイド・フィールド
フィールド | 値の説明 |
---|---|
o:path |
JSON文書からJSONフィールドへのパスを示します。フラット・データ・ガイドでのみ使用されます。値は単純なSQL/JSONパス式(フィルタ式なし)であり、リラクゼーション(暗黙的配列ラッピングまたはラッピングなし)が付く場合がありますが、配列ステップやファンクション・ステップが付くことはありません。SQL/JSONパス式の構文を参照してください。 |
o:length |
JSONフィールド値の最大長をバイト単位で示します。値は常に2の累乗です。たとえば、すべての実際のフィールド値の最大長が5である場合、 |
o:preferred_column_name |
所定のデータ・ガイドに固有の識別子であり、大文字と小文字が区別されます。ビュー列またはデータ・ガイドを使用して作成された仮想列に使用する名前として選択します。 データ・ガイドがSQLファンクション |
o:frequency |
所定のフィールドを含むJSON文書の割合を示します。同じ配列の下に発生したフィールドの重複は無視されます。(統計情報が文書セットに関して収集された場合にのみ、使用できます。) データ・ガイドがSQLファンクション |
o:num_nulls |
対象のスカラー・フィールドの値がJSON データ・ガイドがSQLファンクション |
o:high_value |
すべての文書中での対象のスカラー・フィールドの最高値を示します。(統計情報が文書セットに関して収集された場合にのみ、使用できます。) データ・ガイドがSQLファンクション |
o:low_value |
すべての文書中での対象のスカラー・フィールドの最低値を示します。(統計情報が文書セットに関して収集された場合にのみ、使用できます。) データ・ガイドがSQLファンクション |
o:last_analyzed |
統計情報が最後に文書セットに関して収集された日時を示します。(統計情報が文書セットに関して収集された場合にのみ、使用できます。) データ・ガイドがSQLファンクション |
これが存在する場合、フィールドo:preferred_column_name
のデフォルト値は、対応するJSONフィールド名と同じであり、JSON列名に$
が付加された接頭辞が付き、ASCII以外の文字は削除されます。この結果のフィールド名が、同じデータ・ガイド内にすでにある場合、新しい順序番号が末尾に付加された固有の名前が付けられます。
列がエスケープされた小文字(たとえば'PO_Column'
がpo_column
のかわりに使用されているなど)を使用して定義されているのでないかぎり、列名は大文字です。たとえば、フィールドUser
がJSON列po_document
内のデータにある場合、このデフォルト値はPO_DOCUMENT$User
です。
PL/SQLプロシージャDBMS_JSON.rename_column
を使用して、所定のフィールドおよび型に対するo:preferred_column_name
の値を設定できます。
フィールドo:preferred_column_name
は、JSON列を格納する表内の新しい仮想列の名前を付けるために使用されます。または、表内のその他の列も格納する新しいビュー内の列の名前を付けるために使用されます。どちらの場合も、o:preferred_column_name
によって指定される名前は、表内の他の列との間で固有である必要があります。さらに、この名前は、文書セット内のすべての型のすべてのJSONフィールド間で固有である必要があります。DBMS_JSON.get_index_dataguide
によって、これらの方法でデフォルト値が固有であることが保証されます。
DBMS_JSON.rename_column
を使用して指定する名前によって競合が発生する場合、指定した名前は無視され、そのかわりにシステムが生成した名前が使用されます。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細) -
Oracle Database SQL言語リファレンス(SQLファンクション
json_dataguide
の詳細)
18.5 フィールド列の優先名の指定
JSONフィールドは、データベース・ビュー内の列として、またはJSON列を含む同じ表に追加される仮想列として、データから投影されるようにできます。このような列に優先名を指定できます。
同じ文書セットから取得されたデータ・ガイドが、この投影を定義するために使用されます。投影された各列の名前は、投影されるJSONデータ・フィールド用にデータ・ガイド・フィールドo:preferred_column_name
から取得されます。優先名を指定すると、このデータ・ガイド・フィールドの値が変更されます。
JSONデータにデータ・ガイド対応の検索索引がある場合、所定のフィールドから投影された列に優先名を指定するためにプロシージャDBMS_JSON.rename_column
を使用できます。例18-4に、これを示します。表18-4に示すように、様々なフィールドから投影された列に優先名を指定します。(フィールドは、プロシージャDBMS_JSON.create_view
、DBMS_JSON.create_view_on_path
またはDBMS_JSON.add_virtual_columns
を使用するときに列として投影されます。)
表18-4 いくつかのJSONフィールド列の優先名
フィールド | JSON型 | 優先列名 |
---|---|---|
PONumber |
number |
PONumber |
Phone (オブジェクトでなく文字列としての電話で番号)
|
string |
Phone |
type (電話の型)
|
string |
PhoneType |
number (電話番号)
|
string |
PhoneNumber |
ItemNumber (明細項目番号)
|
number |
ItemNumber |
Description (部品の説明)
|
string |
PartDescription |
関連項目:
-
JSONデータ・ガイド・フィールド(フィールド
o:preferred_column_name
のデフォルト値の詳細およびDBMS_JSON.rename_column
を使用するときに発生する可能性がある名前の競合) -
JSON列を使用した表の作成(ここで参照されるJSONデータの詳細)
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view_on_path
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.add_virtual_columns
に関する詳細)
例18-4 いくつかのJSONフィールド用の優先列名の指定
BEGIN
DBMS_JSON.rename_column(
'J_PURCHASEORDER', 'PO_DOCUMENT', '$.PONumber',
DBMS_JSON.TYPE_NUMBER, 'PONumber');
DBMS_JSON.rename_column(
'J_PURCHASEORDER', 'PO_DOCUMENT', '$.ShippingInstructions.Phone',
DBMS_JSON.TYPE_STRING, 'Phone');
DBMS_JSON.rename_column(
'J_PURCHASEORDER', 'PO_DOCUMENT', '$.ShippingInstructions.Phone.type',
DBMS_JSON.TYPE_STRING, 'PhoneType');
DBMS_JSON.rename_column(
'J_PURCHASEORDER', 'PO_DOCUMENT', '$.ShippingInstructions.Phone.number',
DBMS_JSON.TYPE_STRING, 'PhoneNumber');
DBMS_JSON.rename_column(
'J_PURCHASEORDER', 'PO_DOCUMENT', '$.LineItems.ItemNumber',
DBMS_JSON.TYPE_NUMBER, 'ItemNumber');
DBMS_JSON.rename_column(
'J_PURCHASEORDER', 'PO_DOCUMENT', '$.LineItems.Part.Description',
DBMS_JSON.TYPE_STRING, 'PartDescription');
END;
/
18.6 データ・ガイド情報に基づくJSONデータのビューの作成
データ・ガイド情報に基づいて、JSON文書セットに存在する特定のスカラー・フィールドを投影した列を持つデータベース・ビューを作成できます。階層データ・ガイドを編集するか、SQL/JSONパス式を指定することによって、投影するフィールドを選択でき、フィールド出現の最小頻度を選択できます。
(同じJSON文書セットに基づいて、異なるフィールドを投影する複数のビューを作成できます。文書セットごとの複数のデータ・ガイドを参照してください。)
SQL/JSONファンクションjson_table
— SQL/JSONファンクション(JSON_TABLEを使用したJSONデータに対するビューの作成を参照)を使用してJSONフィールドを投影することで、ビューを作成できます。もう1つの方法は、PL/SQLプロシージャDBMS_JSON.create_view
またはDBMS_JSON.create_view_on_path
を使用して、使用可能なデータ・ガイド情報に基づいて選択したフィールドを投影し、ビューを作成することです。
この情報は、投影するフィールドのみが含まれた階層データ・ガイド、またはデータ・ガイド対応JSON検索索引のいずれかに基づくことができ、SQL/JSONパス式と最小フィールド頻度をあわせて使用できます。
前者の場合、プロシージャcreate_view
を使用します。(階層)データ・ガイドを編集し、目的のフィールドを指定できます。この場合、データ・ガイド対応検索索引は必要ありません。
後者の場合、プロシージャcreate_view_on_path
を使用します。この場合、データ・ガイド対応検索索引が必要ですが、データ・ガイドは必要ありません。SQL/JSONパス式を指定し、必要に応じて出現の最小頻度を指定します。投影される文書セット内のフィールドには、次の両方が含まれます。
-
配列下にないすべてのスカラー・フィールド。
-
指定したSQL/JSONパス式が対象とするデータ内のすべてのレベルのすべてのスカラー・フィールド。
ビューを作成する方法に関係なく、列として投影されるJSONフィールドに加えて、表内のJSON以外の列もビューの列になります。
プロシージャcreate_view_on_path
を使用する場合、指定するPATH
引数は、単純なSQL/JSONパス式(フィルタ式なし)であり、リラクゼーション(暗黙的配列ラッピングまたはラッピングなし)が付く場合がありますが、配列ステップやファンクション・ステップは付かないものである必要があります。SQL/JSONパス式の構文を参照してください。
どのように作成されても、所定のビュー定義の基礎となるデータ・ガイドは静的であり、必ずしも文書セット内の最新のデータを正確に反映しているわけではありません。ビューに投影されるフィールドは、ビューの作成時に決定されます。
具体的には、create_view_on_path
(データ・ガイド対応検索索引が必要)を使用する場合、対象となるフィールドは、所定のパス式で指定されたフィールドと、所定の頻度以上のフィールドです(ビュー作成時の索引データに基づく)。
トピック:
- 階層データ・ガイドに基づくJSONデータのビューの作成
階層的なデータ・ガイドを使用して、文書からの指定されたJSONフィールドを投影する列を持つデータベース・ビューを作成できます。投影されたフィールドは、データ・ガイド内のフィールドです。投影するフィールドのみを含むようにデータ・ガイドを編集できます。 - 階層データ・ガイドに基づくJSONデータのビューの作成
データ・ガイド対応JSON検索索引内の情報を使用して、文書からのJSONフィールドを投影する列を持つデータベース・ビューを作成できます。投影されるフィールドは、配列下にないスカラー・フィールドと、指定したSQL/JSONパス式の対象データ内のスカラー・フィールドです。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view_on_path
に関する詳細)
18.6.1 階層データ・ガイドに基づくJSONデータのビューの作成
階層的なデータ・ガイドを使用して、文書からの指定されたJSONフィールドを投影する列を持つデータベース・ビューを作成できます。投影されたフィールドは、データ・ガイド内のフィールドです。投影するフィールドのみを含むようにデータ・ガイドを編集できます。
PL/SQLファンクションDBMS_JSON.get_index_dataguide
を使用することで、階層データ・ガイドを取得できます。そのためには、JSONデータの列にデータ・ガイド対応JSON検索索引を定義する必要があります。
取得したデータ・ガイドを編集することで、特定のフィールドのみを含め、任意の型の長さを変更し、フィールドの名前を変更できます。結果のデータ・ガイドに、ビューの列として投影されるJSONデータのフィールドが指定されます。
PL/SQLプロシージャDBMS_JSON.create_view
を使用してビューを作成します。
例18-5に、これを示します。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細) -
Oracle Database SQL言語リファレンス(PL/SQL定数
DBMS_JSON.FORMAT_HIERARCHICAL
の詳細)
例18-5 GET_INDEX_DATAGUIDEを使用して取得するデータ・ガイドを使用したビューの作成
この例では、データ・ガイド対応JSON検索索引列po_document
(表j_purchaseorder
内)から取得した階層データ・ガイド内に存在するすべてのフィールドを投影するビューを作成します。(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。)
EXEC DBMS_JSON.create_view(
'VIEW1',
'J_PURCHASEORDER',
'PO_DOCUMENT',
DBMS_JSON.get_index_dataguide('J_PURCHASEORDER',
'PO_DOCUMENT',
DBMS_JSON.FORMAT_HIERARCHICAL));
DESCRIBE view1
Name Null? Type
-------------------------------- -------- ---------------------------
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
ID NOT NULL RAW(16)
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$AllowPartialShipment VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
Phone VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
PO_DOCUMENT$UPCCode NUMBER
PO_DOCUMENT$UnitPrice NUMBER
PartDescription VARCHAR2(32)
PO_DOCUMENT$Quantity NUMBER
ItemNumber NUMBER
PhoneType VARCHAR2(8)
PhoneNumber VARCHAR2(16)
18.6.2 パス式に基づくJSONデータのビューの作成
データ・ガイド対応JSON検索索引内の情報を使用して、文書からのJSONフィールドを投影する列を持つデータベース・ビューを作成できます。投影されるフィールドは、配列下にないスカラー・フィールドと、指定したSQL/JSONパス式の対象データ内のスカラー・フィールドです。
たとえば、パス式が$
の場合、すべてのスカラー・フィールドが投影されます。これは、文書のルート(最上部)が対象であるためです。例18-6に、これを示します。パスが$.LineItems.Part
の場合、$.LineItems.Part
の対象データ内にあるすべてのレベルのスカラー・フィールドのみが投影されます(配列下以外のすべての場所のスカラー・フィールドに加えて)。例18-7に、これを示します。
JSON文書セットに関する統計情報を収集する場合、データ・ガイド対応JSON検索索引内のデータ・ガイド情報は、文書セット全体で、文書内に存在するフィールドへの各パスの出現頻度を記録します。ビューを作成するときは、所定の最小出現頻度(割合として)のスカラー・フィールドのみが、ビュー列として投影されることを指定できます。これには、パラメータFREQUENCY
の値として、プロシージャDBMS_JSON.create_view_on_path
にゼロ以外の値を指定します。
たとえば、パスを$
として指定し、最小頻度を50
として指定する場合、文書の半分(50%)以上に出現するすべてのスカラー・フィールド($
は文書全体を対象とするため、すべてのパス)が投影されます。例18-8に、これを示します。
引数PATH
の値は単純なSQL/JSONパス式(フィルタ式なし)であり、リラクゼーション(暗黙的配列ラッピングまたはラッピングなし)が付く場合がありますが、配列ステップやファンクション・ステップが付くことはありません。SQL/JSONパス式の構文を参照してください。
-
JSON文書セットの統計情報を収集したことがありません。(頻度情報は、データ・ガイド対応JSON検索索引に含まれません。)
-
FREQUENCY
引数(DBMS_JSON.create_view_on_path
内)はゼロ(0)です。
注意:
FREQUENCY
引数がゼロ以外の場合、文書セットに関する統計情報を収集していても、最後に統計情報を収集した後に追加されたすべての文書の統計情報は、索引には含まれません。これは、統計の収集後に追加されたすべてのフィールドは無視される(投影されない)ことを意味します。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view_on_path
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細)
例18-6 すべてのスカラー・フィールドを投影するビューの作成
指定されたパスが$
であるため、すべてのスカラー・フィールドがビュー内に表れます。
(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。下線の行は、例18-8にはありません。)
EXEC DBMS_JSON.create_view_on_path('VIEW2',
'J_PURCHASEORDER',
'PO_DOCUMENT',
'$');
DESCRIBE view2;
Name Null? Type
-------------------------------- -------- ------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$AllowPartialShipment VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
Phone VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
PO_DOCUMENT$UPCCode NUMBER
PO_DOCUMENT$UnitPrice NUMBER
PartDescription VARCHAR2(32)
PO_DOCUMENT$Quantity NUMBER
ItemNumber NUMBER
PhoneType VARCHAR2(8)
PhoneNumber VARCHAR2(16)
例18-7 パス式で対象とされたスカラー・フィールドを投影するビューの作成
フィールドItemnumber
、PhoneType
、PhoneNumber
はビュー内には表れません。投影されるフィールドは、配列下にないスカラー・フィールドに加えて、$.LineItems.Part
で対象とされるデータ内のすべてのレベルにあるスカラー・フィールドのみです(つまり、パスが$.LineItems.Part
で始まるパスにあるスカラー・フィールド)。(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。)
SQL> EXEC DBMS_JSON.create_view_on_path('VIEW4',
'J_PURCHASEORDER',
'PO_DOCUMENT',
'$.LineItems.Part');
SQL> DESCRIBE view4;
Name Null? Type
-------------------------------- -------- ------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$AllowPartialShipment VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
Phone VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
PO_DOCUMENT$UPCCode NUMBER
PO_DOCUMENT$UnitPrice NUMBER
PartDescription VARCHAR2(32)
例18-8 所定の頻度のスカラー・フィールドを投影するビューの作成
文書のすべて(100%)に出現するすべてのスカラー・フィールドがビュー内に表れます。フィールドAllowPartialShipment
は文書のすべてには出現しないため、列PO_DOCUMENT$AllowPartialShipment
はビュー内にありません。フィールドPhone
、PhoneType
、PhoneNumber
の場合も同様です。
(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。)
SQL> EXEC DBMS_JSON.create_view_on_path('VIEW3',
'J_PURCHASEORDER',
'PO_DOCUMENT',
'$',
100);
SQL> DESCRIBE view3;
Name Null? Type
-------------------------------- -------- ------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
PO_DOCUMENT$UPCCode NUMBER
PO_DOCUMENT$UnitPrice NUMBER
PartDescription VARCHAR2(32)
PO_DOCUMENT$Quantity NUMBER
ItemNumber NUMBER
関連項目
18.7 データ・ガイド情報に基づくJSONフィールドの仮想列の追加と削除
JSON列のデータ・ガイド情報に基づいて、そのJSONデータからのスカラー・フィールドを同じ表内の仮想列として投影できます。投影されるスカラー・フィールドは、配列下にないフィールドです。
パフォーマンスを向上する目的で、仮想列を使用して次のすべてを実現できます。
-
列に索引を構築します。
-
オプティマイザ用に列の統計を収集します。
-
インメモリー列ストア(IM列ストア)に列をロードします。
注意:
仮想列には、一般的な列と同様に、1つの特定の表に対して1000列の制限があります。
PL/SQLプロシージャDBMS_JSON.add_virtual_columns
を使用して、JSON列用にデータ・ガイド情報に基づく仮想列を追加します。仮想列を追加する前に、add_virtual_columns
プロシージャはまず、前に起動されたadd_virtual_columns
またはデータ・ガイド変更トリガー・プロシージャadd_vc
によって、同じJSON列のフィールドから作成された既存の仮想列をすべて削除します(実質上、DBMS_JSON.drop_virtual_columns
プロシージャの動作を実行していることになります)。
プロシージャadd_virtual_columns
に提供するデータ・ガイド情報には、これ以外に次の2つのソースがあります。
-
引数として渡す階層データ・ガイドからの情報があります。データ・ガイド内の配列下にないすべてのスカラー・フィールドは、仮想列として投影されます。データ・ガイド内のその他すべてのフィールドは無視されます(投影されません)。
この場合、データ・ガイドが投影するスカラー・フィールド(配列下にないもの)を指定するように編集してから、データ・ガイドを渡すことができます。この場合、データ・ガイド対応検索索引は必要ありません。
-
データ・ガイド対応JSON検索索引からの情報があります。
この場合、投影されるスカラー・フィールドの最小出現頻度を引数
FREQUENCY
の値としてプロシージャadd_virtual_columns
に指定できます。この場合、データ・ガイド対応検索索引が必要ですが、データ・ガイドは必要ありません。
また、追加した仮想列を非表示にすることも指定できます。SQL describe
コマンドでは、非表示にした列は列挙されません。
-
階層データ・ガイドを
add_virtual_columns
に渡す場合、特定のスカラー・フィールド(配列下にないもの)の投影を非表示の仮想列として指定できます。これは、データ・ガイドの列の説明に"o:hidden": true
を追加することで行います。 -
データ・ガイド対応JSON検索索引を
add_virtual_columns
と一緒に使用する場合、PL/SQLTRUE
の値を引数HIDDEN
に指定し、追加されたすべての仮想列が非表示になるようにします。(HIDDEN
のデフォルト値はFALSE
であり、これは追加された仮想列が非表示でないことを意味します。)
トピック:
- 階層データ・ガイドに基づくJSONフィールドの仮想列の追加
階層データ・ガイドを使用して、JSONデータからのスカラー・フィールドを同じ表内の仮想列として投影できます。データ・ガイド内の配列下にないすべてのスカラー・フィールドは、仮想列として投影されます。データ・ガイド内のその他すべてのフィールドは無視されます(投影されません)。 - データ・ガイド対応検索索引に基づくJSONフィールドの仮想列の追加
JSON列のデータ・ガイド対応検索索引を使用して、そのJSONデータからのスカラー・フィールドを同じ表内の仮想列として投影できます。配列下にないスカラー・フィールドのみが投影されます。投影するフィールドの最小出現頻度を指定できます。 - データ・ガイド情報に基づくJSONフィールドの仮想列の削除
プロシージャDBMS_JSON.drop_virtual_columns
を使用して、JSONフィールド用にJSONデータの列内に追加されたすべての仮想列を削除できます。
関連項目
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス (
DBMS_JSON.add_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.create_view_on_path
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.drop_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細)
18.7.1 階層データ・ガイドに基づくJSONフィールドの仮想列の追加
階層データ・ガイドを使用して、JSONデータからのスカラー・フィールドを同じ表内の仮想列として投影できます。データ・ガイド内の配列下にないすべてのスカラー・フィールドは、仮想列として投影されます。データ・ガイド内のその他すべてのフィールドは無視されます(投影されません)。
PL/SQLファンクションDBMS_JSON.get_index_dataguide
を使用することで、階層データ・ガイドを取得できます。データ・ガイド対応JSON検索索引は、JSONデータの列に定義されている必要があります。
取得したデータ・ガイドを編集することで、特定のスカラー・フィールド(配列下にないもの)のみを含め、フィールドの名前を変更し、フィールドの型の長さを変更できます。結果のデータ・ガイドに、新しい仮想列として投影されるこれらのフィールドが指定されます。配列下にないスカラー・フィールドでないデータ・ガイド内のすべてのフィールドは無視されます(投影されません)。
PL/SQLプロシージャDBMS_JSON.add_virtual_columns
を使用して、投影されたフィールドを含むJSON列を格納する表に仮想列を追加します。まずプロシージャは、以前のadd_virtual_columns
の起動またはデータ・ガイド変更トリガー・プロシージャadd_vc
(実質的に、このプロシージャの実行内容はプロシージャDBMS_JSON.drop_virtual_columns
と同じ)によって同じJSON列内のフィールドから投影された既存の仮想列を削除します。
例18-9に、これを示します。これは、JSON列po_document
内の表j_purchaseorder
のデータから配列下にないスカラー・フィールドを投影します。投影されたフィールドは、階層データ・ガイド内で示されるフィールドです。
例18-10に、仮想列としての2つのフィールドの投影を指定するデータ・ガイド引数を渡す方法を示しています。データ・ガイド・フィールドo:hidden
は、これらの列の1つを非表示にするために使用されます。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス (
DBMS_JSON.add_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.drop_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細) -
Oracle Database SQL言語リファレンス(PL/SQL定数
DBMS_JSON.FORMAT_HIERARCHICAL
の詳細)
例18-9 GET_INDEX_DATAGUIDEを使用して取得されたデータ・ガイドを使用したJSONフィールドを投影する仮想列の追加
この例では、階層データ・ガイドはJSON列po_document
のデータ・ガイド対応JSON検索索引から取得されます。
追加された仮想列は、すべて表j_purchaseorder
内の列です。ID
、DATE_LOADED
、PODOCUMENT
は例外です。
(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。)
EXEC DBMS_JSON.add_virtual_columns(
'J_PURCHASEORDER',
'PO_DOCUMENT',
DBMS_JSON.get_index_dataguide('J_PURCHASEORDER',
'PO_DOCUMENT',
DBMS_JSON.FORMAT_HIERARCHICAL));
DESCRIBE j_purchaseorder;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT CLOB
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$AllowPartialShipment VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
Phone VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
例18-10 仮想列の非表示および表示での追加
この例では、PO_Number
とPO_Reference
の2つのフィールドのみが仮想列として投影されます。データ・ガイドは、リテラル文字列としてローカルで定義されます。データ・ガイド・フィールドo:hidden
は、ここでPO_Reference
の仮想列を非表示にするために使用されます。(PO_Number
の場合、o:hidden: false
エントリは必要ありません。これは、false
がデフォルト値であるためです。)
DECLARE
dg CLOB;
BEGIN
dg := '{"type" : "object",
"properties" :
{"PO_Number" : {"type" : "number",
"o:length" : 4,
"o:preferred_column_name" : "PO_Number",
"o:hidden" : false},
"PO_Reference" : {"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "PO_Reference",
"o:hidden" : true}}}';
DBMS_JSON.add_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT', dg);
END;
/
DESCRIBE j_purchaseorder;
Name Null? Type
----------- -------- ---------------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT CLOB
PO_Number NUMBER
SELECT column_name FROM user_tab_columns
WHERE table_name = 'J_PURCHASEORDER' ORDER BY 1;
COLUMN_NAME
-----------
DATE_LOADED
ID
PO_DOCUMENT
PO_Number
PO_Reference
5 rows selected.
18.7.2 データ・ガイド対応検索索引に基づくJSONフィールドの仮想列の追加
JSON列のデータ・ガイド対応検索索引を使用して、そのJSONデータからのスカラー・フィールドを同じ表内の仮想列として投影できます。配列下にないスカラー・フィールドのみが投影されます。投影するフィールドの最小出現頻度を指定できます。
プロシージャDBMS_JSON.add_virtual_columns
を使用して、仮想列を追加します。
例18-11に、これを示します。配列下にないすべてのスカラー・フィールドは、表j_purchaseorder
に仮想列として投影されます。
フィールドを投影するJSON列内の文書に関する統計情報を収集する場合、データ・ガイド対応JSON検索索引内のデータ・ガイド情報は、文書セット全体で、文書内の各フィールドの出現頻度を記録します。
仮想列を追加するときは、所定の最小発生頻度のフィールドのみが投影されることを指定できます。
これには、パラメータFREQUENCY
の値として、プロシージャadd_virtual_columns
にゼロ以外の値を指定します。ゼロはデフォルト値であるため、引数FREQUENCY
を含めないと、すべてのスカラー・フィールド(配列下にないもの)が投影されます。所定のフィールドの頻度は、そのフィールドを含む文書数をJSON列内の合計文書数で割った値が割合で表されます。
例18-12は、文書のすべて(100%)に出現するすべてのスカラー(配列下にないもの)を仮想列として投影します。
追加されたすべての仮想列を非表示にする場合、TRUE
値を引数HIDDEN
に指定します。(パラメータHIDDEN
のデフォルト値はFALSE
であり、これは追加された仮想列が非表示でないことを意味します。)
例18-13は、文書のすべて(100%)に出現するスカラー・フィールド(配列下にないもの)を非表示の仮想列として投影します。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス (
DBMS_JSON.add_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細)
例18-11 配列下にないすべてのスカラー・フィールドの仮想列としての投影
追加された仮想列は、すべて表j_purchaseorder
内の列です。ID
、DATE_LOADED
、PODOCUMENT
は例外です。これは、FREQUENCY
引数がadd_virtual_columns
に渡されないため、すべてのスカラー・フィールド(配列下にないもの)が投影されます。
(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。)
EXEC DBMS_JSON.add_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT');
DESCRIBE j_purchaseorder;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT CLOB
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$AllowPartialShipment VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
Phone VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
例18-12 最小頻度のスカラー・フィールドの仮想列としての投影
文書のすべて(100%)に出現するすべてのスカラー・フィールドが、仮想列として投影されます。この結果は例18-11と同じですが、フィールドAllowPartialShipment
とPhone
が投影されない点が異なります。これは、これらが文書の100%には出現しないためです。
(名前がイタリック
でdescribe
コマンド出力内に記述された列は、PL/SQLプロシージャDBMS_JSON.rename_column
を使用して名前が変更された列です。)
EXEC DBMS_JSON.add_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT', 100);
DESCRIBE j_purchaseorder;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT CLOB
PO_DOCUMENT$User VARCHAR2(8)
PONumber NUMBER
PO_DOCUMENT$Reference VARCHAR2(16)
PO_DOCUMENT$Requestor VARCHAR2(16)
PO_DOCUMENT$CostCenter VARCHAR2(4)
PO_DOCUMENT$name VARCHAR2(16)
PO_DOCUMENT$city VARCHAR2(32)
PO_DOCUMENT$state VARCHAR2(2)
PO_DOCUMENT$street VARCHAR2(32)
PO_DOCUMENT$country VARCHAR2(32)
PO_DOCUMENT$zipCode NUMBER
PO_DOCUMENT$SpecialInstructions VARCHAR2(8)
例18-13 最小頻度のスカラー・フィールドの非表示の仮想列としての投影
この結果は例18-12と同じですが、追加されたすべての仮想列が非表示であることが異なります。(ビューUSER_TAB_COLUMNS
の問合せは、仮想列が実際に追加されたことを示します。)
EXEC DBMS_JSON.add_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT', 100, TRUE);
DESCRIBE j_purchaseorder;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT CLOB
SELECT column_name FROM user_tab_columns WHERE table_name = 'J_PURCHASEORDER' ORDER BY 1;
COLUMN_NAME
-----------
DATE_LOADED
ID
PONumber
PO_DOCUMENT
PO_DOCUMENT$CostCenter
PO_DOCUMENT$Reference
PO_DOCUMENT$Requestor
PO_DOCUMENT$SpecialInstructions
PO_DOCUMENT$User
PO_DOCUMENT$city
PO_DOCUMENT$country
PO_DOCUMENT$name
PO_DOCUMENT$state
PO_DOCUMENT$street
PO_DOCUMENT$zipCode
18.7.3 データ・ガイド情報に基づくJSONフィールドの仮想列の削除
プロシージャDBMS_JSON.drop_virtual_columns
を使用して、JSONフィールド用にJSONデータの列内に追加されたすべての仮想列を削除できます。
DBMS_JSON.drop_virtual_columns
は、add_virtual_columns
の起動またはデータ・ガイド変更トリガー・プロシージャadd_vc
によって所定のJSON列内のフィールドから投影されたすべての仮想列を削除します。例18-14は、列po_document
の表j_purchaseorder
から投影されたフィールドについてのこの状態を示します。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス (
DBMS_JSON.add_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.drop_virtual_columns
に関する詳細)
例18-14 JSONフィールドから投影された仮想列の削除
EXEC DBMS_JSON.drop_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT');
18.8 データ・ガイド対応検索索引の変更トリガー
JSONデータが変更されると、データ・ガイド対応のJSON検索索引の一部の情報は自動的に更新されます。これが発生するたびに起動がトリガーされるプロシージャを指定できます。自分のPL/SQLプロシージャをこれに定義でき、事前定義済変更トリガー・プロシージャであるadd_vc
を使用することもできます。
データ・ガイド対応JSON検索索引内のデータ・ガイド情報は、構造、型、および場合によってJSON文書セットに関する統計情報を記録します。収集時にのみ更新される統計情報を除いて、文書セット内の関連する変更内容は、索引内に格納されるデータ・ガイド情報に自動的に反映されます。
このような索引の更新によって起動が自動的にトリガーされるPL/SQLプロシージャを定義できます。起動は索引の更新時に発生します。プロシージャの実行中に発生したエラーは無視されます。
事前定義済変更トリガー・プロシージャadd_vc
を使用して、文書セットからのJSONフィールドを投影する仮想列を自動的に追加する、または必要に応じてこのような既存の列を変更できます。add_vc
によって追加された仮想列は、データ・ガイド対応検索索引を持つJSON列用にプロシージャDBMS_JSON.add_virtual_columns
の起動によって追加された列と同じ命名規則に従います。
この場合、プロシージャの実行中に発生したエラーは無視されます。
DBMS_JSON.add_virtual_columns
とは異なり、add_vc
は、最初に同じJSON列内のフィールドから投影された既存の仮想列を削除することはありません。add_vc
またはadd_virtual_columns
によって同じJSON列内のフィールドから投影された仮想列を削除するには、プロシージャDBMS_JSON.drop_virtual_columns
を使用します。
データ・ガイドの変更のために、JSON検索索引の作成時または変更時に、キーワードDATAGUIDE ON CHANGE
をPARAMETERS
句内で使用することによって、トリガーを使用することを指定します。索引ごとに、1つの変更トリガーのみが許可されます。トリガーを指定する索引を変更することで、そのための以前の任意トリガーは自動的に置換されます。
例18-15は、既存のJSON検索索引po_search_idx
をプロシージャadd_vc
を使用するための索引から変更します。
例18-15 変更トリガーADD_VCによる仮想列の自動的な追加
この例では、事前定義済変更トリガーadd_vc
をJSON検索索引po_search_idx
に追加します。
まず、JSON列po_document
内のフィールドから、プロシージャDBMS_JSON.add_virtual_columns
または事前定義済add_vc
変更トリガーによって同じJSON検索索引用に投影された既存の仮想列を削除します。
次に、検索索引を変更し、変更トリガーadd_vc
(すでに存在する場合、これに効力はありません)を追加します。
最後に、データ・ガイドに変更を発生させる新しい文書を挿入します。2つの仮想列が、配列下にない2つのスカラー・フィールド用に表に追加されます。
EXEC DBMS_JSON.drop_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT');
ALTER INDEX po_search_idx REBUILD PARAMETERS ('DATAGUIDE ON CHANGE add_vc');
INSERT INTO j_purchaseorder
VALUES (
SYS_GUID(),
to_date('30-JUN-2015'),
'{"PO_Number" : 4230,
"PO_Reference" : "JDEER-20140421",
"PO_LineItems" : [{"Part_Number" : 230912362345,
"Quantity" : 3.0}]}');
DESCRIBE j_purchaseorder;
Name Null? Type
------------------------- -------- ----------------------------
ID NOT NULL RAW(16)
DATE_LOADED TIMESTAMP(6) WITH TIME ZONE
PO_DOCUMENT CLOB
PO_DOCUMENT$PO_Number NUMBER
PO_DOCUMENT$PO_Reference VARCHAR2(16)
トピック:
- ユーザー定義のデータ・ガイド変更トリガー
所定のデータ・ガイド対応JSON検索索引が更新されるたびに、自動的に起動がトリガーされるプロシージャを定義できます。プロシージャの実行中に発生したエラーは無視されます。
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス (
DBMS_JSON.add_virtual_columns
に関する詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.drop_virtual_columns
に関する詳細)
18.8.1 ユーザー定義のデータ・ガイド変更トリガー
所定のデータ・ガイド対応JSON検索索引が更新されるたびに、自動的に起動がトリガーされるプロシージャを定義できます。プロシージャの実行中に発生したエラーは無視されます。
例18-16に、これを示します。
キーワードDATAGUIDE ON CHANGE
を使用してJSON検索索引PARAMETERS
句内に指定されたユーザー定義のプロシージャは、表18-5で指定されたパラメータを受け入れる必要があります。
表18-5 ユーザー定義のデータ・ガイド変更トリガー・プロシージャのパラメータ
名前 | 型 | 説明 |
---|---|---|
table_name |
VARCHAR2 |
列column_name を格納する表の名前です。
|
column_name |
VARCHAR2 |
データ・ガイド対応JSON検索索引を持つJSON列の名前です。 |
path |
VARCHAR2 |
列column_name のデータ内の特定のフィールドを対象とするSQL/JSONパス式です。このパスは、プロシージャの起動をトリガーする索引の変更の影響を受けます。たとえば、索引の変更は、このパスの追加、または値の型や型の長さの値の変更に関係があります。
|
new_type |
NUMBER |
指定されたパスの新しい型です。 |
new_type_length |
NUMBER |
指定されたパスの新しい型の長さです。 |
例18-16 ユーザー定義の変更トリガーを使用したデータ・ガイド更新のトレース
この例は、まずJSON列po_document
内のフィールドから投影された既存の仮想列を削除します。
次に、PL/SQLプロシージャmy_dataguide_trace
を定義します。これは、表名とJSON列を追加された仮想列のパス、型、長さの各フィールドと一緒に出力します。次に、JSON検索索引po_search_idx
を変更し、このプロシージャが、索引内のデータ・ガイド情報への更新に対する変更トリガーとして起動されることを指定します。
次に、データ・ガイドに変更を発生させる新しい文書を挿入します。これにより、トレース情報の出力がトリガーされます。
プロシージャに対するTYPE
引数は、JSON型のDBMS_JSON
定数のうちの1つの数値である必要があることに注意してください。このプロシージャは、引数をテストし、数値のかわりにユーザーにわかりやすい文字列を出力します。
EXEC DBMS_JSON.drop_virtual_columns('J_PURCHASEORDER', 'PO_DOCUMENT');
CREATE OR REPLACE PROCEDURE my_dataguide_trace(tableName VARCHAR2,
jcolName VARCHAR2,
path VARCHAR2,
type NUMBER,
tlength NUMBER)
IS
typename VARCHAR2(10);
BEGIN
IF (type = DBMS_JSON.TYPE_NULL) THEN typename := 'null';
ELSIF (type = DBMS_JSON.TYPE_BOOLEAN) THEN typename := 'boolean';
ELSIF (type = DBMS_JSON.TYPE_NUMBER) THEN typename := 'number';
ELSIF (type = DBMS_JSON.TYPE_STRING) THEN typename := 'string';
ELSIF (type = DBMS_JSON.TYPE_OBJECT) THEN typename := 'object';
ELSIF (type = DBMS_JSON.TYPE_ARRAY) THEN typename := 'array';
ELSE typename := 'unknown';
END IF;
DBMS_OUTPUT.put_line('Updating ' || tableName || '(' || jcolName || '):
Path = ' || path || ', Type = ' || type || ', Type Name = ' || typename
|| ', Type Length = ' || tlength);
END;
/
ALTER INDEX po_search_idx REBUILD
PARAMETERS ('DATAGUIDE ON CHANGE my_dataguide_trace');
INSERT INTO j_purchaseorder
VALUES (
SYS_GUID(),
to_date('30-MAR-2016'),
'{"PO_ID" : 4230,
"PO_Ref" : "JDEER-20140421",
"PO_Items" : [{"Part_No" : 98981327234,
"Item_Quantity" : 13}]}');
COMMIT;
Updating J_PURCHASEORDER(PO_DOCUMENT):
Path = $.PO_ID, Type = 3, Type Name = number, Type Length = 4
Updating J_PURCHASEORDER(PO_DOCUMENT):
Path = $.PO_Ref, Type = 4, Type Name = string, Type Length = 16
Updating J_PURCHASEORDER(PO_DOCUMENT):
Path = $.PO_Items, Type = 6, Type Name = array, Type Length = 64
Updating J_PURCHASEORDER(PO_DOCUMENT):
Path = $.PO_Items.Part_No, Type = 3, Type Name = number, Type Length = 16
Updating J_PURCHASEORDER(PO_DOCUMENT):
Path = $.PO_Items.Item_Quantity, Type = 3, Type Name = number, Type Length = 2
Commit complete.
関連項目:
-
Oracle Database SQL言語リファレンス(PL/SQL定数
TYPE_NULL
、TYPE_BOOLEAN
、TYPE_NUMBER
、TYPE_STRING
、TYPE_OBJECT
、TYPE_ARRAY
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.drop_virtual_columns
に関する詳細)
18.9 文書セットごとの複数のデータ・ガイド
データ・ガイドは、所定のJSON文書セットの形状を反映しています。JSON列に、異なる構造または型情報を持つ異なる文書の型が含まれる場合、文書の型別に異なるデータ・ガイドを作成して使用できます。
異なる種類のJSON文書用のデータ・ガイド
JSON文書は、規定のスキーマに従う必要はなく、通常は従うことはありません。これは、所定のアプリケーションで同様に使用される文書の場合も当てはまります。これらは構造的に(形状)異なる可能性があり、フィールド型が異なる可能性があります。
JSONデータ・ガイドは、所定の文書セットの構造的情報と型情報を要約します。一般に、所定のセット内の文書の構造的情報と型情報が類似するほど、結果のデータ・ガイドの有用性は高まります。
データ・ガイドは、JSONデータの所定の列に対して作成されます。列に異なる種類の文書(たとえば発注書と健康記録)が含まれる場合、その列に単一のデータ・ガイドを用意しても、用途が限られると考えられます。
この懸念に対処する1つの方法は、異なるJSON列に異なる種類のJSON文書を配置することです。ただし、その他の事項を考慮した結果、同じ列内に異なる種類の文書を混在させることを選ぶ場合があります。
さらに、同じ列に格納すると決定した同じ一般的な種類の文書が、それにもかかわらず系統的な方法が比較的異なる場合があります。これには、形状や型情報が発展する文書の場合が含まれます。たとえば、税情報の文書の構造が年々変更される可能性があります。
データ・ガイドの作成時に、要約する情報を決定できます。そのため、同じJSON列に異なるデータ・ガイドを作成し、文書セットの異なるサブセットを表現できます。
これに関するもう1つの対処法は、JSONでない個別の列を同じ表内に設け、JSON列内の文書のラベルまたは分類に使用することです。
例に使用されている発注書の文書の場合、構造が年々大幅に変更される可能性があると考えると、形状が類似したサブセットにグループ化するために列date_loaded
を表j_purchaseorder
内で使用できます。例18-17は2015の発注書の文書を追加し、例18-18は2016の発注書の文書を追加します。(例4-2で追加された2014の文書と比較します。)
複数のデータ・ガイドを作成するためのSQL集計関数の使用
Oracle SQLファンクションjson_dataguide
は、実際は集計関数です。集計関数は、単一行ではなく行のグループに基づいて1つの結果行を戻します。通常SELECT
リストの中でGROUP BY
句を持つ問合せに使用され、問い合せられた表またはビューの行をグループに分割します。集計関数は行の各グループに適用され、各グループの単一の結果行を返します。たとえば、集計関数avg
は、値グループの平均値を返します。
ファンクションjson_dataguide
はJSONデータを集計し、データの要約または仕様を作成します。これはJSON文書の形式で返されます。言い換えると、適用先のJSON文書の各グループについて、データ・ガイドが返されます。
GROUP BY
を省略すると、このファンクションは対象のJSON列内のすべてのJSONデータを要約した単一のデータ・ガイドを返します。
例18-19は、JSON列po_document
のドキュメントを問い合せます。このときにそれらをグループ化し、列date_loaded
の各年に1つ、合計3つのデータ・ガイドを生成します。
例18-17 2015発注書の文書の追加
2015発注書形式は、部品番号、参照、明細項目のみ最上位フィールドとして使用し、これらのフィールドは接頭辞PO_
を使用します。各明細項目に、部品番号と数量のみが含まれます。
INSERT INTO j_purchaseorder
VALUES (
SYS_GUID(),
to_date('30-JUN-2015'),
'{"PO_Number" : 4230,
"PO_Reference" : "JDEER-20140421",
"PO_LineItems" : [{"Part_Number" : 230912362345,
"Quantity" : 3.0}]}');
例18-18 2016発注書の文書の追加
2016形式は、PO_ID
をPO_Number
のかわりに、PO_Ref
をPO_Reference
のかわりに、PO_Items
をPO_LineItems
のかわりに、Part_No
をPart_Number
のかわりに、Item_Quantity
をQuantity
のかわりに使用します。
INSERT INTO j_purchaseorder
VALUES (
SYS_GUID(),
to_date('30-MAR-2016'),
'{"PO_ID" : 4230,
"PO_Ref" : "JDEER-20140421",
"PO_Items" : [{"Part_No" : 98981327234,
"Item_Quantity" : 13}]}');
例18-19 集計関数JSON_DATAGUIDEを使用した複数のデータ・ガイドの作成
この例は、SQL集計関数json_dataguide
を使用して、年固有の形式につき1つ、合計3つのフラット脚注1・データ・ガイドを取得します。2014のデータ・ガイドが部分的にのみ示されます。このガイドは、統計フィールドがないことを除き、発注書の文書のフラット・データ・ガイドからのデータ・ガイドと同じです。(ファンクションjson_dataguide
によって返されるデータ・ガイドには、統計フィールドは含まれません。
SELECT extract(YEAR FROM date_loaded), json_dataguide(po_document) FROM j_purchaseorder
GROUP BY extract(YEAR FROM date_loaded)
ORDER BY extract(YEAR FROM date_loaded) DESC;
EXTRACT(YEARFROMDATE_LOADED)
----------------------------
JSON_DATAGUIDE(PO_DOCUMENT)
---------------------------
2016
[
{
"o:path" : "$.PO_ID",
"type" : "number",
"o:length" : 4
},
{
"o:path" : "$.PO_Ref",
"type" : "string",
"o:length" : 16
},
{
"o:path" : "$.PO_Items",
"type" : "array",
"o:length" : 64
},
{
"o:path" : "$.PO_Items.Part_No",
"type" : "number",
"o:length" : 16
},
{
"o:path" : "$.PO_Items.Item_Quantity",
"type" : "number",
"o:length" : 2
}
]
2015
[
{
"o:path" : "$.PO_Number",
"type" : "number",
"o:length" : 4
},
{
"o:path" : "$.PO_LineItems",
"type" : "array",
"o:length" : 64
},
{
"o:path" : "$.PO_LineItems.Quantity",
"type" : "number",
"o:length" : 4
},
{
"o:path" : "$.PO_LineItems.Part_Number",
"type" : "number",
"o:length" : 16
},
{
"o:path" : "$.PO_Reference",
"type" : "string",
"o:length" : 16
}
]
2014
[
{
"o:path" : "$.User",
"type" : "string",
"o:length" : 8
},
{
"o:path" : "$.PONumber",
"type" : "number",
"o:length" : 4
},
...
{
"o:path" : "$.\"Special Instructions\"",
"type" : "string",
"o:length" : 8
}
]
3 rows selected.
関連項目:
Oracle Database SQL言語リファレンス(SQLファンクションjson_dataguide
の詳細)
18.10 データ・ガイドの問合せ
データ・ガイドは、一連のJSON文書に関する情報です。Oracle SQLファンクションjson_dataguide
またはPL/SQLファンクションDBMS_JSON.get_index_dataguide
のいずれかを使用することで、取得するフラット・データ・ガイドからの情報を問合せられます。後者の場合、データ・ガイド対応JSON検索索引が、JSONデータ上で定義されている必要があります。
関連項目:
-
Oracle Database SQL言語リファレンス(SQLファンクション
json_dataguide
の詳細) -
Oracle Database SQL言語リファレンス(SQL/JSONファンクション
json_table
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database SQL言語リファレンス(PL/SQL定数
DBMS_JSON.FORMAT_FLAT
の詳細)
例18-20 JSON_DATAGUIDEを使用して取得するデータ・ガイドの問合せ
この例は、SQL/JSONファンクションjson_dataguide
を使用して、フラット・データ・ガイドを取得します。次に、SQL/JSONファンクションjson_table
によってフィールドo:path
、type
、o:length
から即時に投影された関係する列を問い合せます。投影された列を、作成されたパス列jpath
を基準として辞書順に返します。
WITH dg_t AS (SELECT json_dataguide(po_document) dg_doc FROM j_purchaseorder)
SELECT jt.*
FROM dg_t,
json_table(dg_doc, '$[*]'
COLUMNS
jpath VARCHAR2(40) PATH '$."o:path"',
type VARCHAR2(10) PATH '$."type"',
tlength NUMBER PATH '$."o:length"') jt
ORDER BY jt.jpath;
JPATH TYPE TLENGTH
---------------------------------------- ---------- ----------
$."Special Instructions" string 8
$.AllowPartialShipment boolean 4
$.CostCenter string 4
$.LineItems array 512
$.LineItems.ItemNumber number 1
$.LineItems.Part object 128
$.LineItems.Part.Description string 32
$.LineItems.Part.UPCCode number 16
$.LineItems.Part.UnitPrice number 8
$.LineItems.Quantity number 4
$.PONumber number 4
$.PO_LineItems array 64
$.Reference string 16
$.Requestor string 16
$.ShippingInstructions object 256
$.ShippingInstructions.Address object 128
$.ShippingInstructions.Address.city string 32
$.ShippingInstructions.Address.country string 32
$.ShippingInstructions.Address.state string 2
$.ShippingInstructions.Address.street string 32
$.ShippingInstructions.Address.zipCode number 8
$.ShippingInstructions.Phone array 128
$.ShippingInstructions.Phone string 16
$.ShippingInstructions.Phone.number string 16
$.ShippingInstructions.Phone.type string 8
$.ShippingInstructions.name string 16
$.User string 8
例18-21 最小頻度が80%のパスに対する索引データを使用したデータ・ガイドの問合せ
この例では、PL/SQLファンクションDBMS_JSON.get_index_dataguide
を形式の値DBMS_JSON.FORMAT_FLAT
と一緒に使用して、データ・ガイド対応JSON検索索引に格納されているデータ・ガイド情報からフラット・データ・ガイドを取得します。次に、フィールドo:path
、type
、o:length
、o:frequency
からSQL/JSONファンクションjson_table
によって即時に投影された関係する列を問い合せます。
フィールドo:frequency
の値は、文書セット全体で、文書内の各フィールドの発生頻度を記録する統計情報です。文書セットに関して統計情報が収集された場合にのみ、使用できます。所定のフィールドの頻度は、そのフィールドを含む文書数をJSON列内の合計文書数で割った値が割合で表されます。
WITH dg_t AS (SELECT DBMS_JSON.get_index_dataguide('J_PURCHASEORDER',
'PO_DOCUMENT',
DBMS_JSON.FORMAT_FLAT) dg_doc
FROM DUAL)
SELECT jt.*
FROM dg_t,
json_table(dg_doc, '$[*]'
COLUMNS
jpath VARCHAR2(40) PATH '$."o:path"',
type VARCHAR2(10) PATH '$."type"',
tlength NUMBER PATH '$."o:length"',
frequency NUMBER PATH '$."o:frequency"') jt
WHERE jt.frequency > 80;
JPATH TYPE TLENGTH FREQUENCY
---------------------------------------- ---------- ---------- ----------
$.User string 8 100
$.PONumber number 4 100
$.LineItems array 512 100
$.LineItems.Part object 128 100
$.LineItems.Part.UPCCode number 16 100
$.LineItems.Part.UnitPrice number 8 100
$.LineItems.Part.Description string 32 100
$.LineItems.Quantity number 4 100
$.LineItems.ItemNumber number 1 100
$.Reference string 16 100
$.Requestor string 16 100
$.CostCenter string 4 100
$.ShippingInstructions object 256 100
$.ShippingInstructions.name string 16 100
$.ShippingInstructions.Address object 128 100
$.ShippingInstructions.Address.city string 32 100
$.ShippingInstructions.Address.state string 2 100
$.ShippingInstructions.Address.street string 32 100
$.ShippingInstructions.Address.country string 32 100
$.ShippingInstructions.Address.zipCode number 8 100
$."Special Instructions" string 8 100
関連項目
18.11 発注書の文書のフラット・データ・ガイド
サンプル・フラット・データ・ガイドのフィールドについて記述されます。これは発注書の文書セットに対応します。
フラット・データ・ガイド内で使用されるJSONスキーマ・キーワードはtype
のみです。その他のフィールドは、すべてOracleデータ・ガイド・フィールドであり、接頭辞o:
が付いています。
例18-22は、表j_purchaseorder
内の発注書の文書のフラット・データ・ガイドを示しています。次の事項に注意してください。
-
o:preferred_column_name
の値は、接頭辞PO_DOCUMENT$
を使用します。この接頭辞は、このデータ・ガイドを取得するためにDBMS_JSON.get_index_dataguide
を使用したことに基づきます。 -
たとえば、
o:length
のパス$.User
の値は、フィールド値の実際の長さが5であるにもかかわらず8です。これは、o:length
の値は、常に2の乗数であるためです。 -
o:path
のフィールドSpecial Instructions
の値は、中に含まれる空白文字のため、二重引用符で囲まれます("Special Instructions"
)。
例18-22 発注書のフラット・データ・ガイド
パスは太字
で示されます。JSONスキーマ・キーワードはイタリック体
で示されます。DBMS_JSON.rename_column
を使用した結果の優先列名もイタリック体
で示されます。
フィールドo:frequency
、o:low_value
、o:high_value
、o:num_nulls
、o:last_analyzed
があることに注意してください。統計情報が文書セットに関して収集された場合にのみ、このようになります。これらの値は、統計情報が最後に収集されたときの状態を反映しています。このデータの統計情報の収集例は、例18-3を参照してください。
[
{
"o:path": "$.User",
"type": "string",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$User",
"o:frequency": 100,
"o:low_value": "ABULL",
"o:high_value": "SBELL",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.PONumber",
"type": "number",
"o:length": 4,
"o:preferred_column_name": "PONumber",
"o:frequency": 100,
"o:low_value": "672",
"o:high_value": "1600",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems",
"type": "array",
"o:length": 512,
"o:preferred_column_name": "PO_DOCUMENT$LineItems",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems.Part",
"type": "object",
"o:length": 128,
"o:preferred_column_name": "PO_DOCUMENT$Part",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems.Part.UPCCode",
"type": "number",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$UPCCode",
"o:frequency": 100,
"o:low_value": "13131092899",
"o:high_value": "717951002396",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems.Part.UnitPrice",
"type": "number",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$UnitPrice",
"o:frequency": 100,
"o:low_value": "20",
"o:high_value": "19.95",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems.Part.Description",
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PartDescription",
"o:frequency": 100,
"o:low_value": "Nixon",
"o:high_value": "Eric Clapton: Best Of 1981-1999",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems.Quantity",
"type": "number",
"o:length": 4,
"o:preferred_column_name": "PO_DOCUMENT$Quantity",
"o:frequency": 100,
"o:low_value": "5",
"o:high_value": "9.0",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.LineItems.ItemNumber",
"type": "number",
"o:length": 1,
"o:preferred_column_name": "ItemNumber",
"o:frequency": 100,
"o:low_value": "1",
"o:high_value": "3",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.Reference",
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$Reference",
"o:frequency": 100,
"o:low_value": "ABULL-20140421",
"o:high_value": "SBELL-20141017",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.Requestor",
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$Requestor",
"o:frequency": 100,
"o:low_value": "Sarah Bell",
"o:high_value": "Alexis Bull",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.CostCenter",
"type": "string",
"o:length": 4,
"o:preferred_column_name": "PO_DOCUMENT$CostCenter",
"o:frequency": 100,
"o:low_value": "A50",
"o:high_value": "A50",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.AllowPartialShipment",
"type": "boolean",
"o:length": 4,
"o:preferred_column_name": "PO_DOCUMENT$AllowPartialShipment",
"o:frequency": 50,
"o:low_value": "true",
"o:high_value": "true",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions",
"type": "object",
"o:length": 256,
"o:preferred_column_name": "PO_DOCUMENT$ShippingInstructions",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.name",
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$name",
"o:frequency": 100,
"o:low_value": "Sarah Bell",
"o:high_value": "Alexis Bull",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Phone",
"type": "string",
"o:length": 16,
"o:preferred_column_name": "Phone",
"o:frequency": 50,
"o:low_value": "983-555-6509",
"o:high_value": "983-555-6509",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Phone",
"type": "array",
"o:length": 128,
"o:preferred_column_name": "PO_DOCUMENT$Phone_1",
"o:frequency": 50,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Phone.type",
"type": "string",
"o:length": 8,
"o:preferred_column_name": "PhoneType",
"o:frequency": 50,
"o:low_value": "Mobile",
"o:high_value": "Office",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Phone.number",
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PhoneNumber",
"o:frequency": 50,
"o:low_value": "415-555-1234",
"o:high_value": "909-555-7307",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Address",
"type": "object",
"o:length": 128,
"o:preferred_column_name": "PO_DOCUMENT$Address",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Address.city",
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PO_DOCUMENT$city",
"o:frequency": 100,
"o:low_value": "South San Francisco",
"o:high_value": "South San Francisco",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Address.state",
"type": "string",
"o:length": 2,
"o:preferred_column_name": "PO_DOCUMENT$state",
"o:frequency": 100,
"o:low_value": "CA",
"o:high_value": "CA",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Address.street",
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PO_DOCUMENT$street",
"o:frequency": 100,
"o:low_value": "200 Sporting Green",
"o:high_value": "200 Sporting Green",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Address.country",
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PO_DOCUMENT$country",
"o:frequency": 100,
"o:low_value": "United States of America",
"o:high_value": "United States of America",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.ShippingInstructions.Address.zipCode",
"type": "number",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$zipCode",
"o:frequency": 100,
"o:low_value": "99236",
"o:high_value": "99236",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"o:path": "$.\"Special Instructions\"",
"type": "string",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$SpecialInstructions",
"o:frequency": 100,
"o:low_value": "Courier",
"o:high_value": "Courier",
"o:num_nulls": 1,
"o:last_analyzed": "2016-03-31T12:17:53"
}
]
関連項目:
-
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.get_index_dataguide
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細)
18.12 発注書の文書の階層データ・ガイド
サンプル階層データ・ガイドのフィールドについて記述されます。これは発注書の文書セットに対応します。
例18-23は、表j_purchaseorder
内の発注書の文書の階層データ・ガイドを示しています。
例18-23 発注書の階層データ・ガイド
フィールド名は太字
で示されます。JSONスキーマ・キーワードはイタリック体
で示されます。DBMS_JSON.rename_column
を使用した結果の優先列名もイタリック体
で示されます。使用される書式は、書式設定引数DBMS_JSON.FORMAT_HIERARCHICAL
およびDBMS_JSON.PRETTY
とともにSQL/JSONファンクションjson_dataguide
を使用して生成されたものに似ています。
この例に、フィールドo:frequency
、o:low_value
、o:high_value
、o:num_nulls
、o:last_analyzed
があることに注意してください。統計情報が文書セットに関して収集された場合にのみ、このようになります。これらの値は、統計情報が最後に収集されたときの状態を反映しています。このデータの統計情報の収集例は、例18-3を参照してください。
{
"type": "object",
"properties": {
"User": {
"type": "string",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$User",
"o:frequency": 100,
"o:low_value": "ABULL",
"o:high_value": "SBELL",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"PONumber": {
"type": "number",
"o:length": 4,
"o:preferred_column_name": "PONumber",
"o:frequency": 100,
"o:low_value": "672",
"o:high_value": "1600",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"LineItems": {
"type": "array",
"o:length": 512,
"o:preferred_column_name": "PO_DOCUMENT$LineItems",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53",
"items": {
"properties": {
"Part": {
"type": "object",
"o:length": 128,
"o:preferred_column_name": "PO_DOCUMENT$Part",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53",
"properties": {
"UPCCode": {
"type": "number",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$UPCCode",
"o:frequency": 100,
"o:low_value": "13131092899",
"o:high_value": "717951002396",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"UnitPrice": {
"type": "number",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$UnitPrice",
"o:frequency": 100,
"o:low_value": "20",
"o:high_value": "19.95",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"Description": {
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PartDescription",
"o:frequency": 100,
"o:low_value": "Nixon",
"o:high_value": "Eric Clapton: Best Of 1981-1999",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
}
}
},
"Quantity": {
"type": "number",
"o:length": 4,
"o:preferred_column_name": "PO_DOCUMENT$Quantity",
"o:frequency": 100,
"o:low_value": "5",
"o:high_value": "9.0",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"ItemNumber": {
"type": "number",
"o:length": 1,
"o:preferred_column_name": "ItemNumber",
"o:frequency": 100,
"o:low_value": "1",
"o:high_value": "3",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
}
}
}
},
"Reference": {
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$Reference",
"o:frequency": 100,
"o:low_value": "ABULL-20140421",
"o:high_value": "SBELL-20141017",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"Requestor": {
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$Requestor",
"o:frequency": 100,
"o:low_value": "Sarah Bell",
"o:high_value": "Alexis Bull",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"CostCenter": {
"type": "string",
"o:length": 4,
"o:preferred_column_name": "PO_DOCUMENT$CostCenter",
"o:frequency": 100,
"o:low_value": "A50",
"o:high_value": "A50",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"AllowPartialShipment": {
"type": "boolean",
"o:length": 4,
"o:preferred_column_name": "PO_DOCUMENT$AllowPartialShipment",
"o:frequency": 50,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"ShippingInstructions": {
"type": "object",
"o:length": 256,
"o:preferred_column_name": "PO_DOCUMENT$ShippingInstructions",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53",
"properties": {
"name": {
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PO_DOCUMENT$name",
"o:frequency": 100,
"o:low_value": "Sarah Bell",
"o:high_value": "Alexis Bull",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"Phone": {
"oneOf": [
{
"type": "string",
"o:length": 16,
"o:preferred_column_name": "Phone",
"o:frequency": 50,
"o:low_value": "983-555-6509",
"o:high_value": "983-555-6509",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
{
"type": "array",
"o:length": 128,
"o:preferred_column_name": "PO_DOCUMENT$Phone_1",
"o:frequency": 50,
"o:last_analyzed": "2016-03-31T12:17:53",
"items": {
"properties": {
"type": {
"type": "string",
"o:length": 8,
"o:preferred_column_name": "PhoneType",
"o:frequency": 50,
"o:low_value": "Mobile",
"o:high_value": "Office",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"number": {
"type": "string",
"o:length": 16,
"o:preferred_column_name": "PhoneNumber",
"o:frequency": 50,
"o:low_value": "415-555-1234",
"o:high_value": "909-555-7307",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
}
}
}
}
]
},
"Address": {
"type": "object",
"o:length": 128,
"o:preferred_column_name": "PO_DOCUMENT$Address",
"o:frequency": 100,
"o:last_analyzed": "2016-03-31T12:17:53",
"properties": {
"city": {
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PO_DOCUMENT$city",
"o:frequency": 100,
"o:low_value": "South San Francisco",
"o:high_value": "South San Francisco",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"state": {
"type": "string",
"o:length": 2,
"o:preferred_column_name": "PO_DOCUMENT$state",
"o:frequency": 100,
"o:low_value": "CA",
"o:high_value": "CA",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"street": {
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PO_DOCUMENT$street",
"o:frequency": 100,
"o:low_value": "200 Sporting Green",
"o:high_value": "200 Sporting Green",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"country": {
"type": "string",
"o:length": 32,
"o:preferred_column_name": "PO_DOCUMENT$country",
"o:frequency": 100,
"o:low_value": "United States of America",
"o:high_value": "United States of America",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
},
"zipCode": {
"type": "number",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$zipCode",
"o:frequency": 100,
"o:low_value": "99236",
"o:high_value": "99236",
"o:num_nulls": 0,
"o:last_analyzed": "2016-03-31T12:17:53"
}
}
}
}
},
"Special Instructions": {
"type": "string",
"o:length": 8,
"o:preferred_column_name": "PO_DOCUMENT$SpecialInstructions",
"o:frequency": 100,
"o:low_value": "Courier",
"o:high_value": "Courier",
"o:num_nulls": 1,
"o:last_analyzed": "2016-03-31T12:17:53"
}
}
}
関連項目:
-
Oracle Database SQL言語リファレンス(SQLファンクション
json_dataguide
の詳細) -
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(
DBMS_JSON.rename_column
に関する詳細)
脚注の凡例
脚注1: ファンクションjson_dataguideにオプションの2番目の引数としてDBMS_JSON.FORMAT_HIERARCHICALが渡された場合、結果は3つの階層データ・ガイドとなります。