21.4 マイグレータ・パラメータを指定するJSON構成フィールド
マイグレータ構成オブジェクトを引数としてPL/SQL DBMS_JSON_DUALITY
サブプログラムinfer_schema
、infer_and_generate_schema
およびimport_all
に渡すことで、JSONから二面性への移行を構成します。このようなオブジェクトのサポートされているフィールドについて説明します。
ノート:
初めて読むときはこのトピックをスキップして、後で参照することもできます。ここには、なにが使用可能なのかを把握するための情報が記載されています。
プロシージャimport_all
は、構成フィールドerrorLog
、errorLogSchema
およびrejectLimit
を使用する唯一のサブプログラムです。ファンクションinfer_schema
およびinfer_and_generate_schema
のみが、構成フィールドhints
、ingestLimit
、minFieldFrequency
、minTypeFrequency
、normalize
、outputFormat
、softnessThreshold
、tablespace
、updatability
およびuseFlexFields
を使用するサブプログラムです。
したがって、様々なDBMS_JSON_DUALITY
マイグレータ・サブプログラムで実際に使用される構成フィールドは異なりますが、いくつか重複しています。これらのサブプログラムのいずれにも、任意の構成フィールドを渡すことができます。使用されないフィールドは無視されます。具体的には、これは、これらのサブプログラムのいずれにも共通の構成ドキュメントを渡すことができることを意味します。
JSON構成オブジェクトを受け入れるかわりに、PL/SQLサブプログラムimport
、validate_schema_report
およびvalidate_import_report
では、一部の構成フィールドを使用するのと同じまたは同様の機能を持つ特定のJSON以外の引数を受け入れます。パラメータ名はフィールド名に似ており、ここでのフィールドの説明は一般的に、対応するパラメータにも適用されます。たとえば、ファンクションvalidate_import_report
のパラメータtable_name
は、構成フィールドtableName
に対応します。
マイグレータ構成フィールドを次に示します。tableNames
以外はすべてオプションです。示されているフィールド以外のフィールドはいずれも使用すると、エラーが発生します。
-
errorLog
(オプション) - 使用する単一のエラー・ログを指定する文字列、または使用する複数(二面性ビューごとに1つずつ)のエラー・ログを指定する文字列の配列。フィールド
errorLog
は、プロシージャimport_all
にのみ使用されます。 -
errorLogSchema
(オプション) - エラー・ログを所有するデータベース・スキーマ(ユーザー)を指定する文字列。errorLogSchema
にエラー・ログ所有者を指定しない場合は、現在接続されているユーザーの名前が使用されます。フィールド
errorLogSchema
は、プロシージャimport_all
にのみ使用されます。 -
hints
(オプション) - フィールドがリレーショナル・スキーマの生成時のコンバータの動作に対するオーバーライドを指定するJSONオブジェクトである要素を含むJSON配列。"ヒント"という名前は、単なる提案ではなく必須事項であるため、少し誤解を招くと言えます。なんらかの理由でヒントを順守できない場合、エラーが発生します。ヒントが無視されることはありません。エラーは、ヒントが正しく指定されていない場合にも発生します。ヒント・オブジェクトには次のフィールドが必要です(ない場合は、エラーが発生します):
-
type
- この値は、マイグレータ動作のオーバーライドのタイプを指定する次の文字列のいずれかです:-
"datatype"
- 二面性ビュー定義の基礎となる表の列に使用するSQLデータ型を要求します。この列は、path
でターゲット指定したドキュメント・フィールドに対応します。フィールドvalue
は、スカラーSQLデータ型(JSON
およびVECTOR
型の"json"
および"vector"
を含む)を指定する文字列です。データ型名は大/小文字を区別せずに解釈され、CREATE TABLE
で受け入れられる任意の列型を指定できます。 -
"key"
- フィールドpath
でターゲット指定したドキュメント・オブジェクト(またはオブジェクトの配列)の基礎となる表の識別列を要求します。フィールドvalue
は、列が識別列であるスカラーJSONフィールドを指定する文字列であるか、またはそのようなフィールド名文字列の配列であり、その各列が表の識別列です(つまり、これらの列を組み合せて行を一意に識別します。例は、『JSONリレーショナル二面性開発者ガイド』の「カーレースの例、表」を参照してください)。 -
"normalize"
- フィールドvalue
がfalse
の場合、フィールドpath
でターゲット指定した、ドキュメント内のJSONデータが共有されないことを要求します。これは、
infer_schema
およびinfer_and_generate_schema
(フィールドhints
は、これらのファンクションによってのみ使用されます)によって処理される入力ドキュメント・セット内のすべてのドキュメントに適用されます。ドキュメント・データのターゲット指定は、特定の種類のドキュメントに固有ではありません。table
内の列から取得され、同じpath
値でターゲット指定したデータを含む任意の種類のドキュメントに作用します。フィールド
path
は、任意のレベル(パス$
でターゲット指定した、ドキュメント内のルート・オブジェクトを含む)のオブジェクトをターゲットとする必要があります。path
でスカラー値または配列値をターゲット指定すると、エラーが発生します。実際には、指定された表は、指定されたパスのデータに対してロックされ(専用になり)、その逆も同様です。表は、入力ドキュメント・セットのどこにおいても、
path
でターゲット指定したデータ以外のデータにはマップされません。したがって、指定されたパスでターゲット指定した(あらゆるドキュメント内の)データは、同じドキュメント内であっても異なるドキュメント内であっても、異なるパスのどの場所でも共有されません。パスで指定された場所にあるすべてのドキュメントで共有されます。ターゲット指定したオブジェクトの基礎となる表のみがロックされます。ターゲット指定したオブジェクト内のサブオブジェクトの基礎となるデータの共有は、それ独自の基礎となる表によって制御されます。
フィールド
value
がtrue
の場合、入力JSONデータを正規化しようとするのがデフォルトの動作であるため、このヒントは効果がありません。
-
-
table
- ドキュメント・セット・データが二面性ビューの定義に使用される入力表を指定する文字列。 -
path
- 入力JSONドキュメントのデータをターゲットとするSQL/JSONパス式の文字列。パスがターゲット指定するデータがない場合は、エラーが発生します。 -
value
- 特定のtype
に固有の情報で、ヒントを定義する詳細を指定します。(これは、値が必ずしも文字列ではない唯一のヒント・フィールドです。normalize
の場合は、ブールです。)
フィールド
hints
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。 -
-
ingestLimit
(オプション) — 各ドキュメント・セットで分析されるドキュメントの最大数。制限を超えてもエラーは発生せず、その他のドキュメントが検査されないだけです。デフォルト値は「100,000」です。
フィールド
ingestLimit
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。 -
minFieldFrequency
(オプション) - 外れ値(高エントロピ)とみなされないフィールドの最小頻度。フィールドが特定のドキュメント・セットの出現の外れ値となるのは、ドキュメントの
minFieldFrequency
パーセント未満でフィールドが出現する場合です。値ゼロ(0
)パーセントは、外れ値とみなされるフィールドがないことを意味します。たとえば、コースの入力ドキュメントで、値
25
がminFieldFrequency
に使用されている場合、フィールドNotes
は、コースのドキュメント・セットのドキュメントの25%未満で出現するため、出現の外れ値になります。デフォルトの
minFieldFrequency
値は5
です。つまり、入力ドキュメント・セットのドキュメントの5%未満で出現するフィールドは高エントロピとみなされます。コンバータは、出現の外れ値フィールドを基礎となる列にマップしません。フレックス列が存在する場合、インポータは、列にマップされていないフィールド(出現の外れ値フィールドなど)すべてを、フィールドの場所に対応するフレックス列に格納します。
ノート:
このマニュアルに示す学生-教師-コースの例では、各ドキュメント・セットに含まれるドキュメントが非常に少ないため、出現の外れ値の判別および処理を示すために、
25
をminFieldFrequency
値として使用します。 -
minTypeFrequency
(オプション) - 外れ値(高エントロピ)とみなされないフィールドの値の型の最小頻度。フィールドが特定のドキュメント・セットの型出現の外れ値または型の外れ値となるのは、ドキュメントの
minTypeFrequency
パーセント未満で、その値のいずれかが特定の型で出現する場合です。値ゼロ(0)パーセントは、外れ値とみなされるフィールドがないことを意味します。たとえば、コースの入力ドキュメントで、値
15
がminTypeFrequency
に使用されている場合、学生のフィールドage
は、ドキュメントの10%(15%未満)で文字列値を持つため、型の外れ値になります。(他のドキュメントでは数値を持ちます。)デフォルトの
minTypeFrequency
値は5
です。つまり、入力ドキュメント・セットのドキュメントの5%未満でフィールドが特定の型を持つ場合は外れ値とみなされます。インポータは、まれな型の値をフィールドの一般的な型に変換しようとします。たとえば、
length
フィールドの一般的な型がnumber
の場合、値"42"
を持つlength
の出現は数値42
に変換されます。変換の試行が失敗すると、その出現に関するエラーがログに記録されます。ノート:
ここに示す例では、各ドキュメント・セットに含まれるドキュメントが非常に少ないため、型の外れ値の判別および処理を示すために、
15
をminTypeFrequency
値として使用します。 -
normalize
(オプション) - コンバータが推測するリレーショナル表の正規化(共有)を試みる必要があるかどうかを示すブール値(true
/false
)。false
値は、二面性ビューでサポートされるドキュメント内の各オブジェクトに、独自の基礎となる表(他の二面性ビューと共有されない表)があることを意味します。デフォルト値は
true
。フィールド
normalize
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。この最上位構成フィールド
normalize
は、生成されるすべての表および二面性ビューの一般的なコンバータの動作に適用されます。一方、hints
フィールドのオブジェクト内のフィールドnormalize
は、特定のドキュメント・オブジェクトの基礎となる表の共有という、共有をよりきめ細かく防止します。 -
outputFormat
(オプション) — 出力データ定義言語(DDL)スクリプトの形式を定義する値を持つ文字列。デフォルト値は
"executable"
です。これは、DDLスクリプトを直接実行できることを意味します。PL/SQLEXECUTE IMMEDIATE
を使用します。他の指定可能な値は"standalone"
です。これは、個別に実行するSQLスクリプトでDDLスクリプトを使用できることを意味します。フィールド
outputFormat
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。生成されたDDLが32KBを超える場合は、
"standalone"
を使用する必要があります。そうでない場合、EXECUTE IMMEDIATE
を起動するとエラーが発生します。"executable"
DDLスクリプトは、入力データ・セット自体が非常に大きい場合、またはネストされた値のレベルが多数ある場合、大きすぎる可能性があります。 -
rejectLimit
(オプション) - ログに記録できるエラーの最大数。この制限を超えると、インポート操作は取り消され(失敗)、ロールバックされるため、エラー・ログは使用できません。デフォルトでは、制限はありません。フィールド
rejectLimit
は、プロシージャimport_all
にのみ使用されます。 -
softnessThreshold
(オプション) - 入力データに許可される最小清浄度レベル。デフォルト値は99
です。つまり、入力ドキュメントの99%以上に欠落した情報や正しくない情報がないようにする必要があります。フィールド
softnessThreshold
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。 -
sourceSchema
(オプション) — 入力表(tableNames
)を所有するデータベース・スキーマ(ユーザー)の名前を値とする文字列。指定しない場合、入力表の識別に使用されるデータベース・スキーマは、DDLの(実行時ではなく)生成時の現在のスキーマになります。
-
tableNames
(必須) — 元の外部ドキュメント・セットに対応するOracle Database転送表を指定する文字列の配列。各表には、特定のドキュメント・セットのドキュメントを格納するJSON
型の列が必要です(data
という名前を付ける必要はありません)。フィールド
viewNames
を指定する場合、配列の長さはフィールドtableNames
の長さと同じである必要があります。そうでない場合は、エラーが発生します(ログに記録されません)。 -
tablespace
(オプション) — 二面性ビューの基礎となるすべての表に使用する表領域の名前を値とする文字列。指定しない場合、出力DDLに表領域は指定されません。つまり、使用される表領域は、DDLコードの(生成時ではなく)実行時の現在の表領域になります。
フィールド
tablespace
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。 -
targetSchema
(オプション) — 出力データベース・ビュー(viewNames
)を所有するデータベース・スキーマ(ユーザー)の名前を値とする文字列。指定しない場合、出力DDLにデータベース・スキーマは指定されません。作成されるデータベース・オブジェクトの名前は修飾されません。つまり、使用されるスキーマは、DDLコードの(生成時ではなく)実行時の現在のスキーマになります。
-
updatability
(オプション) — 生成される二面性ビューを更新可能(true
)にするか、更新不可(false
)にするかを決定するブール値。true
の場合、注釈(「注釈(NO)UPDATE、(NO)INSERT、(NO)DELETEによる更新操作の許可/禁止」を参照)は、各ビューの更新可能性を最大限に高めるために設定されます。false
の場合、作成されるすべてのビューは読取り専用です。デフォルト値は
true
。フィールド
updatability
は、ファンクションinfer_schema
およびinfer_schema_and_generate
にのみ使用されます。 -
useFlexFields
(オプション) — 二面性ビューの基礎となる表にフレックス列を追加するかどうかを決定するブール値。フレックス列は、アプリケーション実行時に、挿入または更新される受信ドキュメントの認識されないフィールドを格納するために使用されます。useFlexFields
がtrue
の場合、二面性ビュー<view-name>
ごとに、ora$<view-name>_flex
という名前のフレックス列が各表に追加され、サポートされているドキュメント内のオブジェクトの最上位フィールドの直下に配置されます。(特定のフレックス列に格納されているフィールドは、そのオブジェクトにネストされません。)デフォルト値は
true
。フィールド
useFlexFields
は、コンバータ・ファンクションinfer_schema
およびinfer_schema_and_generate
によってのみ使用されます。インポータは、フィールド
useFlexFields
を使用しません。ただし、フレックス列がコンバータによって作成されている場合、インポータは、列にマップされていないフィールドすべてを、フィールドの場所に対応するフレックス列に格納します。たとえば、出現の外れ値フィールドはこのように処理されます。フレックス列がない場合、インポータはマップされていないフィールドに関するエラーをレポートします。 -
viewNames
(オプション) — 作成する二面性ビューを指定する文字列の配列(ドキュメント・セットごとに1つ)。指定しない場合、
_duality
が付加されたtableNames
がビュー名として使用されます。たとえば、表foo
のドキュメントに対応するビューの名前は、デフォルトでfoo_duality
になります。フィールド
viewNames
を指定する場合、配列の長さはフィールドtableNames
の長さと同じである必要があります。そうでない場合は、エラーが発生します(ログに記録されません)。
親トピック: JSONから二面性への移行