21.11 デフォルトの変換後のインポート
デフォルトの変換(minFieldFrequency
およびminTypeFrequency
を除く)を具体的にはuseFlexFields:true
で実行すると、学生、教師およびコースの入力ドキュメント・セットからほぼすべてのドキュメントが正常にインポートされますが、一部のフィールドは元の入力ドキュメントとまったく同じではありません。
エラー・ログを作成し、「コンバータの使用(デフォルトの動作)」で作成した二面性ビューに(表student_tab
、teacher_tab
およびcourse_tab
の)入力ドキュメント・セットをインポートするプロセスは、簡易レシピ・ケースとまったく同じです。「二面性への移行、簡易レシピ」の「エラー・ログの作成(外れ値なしのユースケース)」および「ドキュメント・セットのインポート(外れ値なしのユースケース)」を参照してください。デフォルト・ケースのエラー・ログを確認すると、別のことがわかります。
例21-23 インポートからのエラー・ログの確認(デフォルト・ケース)
二面性ビューteacher
およびcourse
へのインポートに関してログに記録されたエラーはありません。ただし、簡易レシピ・ケース(「二面性への移行、簡易レシピ」の「インポートからのエラー・ログの確認(外れ値なしのユースケース)」)とは異なり、学生のビューへのインポートでは、値"Nineteen"
のフィールドage
について型出現の外れ値に関するエラーがログに記録されます。
SELECT ora_err_number$, ora_err_mesg$, ora_err_tag$
FROM student_err_log;
ORA_ERR_NUMBER$
---------------
ORA_ERR_MESG$
-------------
ORA_ERR_TAG$
------------
42555
ORA-42555: Cannot insert into JSON Relational Duality View 'STUDENT': The input JSON document is invalid.
JZN-00671: value of field 'age' can not be converted to a number
Import Error
学生の入力表から原因となる学生のドキュメントを選択します:
SELECT * FROM "JANUS".student_tab
WHERE ROWID IN (SELECT ora_err_rowid$ FROM student_err_log);
DATA
----
{"studentId":9,"name":"Luis F.","age":"Nineteen","advisorId":101,"courses":[{"co
urseNumber":"CS101","name":"Algorithms","avgGrade":75},{"courseNumber":"MATH102"
,"name":"Calculus","avgGrade":95},{"courseNumber":"MATH103","name":"Advanced Alg
ebra","avgGrade":82}],"dormitory":{"dormId":201,"dormName":"ABC"}}
簡易移行ケース(「二面性への移行、簡易レシピ」の「VALIDATE_IMPORT_REPORT (外れ値なしのユースケース)」を参照)とは異なり、DBMS_JSON_DUALITY.validate_import_report
を使用してインポートを検証すると、正常にインポートされたドキュメントに関するエラーがレポートされます。Luis F.の学生のドキュメントのage
フィールドにnull
値があり、これは入力文字列値"Nineteen"
に対応しています。
PL/SQLファンクションvalidate_import_report
は、入力ドキュメントと二面性ビューにインポートされたドキュメントを比較しますが、コンバータによって追加された追加フィールド(_id
、_metadata
、ora$map
*、ora$
*_flex
)は無視します。JSONパッチの形式を使用して、問題のあるフィールドを識別し、入力データに対して実行できる編集操作を指定して問題(相違)を解決します。
次の各例(「学生の二面性ビューのドキュメント・コレクション(useFlexFields = true)」、「教師の二面性ビューのドキュメント・コレクション(useFlexFields = true)」および「コースの二面性ビューのドキュメント・コレクション(useFlexFields = true)」)に、二面性ビューでサポートされるドキュメント・コレクション(インポートの結果)を示します。
例21-24 学生の二面性ビューのドキュメント・コレクション(useFlexFields = true)
これを、学生の入力ドキュメント・セット(「学校経営の例(マイグレータの入力ドキュメント)」)と比較します。このセット(minFieldFrequency
= 25
およびminTypeFrequency
= 15
を使用して変換)にある外れ値フィールドはage
(型出現の頻度10%) 1つのみです。
相違(フィールドの順序は関係ないので無視)は次の点のみです:
-
ドキュメント識別子フィールド
_id
およびドキュメント状態フィールド_metadata
が追加されました。(二面性ビューでサポートされているすべてのドキュメントに、これらのフィールドがあります。) -
フィールド
ora$mapCourseId
およびora$mapStudentId
が追加されました。これらは、基になるマッピング表mapping_table_course_root_to_student_root
の識別列(この場合は主キー列)に対応付けられています。これらの値はそれぞれ、フィールドcourseNumber
およびstudentId
の値と同じです。 -
学生Luis F.のドキュメント(
studentId
=9
)が学生の二面性ビューへのインポートに失敗した(フィールドage
に文字列値"Nineteen"
があり、その10%の出現は型出現の外れ値であるため)にもかかわらず、そのドキュメントは二面性ビューに存在しています。ドキュメントをコースおよび教師の二面性ビューにインポートすると、列student_root.student_id
の値として9
を持つ行が表student_root
に追加されます。これは、値9
を持つstudentId
が入力表course_tab
とteacher_tab
の両方に存在するためです。ただし、Luis F.の学生のドキュメントの
age
フィールド値はnull
です(19
でも"Nineteen"
でもありません)。コースまたは教師の入力ドキュメント・セットのいずれにもage
フィールドが存在しないため、Luis F.の学生のデータをcourseおよびteacherビューにインポートすると、NULL
が表student_root
のage
列に格納されます。また、そのNULL
列値は、学生のドキュメント内のJSONnull
にマップされます。
他に相違はありません。具体的には、混合型フィールドavgGrade
は外れ値ではない(各型はドキュメントの15%超で出現する)ため、入力データから変更されていません。
{
"_id" : 1,
"_metadata" :
{
"etag" : "4F39C8B86F4295AD2958B18A77B0AACC",
"asof" : "0000000000423804"
},
"age" : 20,
"name" : "Donald P.",
"courses" :
[
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 1,
"name" : "Algorithms",
"avgGrade" : 75,
"courseNumber" : "CS101"
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 1,
"name" : "Data Structures",
"avgGrade" : "TBD",
"courseNumber" : "CS102"
},
{
"ora$mapCourseId" : "MATH101",
"ora$mapStudentId" : 1,
"name" : "Algebra",
"avgGrade" : 90,
"courseNumber" : "MATH101"
}
],
"advisorId" : 102,
"dormitory" :
{
"dormId" : 201,
"dormName" : "ABC"
},
"studentId" : 1
}
{
"_id" : 2,
"_metadata" :
{
"etag" : "758A4F3E6EF3152A4FA0892AB38635D4",
"asof" : "0000000000423804"
},
"age" : 21,
"name" : "Elena H.",
"courses" :
[
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 2,
"name" : "Algorithms",
"avgGrade" : 75,
"courseNumber" : "CS101"
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 2,
"name" : "Data Structures",
"avgGrade" : "TBD",
"courseNumber" : "CS102"
},
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 2,
"name" : "Calculus",
"avgGrade" : 95,
"courseNumber" : "MATH102"
}
],
"advisorId" : 103,
"dormitory" :
{
"dormId" : 202,
"dormName" : "XYZ"
},
"studentId" : 2
}
{
"_id" : 3,
"_metadata" :
{
"etag" : "06905F120EF74124C5985354BBCE5CC1",
"asof" : "0000000000423804"
},
"age" : 20,
"name" : "Francis K.",
"courses" :
[
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 3,
"name" : "Advanced Algebra",
"avgGrade" : 82,
"courseNumber" : "MATH103"
}
],
"advisorId" : 103,
"dormitory" :
{
"dormId" : 204,
"dormName" : "QWE"
},
"studentId" : 3
}
{
"_id" : 4,
"_metadata" :
{
"etag" : "50847D1AB63537118A6133A4CC1B8708",
"asof" : "0000000000423804"
},
"age" : 19,
"name" : "Georgia D.",
"courses" :
[
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 4,
"name" : "Algorithms",
"avgGrade" : 75,
"courseNumber" : "CS101"
},
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 4,
"name" : "Calculus",
"avgGrade" : 95,
"courseNumber" : "MATH102"
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 4,
"name" : "Advanced Algebra",
"avgGrade" : 82,
"courseNumber" : "MATH103"
}
],
"advisorId" : 101,
"dormitory" :
{
"dormId" : 203,
"dormName" : "LMN"
},
"studentId" : 4
}
{
"_id" : 5,
"_metadata" :
{
"etag" : "FD6E27A868C56D1EF9C7AEB3F08C7F9B",
"asof" : "0000000000423804"
},
"age" : 21,
"name" : "Hye E.",
"courses" :
[
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 5,
"name" : "Data Structures",
"avgGrade" : "TBD",
"courseNumber" : "CS102"
},
{
"ora$mapCourseId" : "MATH101",
"ora$mapStudentId" : 5,
"name" : "Algebra",
"avgGrade" : 90,
"courseNumber" : "MATH101"
}
],
"advisorId" : 103,
"dormitory" :
{
"dormId" : 201,
"dormName" : "ABC"
},
"studentId" : 5
}
{
"_id" : 6,
"_metadata" :
{
"etag" : "2BDA7862330B0687F22F830F3E314E34",
"asof" : "0000000000423804"
},
"age" : 21,
"name" : "Ileana D.",
"courses" :
[
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 6,
"name" : "Advanced Algebra",
"avgGrade" : 82,
"courseNumber" : "MATH103"
}
],
"advisorId" : 102,
"dormitory" :
{
"dormId" : 205,
"dormName" : "GHI"
},
"studentId" : 6
}
{
"_id" : 7,
"_metadata" :
{
"etag" : "F1EF0CCD54EDFA78D2263D7E742D6CE8",
"asof" : "0000000000423804"
},
"age" : 20,
"name" : "Jatin S.",
"courses" :
[
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 7,
"name" : "Algorithms",
"avgGrade" : 75,
"courseNumber" : "CS101"
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 7,
"name" : "Data Structures",
"avgGrade" : "TBD",
"courseNumber" : "CS102"
}
],
"advisorId" : 101,
"dormitory" :
{
"dormId" : 204,
"dormName" : "QWE"
},
"studentId" : 7
}
{
"_id" : 8,
"_metadata" :
{
"etag" : "9A25A267BC08858E0F754E0C00B32F9E",
"asof" : "0000000000423804"
},
"age" : 21,
"name" : "Katie H.",
"courses" :
[
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 8,
"name" : "Data Structures",
"avgGrade" : "TBD",
"courseNumber" : "CS102"
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 8,
"name" : "Advanced Algebra",
"avgGrade" : 82,
"courseNumber" : "MATH103"
}
],
"advisorId" : 102,
"dormitory" :
{
"dormId" : 205,
"dormName" : "GHI"
},
"studentId" : 8
}
{
"_id" : 10,
"_metadata" :
{
"etag" : "94376DA05B92E47718AF70A31FBE56E7",
"asof" : "0000000000423804"
},
"age" : 20,
"name" : "Ming L.",
"courses" :
[
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 10,
"name" : "Calculus",
"avgGrade" : 95,
"courseNumber" : "MATH102"
}
],
"advisorId" : 101,
"dormitory" :
{
"dormId" : 202,
"dormName" : "XYZ"
},
"studentId" : 10
}
{
"_id" : 9,
"_metadata" :
{
"etag" : "579824C71904C46901BBA605E8539943",
"asof" : "0000000000423804"
},
"age" : null,
"name" : "Luis F.",
"courses" :
[
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 9,
"name" : "Algorithms",
"avgGrade" : 75,
"courseNumber" : "CS101"
},
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 9,
"name" : "Calculus",
"avgGrade" : 95,
"courseNumber" : "MATH102"
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 9,
"name" : "Advanced Algebra",
"avgGrade" : 82,
"courseNumber" : "MATH103"
}
],
"advisorId" : 101,
"dormitory" :
{
"dormId" : 201,
"dormName" : "ABC"
},
"studentId" : 9
}
例21-25 教師の二面性ビューのドキュメント・コレクション(useFlexFields = true)
これを、教師の入力ドキュメント・セット(「学校経営の例(マイグレータの入力ドキュメント)」)と比較します。このセットには、外れ値がありませんでした。
唯一の相違(フィールドの順序は関係ないので無視)は、ドキュメント識別子フィールド_id
およびドキュメント状態フィールド_metadata
が追加されたことです。(二面性ビューでサポートされているすべてのドキュメントに、これらのフィールドがあります。)
フィールドphoneNumber
は、文字列(50%)と文字列の配列(50%)の混合型です。(これは混合型であり、型出現の外れ値ではないため、独自のJSON
型列に格納されます。)
{
"_id" : 101,
"_metadata" :
{
"etag" : "F919587CCFAD69F2208B0CDDC80BFAB8",
"asof" : "000000000042348C"
},
"name" : "Abdul J.",
"salary" : 200000,
"department" : "Mathematics",
"phoneNumber" :
[
"222-555-011",
"222-555-012"
],
"coursesTaught" :
[
{
"name" : "Algebra",
"courseId" : "MATH101",
"classType" : "Online"
},
{
"name" : "Calculus",
"courseId" : "MATH102",
"classType" : "In-person"
}
],
"studentsAdvised" :
[
{
"name" : "Georgia D.",
"dormId" : 203,
"studentId" : 4
},
{
"name" : "Jatin S.",
"dormId" : 204,
"studentId" : 7
},
{
"name" : "Luis F.",
"dormId" : 201,
"studentId" : 9
},
{
"name" : "Ming L.",
"dormId" : 202,
"studentId" : 10
}
]
}
{
"_id" : 102,
"_metadata" :
{
"etag" : "657E2A688F0A086D948A557ABB1FE3BC",
"asof" : "000000000042348C"
},
"name" : "Betty Z.",
"salary" : 300000,
"department" : "Computer Science",
"phoneNumber" : "222-555-022",
"coursesTaught" :
[
{
"name" : "Algorithms",
"courseId" : "CS101",
"classType" : "Online"
},
{
"name" : "Data Structures",
"courseId" : "CS102",
"classType" : "In-person"
}
],
"studentsAdvised" :
[
{
"name" : "Donald P.",
"dormId" : 201,
"studentId" : 1
},
{
"name" : "Ileana D.",
"dormId" : 205,
"studentId" : 6
},
{
"name" : "Katie H.",
"dormId" : 205,
"studentId" : 8
}
]
}
{
"_id" : 103,
"_metadata" :
{
"etag" : "1F2DB9CBCD6F7E5E558785D78CA7D116",
"asof" : "000000000042348C"
},
"name" : "Colin J.",
"salary" : 220000,
"department" : "Mathematics",
"phoneNumber" :
[
"222-555-023"
],
"coursesTaught" :
[
{
"name" : "Advanced Algebra",
"courseId" : "MATH103",
"classType" : "Online"
}
],
"studentsAdvised" :
[
{
"name" : "Elena H.",
"dormId" : 202,
"studentId" : 2
},
{
"name" : "Francis K.",
"dormId" : 204,
"studentId" : 3
},
{
"name" : "Hye E.",
"dormId" : 201,
"studentId" : 5
}
]
}
{
"_id" : 104,
"_metadata" :
{
"etag" : "D4D644FB68590D5A00EC53778F0E7226",
"asof" : "000000000042348C"
},
"name" : "Natalie C.",
"salary" : 180000,
"department" : "Computer Science",
"phoneNumber" : "222-555-044",
"coursesTaught" :
[
],
"studentsAdvised" :
[
]
}
例21-26 コースの二面性ビューのドキュメント・コレクション(useFlexFields = true)
これを、コースの入力ドキュメント・セット(「学校経営の例(マイグレータの入力ドキュメント)」)と比較します。このセット(minFieldFrequency
= 25
およびminTypeFrequency
= 15
を使用して変換)にある外れ値フィールドはNotes
(フィールド出現の頻度20%) 1つのみです。
それでも、フィールドNotes
はコースMATH101
の二面性ビュー・ドキュメントに存在します。これは、変換がuseFlexFields
= true
を使用して実行されたためです。つまり、コンバータが二面性ビューにフレックス列を作成した(インポータはフレックス列にフィールドNotes
を格納した)ことを意味します。
入力ドキュメントとのその他の違いは、(フィールドの順序は関係ないので無視)は、ドキュメント識別子フィールド_id
およびドキュメント状態フィールド_metadata
が追加されたことのみです。二面性ビューでサポートされているすべてのドキュメントに、これらのフィールドがあります。
フィールドcreditHours
に関しては違いがないことに注意してください。これは、混合型number-or-stringです(つまり、値は数値または文字列のいずれかです)。また、1つの(コースMATH103
の)ドキュメントでしか文字列値を使用していないにもかかわらず、フィールドは型出現の外れ値ではありません。これは、5つのドキュメントのうち1つのドキュメント(20%)で文字列が出現し、minTypeFrequency
= 15
を超えるためです。
フィールド_id
は、入力フィールドcourseId
にマップされているため、"MATH101"
などの文字列値を持つことにも注意してください。ドキュメント識別子フィールドは数値である必要はなく、その値に必要なのはドキュメントを一意に識別することのみです。
{
"_id" : "CS101",
"_metadata" :
{
"etag" : "FE5B789404D0B9945EB69D7036759CF2",
"asof" : "0000000000423494"
},
"name" : "Algorithms",
"teacher" :
{
"name" : "Betty Z.",
"teacherId" : 102
},
"students" :
[
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 1,
"name" : "Donald P.",
"studentId" : 1
},
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 2,
"name" : "Elena H.",
"studentId" : 2
},
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 4,
"name" : "Georgia D.",
"studentId" : 4
},
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 7,
"name" : "Jatin S.",
"studentId" : 7
},
{
"ora$mapCourseId" : "CS101",
"ora$mapStudentId" : 9,
"name" : "Luis F.",
"studentId" : 9
}
],
"creditHours" : 5,
"courseId" : "CS101"
}
{
"_id" : "CS102",
"_metadata" :
{
"etag" : "D2A2D30D1998AAABC4D6EC5FDAFB2472",
"asof" : "0000000000423494"
},
"name" : "Data Structures",
"teacher" :
{
"name" : "Betty Z.",
"teacherId" : 102
},
"students" :
[
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 1,
"name" : "Donald P.",
"studentId" : 1
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 2,
"name" : "Elena H.",
"studentId" : 2
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 5,
"name" : "Hye E.",
"studentId" : 5
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 7,
"name" : "Jatin S.",
"studentId" : 7
},
{
"ora$mapCourseId" : "CS102",
"ora$mapStudentId" : 8,
"name" : "Katie H.",
"studentId" : 8
}
],
"creditHours" : 3,
"courseId" : "CS102"
}
{
"_id" : "MATH101",
"_metadata" :
{
"etag" : "3509714A03884A40BC1EBE0952E3F5CE",
"asof" : "0000000000423494"
},
"name" : "Algebra",
"teacher" :
{
"name" : "Abdul J.",
"teacherId" : 101
},
"students" :
[
{
"ora$mapCourseId" : "MATH101",
"ora$mapStudentId" : 1,
"name" : "Donald P.",
"studentId" : 1
},
{
"ora$mapCourseId" : "MATH101",
"ora$mapStudentId" : 5,
"name" : "Hye E.",
"studentId" : 5
}
],
"creditHours" : 3,
"Notes" : "Prerequisite for Advanced Algebra",
"courseId" : "MATH101"
}
{
"_id" : "MATH102",
"_metadata" :
{
"etag" : "3193D7B3FC1EC95210D4ABF12DF1558E",
"asof" : "0000000000423494"
},
"name" : "Calculus",
"teacher" :
{
"name" : "Abdul J.",
"teacherId" : 101
},
"students" :
[
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 2,
"name" : "Elena H.",
"studentId" : 2
},
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 4,
"name" : "Georgia D.",
"studentId" : 4
},
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 9,
"name" : "Luis F.",
"studentId" : 9
},
{
"ora$mapCourseId" : "MATH102",
"ora$mapStudentId" : 10,
"name" : "Ming L.",
"studentId" : 10
}
],
"creditHours" : 4,
"courseId" : "MATH102"
}
{
"_id" : "MATH103",
"_metadata" :
{
"etag" : "8AC5912C1CB56D431FF4F979EB121E60",
"asof" : "0000000000423494"
},
"name" : "Advanced Algebra",
"teacher" :
{
"name" : "Colin J.",
"teacherId" : 103
},
"students" :
[
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 3,
"name" : "Francis K.",
"studentId" : 3
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 4,
"name" : "Georgia D.",
"studentId" : 4
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 6,
"name" : "Ileana D.",
"studentId" : 6
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 8,
"name" : "Katie H.",
"studentId" : 8
},
{
"ora$mapCourseId" : "MATH103",
"ora$mapStudentId" : 9,
"name" : "Luis F.",
"studentId" : 9
}
],
"creditHours" : "3",
"courseId" : "MATH103"
}
次の例「二面性ビューでサポートされるドキュメント・コレクションのJSONデータ・ガイドの作成」では、各二面性ビュー、つまりビューでサポートされているドキュメント・セットに、データ・ガイドJSONスキーマを作成します。各二面性ビューのスキーマを、対応する入力ドキュメント・セットを記述するデータ・ガイドJSONスキーマ(「コンバータを使用する前に(2): データ・ガイドJSONスキーマの作成(オプション)」の例「入力ドキュメント・セット用のJSONデータ・ガイドの作成」を参照)と比較できます。
データ・ガイド・スキーマは、二面性ビューでサポートされるドキュメントを対応する入力ドキュメントと比較するためのショートカット(プロキシ)として機能します。このような比較は、(1)一部のドキュメントの変更方法、(2)データベース・オブジェクトの推測および生成に使用される一部の構成フィールドの変更方法、(3)二面性ビューまたは表の定義の変更方法を決定するのに役立ちます。
入力データベース・オブジェクトと出力データベース・オブジェクト(入力転送表と出力二面性ビュー)間のJSONスキーマの比較は、入力ドキュメントと出力ドキュメントの比較とは異なることに注意する必要があります。スキーマの比較は、変更点を示唆することはできますが、ドキュメントの比較の完全な代替にはなりません。元のドキュメントを二面性ビューにインポートすると、ドキュメントを比較できます。
例21-27 二面性ビューでサポートされるドキュメント・コレクションのJSONデータ・ガイドの作成
このコードは、「コンバータを使用する前に(2): データ・ガイドJSONスキーマの作成(オプション)」の例「入力ドキュメント・セット用のJSONデータ・ガイドの作成」のデータ・ガイドJSONスキーマ作成コードと同じです。ただし、ここに示すデータ・ガイドは、入力表ではなく二面性ビューに基づいて作成されます。
SELECT json_dataguide(data,
DBMS_JSON.FORMAT_SCHEMA,
DBMS_JSON.PRETTY+DBMS_JSON.GATHER_STATS)
FROM student;
SELECT json_dataguide(data,
DBMS_JSON.FORMAT_SCHEMA,
DBMS_JSON.PRETTY+DBMS_JSON.GATHER_STATS)
FROM teacher;
SELECT json_dataguide(data,
DBMS_JSON.FORMAT_SCHEMA,
DBMS_JSON.PRETTY+DBMS_JSON.GATHER_STATS)
FROM course;
例21-28 学生の二面性ビュー・データ・ガイド
このデータ・ガイドJSONスキーマは、二面性ビューstudent
でサポートされている学生のドキュメント・コレクションをまとめたものです。
「コンバータを使用する前に(2): データ・ガイドJSONスキーマの作成(オプション)」の例"学生の入力ドキュメント・セット用のJSONデータ・ガイドの作成"の学生の入力ドキュメント用のデータ・ガイドとの違いは、2つの学生のドキュメント・セット(「デフォルトの変換後のインポート」の「学生の二面性ビューのドキュメント・コレクション(useFlexFields = true)」を参照)間の違いを反映しています。
{
"type" : "object",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"properties" :
{
"_id" :
{
"type" : "number",
"o:preferred_column_name" : "_id",
"o:frequency" : 100,
"o:low_value" : 1,
"o:high_value" : 10,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maximum" : 10,
"minimum" : 1
},
"age" :
{
"oneOf" :
[
{
"type" : "null",
"o:preferred_column_name" : "age",
"o:frequency" : 10,
"o:low_value" : null,
"o:high_value" : null,
"o:num_nulls" : 1,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10
},
{
"type" : "number",
"o:preferred_column_name" : "age",
"o:frequency" : 90,
"o:low_value" : 19,
"o:high_value" : 21,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"maximum" : 21,
"minimum" : 19
}
]
},
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 100,
"o:low_value" : "Donald P.",
"o:high_value" : "Ming L.",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maxLength" : 10,
"minLength" : 6
},
"courses" :
{
"type" : "array",
"o:preferred_column_name" : "courses",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"items" :
{
"properties" :
{
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 100,
"o:low_value" : "Advanced Algebra",
"o:high_value" : "Data Structures",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maxLength" : 16,
"minLength" : 7
},
"avgGrade" :
{
"oneOf" :
[
{
"type" : "number",
"o:preferred_column_name" : "avgGrade",
"o:frequency" : 100,
"o:low_value" : 75,
"o:high_value" : 95,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maximum" : 95,
"minimum" : 75
},
{
"type" : "string",
"o:length" : 4,
"o:preferred_column_name" : "avgGrade",
"o:frequency" : 50,
"o:low_value" : "TBD",
"o:high_value" : "TBD",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"maxLength" : 3,
"minLength" : 3
}
]
},
"courseNumber" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "courseNumber",
"o:frequency" : 100,
"o:low_value" : "CS101",
"o:high_value" : "MATH103",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maxLength" : 7,
"minLength" : 5
},
"ora$mapCourseId" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "ora$mapCourseId",
"o:frequency" : 100,
"o:low_value" : "CS101",
"o:high_value" : "MATH103",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maxLength" : 7,
"minLength" : 5
},
"ora$mapStudentId" :
{
"type" : "number",
"o:preferred_column_name" : "ora$mapStudentId",
"o:frequency" : 100,
"o:low_value" : 1,
"o:high_value" : 10,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maximum" : 10,
"minimum" : 1
}
}
}
},
"_metadata" :
{
"type" : "object",
"o:preferred_column_name" : "_metadata",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"properties" :
{
"asof" :
{
"type" : "binary",
"o:length" : 8,
"o:preferred_column_name" : "asof",
"o:frequency" : 100,
"o:low_value" : "",
"o:high_value" : "",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true
},
"etag" :
{
"type" : "binary",
"o:length" : 16,
"o:preferred_column_name" : "etag",
"o:frequency" : 100,
"o:low_value" : "",
"o:high_value" : "",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true
}
}
},
"advisorId" :
{
"type" : "number",
"o:preferred_column_name" : "advisorId",
"o:frequency" : 100,
"o:low_value" : 101,
"o:high_value" : 103,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maximum" : 103,
"minimum" : 101
},
"dormitory" :
{
"type" : "object",
"o:preferred_column_name" : "dormitory",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"properties" :
{
"dormId" :
{
"type" : "number",
"o:preferred_column_name" : "dormId",
"o:frequency" : 100,
"o:low_value" : 201,
"o:high_value" : 205,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maximum" : 205,
"minimum" : 201
},
"dormName" :
{
"type" : "string",
"o:length" : 4,
"o:preferred_column_name" : "dormName",
"o:frequency" : 100,
"o:low_value" : "ABC",
"o:high_value" : "XYZ",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maxLength" : 3,
"minLength" : 3
}
}
},
"studentId" :
{
"type" : "number",
"o:preferred_column_name" : "studentId",
"o:frequency" : 100,
"o:low_value" : 1,
"o:high_value" : 10,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 10,
"required" : true,
"maximum" : 10,
"minimum" : 1
}
}
}
例21-29 教師の二面性ビュー・データ・ガイド
このデータ・ガイドJSONスキーマは、二面性ビューteacher
でサポートされている教師のドキュメント・コレクションをまとめたものです。
「コンバータを使用する前に(2): データ・ガイドJSONスキーマの作成(オプション)」の例「教師の入力ドキュメント・セット用のJSONデータ・ガイド」の教師の入力ドキュメント用のデータ・ガイドとの違いは、2つの教師のドキュメント・セット(「デフォルトの変換後のインポート」の「教師の二面性ビューのドキュメント・コレクション(useFlexFields = true)」を参照)間の違いを反映しています。
{
"type" : "object",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"properties" :
{
"_id" :
{
"type" : "number",
"o:preferred_column_name" : "_id",
"o:frequency" : 100,
"o:low_value" : 101,
"o:high_value" : 104,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"maximum" : 104,
"minimum" : 101
},
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 100,
"o:low_value" : "Abdul J.",
"o:high_value" : "Natalie C.",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"maxLength" : 10,
"minLength" : 8
},
"salary" :
{
"type" : "number",
"o:preferred_column_name" : "salary",
"o:frequency" : 100,
"o:low_value" : 180000,
"o:high_value" : 300000,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"maximum" : 300000,
"minimum" : 180000
},
"_metadata" :
{
"type" : "object",
"o:preferred_column_name" : "_metadata",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"properties" :
{
"asof" :
{
"type" : "binary",
"o:length" : 8,
"o:preferred_column_name" : "asof",
"o:frequency" : 100,
"o:low_value" : "",
"o:high_value" : "",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true
},
"etag" :
{
"type" : "binary",
"o:length" : 16,
"o:preferred_column_name" : "etag",
"o:frequency" : 100,
"o:low_value" : "",
"o:high_value" : "",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true
}
}
},
"department" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "department",
"o:frequency" : 100,
"o:low_value" : "Computer Science",
"o:high_value" : "Mathematics",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"maxLength" : 16,
"minLength" : 11
},
"phoneNumber" :
{
"oneOf" :
[
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "phoneNumber",
"o:frequency" : 50,
"o:low_value" : "222-555-022",
"o:high_value" : "222-555-044",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maxLength" : 11,
"minLength" : 11
},
{
"type" : "array",
"o:preferred_column_name" : "phoneNumber",
"o:frequency" : 50,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"items" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "scalar_string",
"o:frequency" : 50,
"o:low_value" : "222-555-011",
"o:high_value" : "222-555-023",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maxLength" : 11,
"minLength" : 11
}
}
]
},
"coursesTaught" :
{
"type" : "array",
"o:preferred_column_name" : "coursesTaught",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"items" :
{
"properties" :
{
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 75,
"o:low_value" : "Advanced Algebra",
"o:high_value" : "Data Structures",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maxLength" : 16,
"minLength" : 7
},
"courseId" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "courseId",
"o:frequency" : 75,
"o:low_value" : "CS101",
"o:high_value" : "MATH103",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maxLength" : 7,
"minLength" : 5
},
"classType" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "classType",
"o:frequency" : 75,
"o:low_value" : "In-person",
"o:high_value" : "Online",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maxLength" : 9,
"minLength" : 6
}
}
}
},
"studentsAdvised" :
{
"type" : "array",
"o:preferred_column_name" : "studentsAdvised",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"required" : true,
"items" :
{
"properties" :
{
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 75,
"o:low_value" : "Donald P.",
"o:high_value" : "Ming L.",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maxLength" : 10,
"minLength" : 6
},
"dormId" :
{
"type" : "number",
"o:preferred_column_name" : "dormId",
"o:frequency" : 75,
"o:low_value" : 201,
"o:high_value" : 205,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maximum" : 205,
"minimum" : 201
},
"studentId" :
{
"type" : "number",
"o:preferred_column_name" : "studentId",
"o:frequency" : 75,
"o:low_value" : 1,
"o:high_value" : 10,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 4,
"maximum" : 10,
"minimum" : 1
}
}
}
}
}
}
例21-30 コースの二面性ビュー・データ・ガイド(デフォルト・ケース)
このデータ・ガイドJSONスキーマは、useFlexFields
がtrue
の変換ケースについて、二面性ビューcourse
でサポートされているコースのドキュメント・コレクションをまとめたものです。
「コンバータを使用する前に(2): データ・ガイドJSONスキーマの作成(オプション)」の例「コースの入力ドキュメント・セット用のJSONデータ・ガイド」のコースの入力ドキュメント用のデータ・ガイドとの違いは、2つのコースのドキュメント・セット(「デフォルトの変換後のインポート」の「コースの二面性ビューのドキュメント・コレクション(useFlexFields = true)」を参照)間の違いを反映しています。
{
"type" : "object",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"properties" :
{
"_id" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "_id",
"o:frequency" : 100,
"o:low_value" : "CS101",
"o:high_value" : "MATH103",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maxLength" : 7,
"minLength" : 5
},
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 100,
"o:low_value" : "Advanced Algebra",
"o:high_value" : "Data Structures",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maxLength" : 16,
"minLength" : 7
},
"Notes" :
{
"type" : "string",
"o:length" : 64,
"o:preferred_column_name" : "Notes",
"o:frequency" : 20,
"o:low_value" : "Prerequisite for Advanced Algebra",
"o:high_value" : "Prerequisite for Advanced Algebra",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"maxLength" : 33,
"minLength" : 33
},
"teacher" :
{
"type" : "object",
"o:preferred_column_name" : "teacher",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"properties" :
{
"name" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "name",
"o:frequency" : 100,
"o:low_value" : "Abdul J.",
"o:high_value" : "Colin J.",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maxLength" : 8,
"minLength" : 8
},
"teacherId" :
{
"type" : "number",
"o:preferred_column_name" : "teacherId",
"o:frequency" : 100,
"o:low_value" : 101,
"o:high_value" : 103,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maximum" : 103,
"minimum" : 101
}
}
},
"courseId" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "courseId",
"o:frequency" : 100,
"o:low_value" : "CS101",
"o:high_value" : "MATH103",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maxLength" : 7,
"minLength" : 5
},
"students" :
{
"type" : "array",
"o:preferred_column_name" : "students",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"items" :
{
"properties" :
{
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name",
"o:frequency" : 100,
"o:low_value" : "Donald P.",
"o:high_value" : "Ming L.",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maxLength" : 10,
"minLength" : 6
},
"studentId" :
{
"type" : "number",
"o:preferred_column_name" : "studentId",
"o:frequency" : 100,
"o:low_value" : 1,
"o:high_value" : 10,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maximum" : 10,
"minimum" : 1
},
"ora$mapCourseId" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "ora$mapCourseId",
"o:frequency" : 100,
"o:low_value" : "CS101",
"o:high_value" : "MATH103",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maxLength" : 7,
"minLength" : 5
},
"ora$mapStudentId" :
{
"type" : "number",
"o:preferred_column_name" : "ora$mapStudentId",
"o:frequency" : 100,
"o:low_value" : 1,
"o:high_value" : 10,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"maximum" : 10,
"minimum" : 1
}
}
}
},
"_metadata" :
{
"type" : "object",
"o:preferred_column_name" : "_metadata",
"o:frequency" : 100,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true,
"properties" :
{
"asof" :
{
"type" : "binary",
"o:length" : 8,
"o:preferred_column_name" : "asof",
"o:frequency" : 100,
"o:low_value" : "",
"o:high_value" : "",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true
},
"etag" :
{
"type" : "binary",
"o:length" : 16,
"o:preferred_column_name" : "etag",
"o:frequency" : 100,
"o:low_value" : "",
"o:high_value" : "",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"required" : true
}
}
},
"creditHours" :
{
"oneOf" :
[
{
"type" : "number",
"o:preferred_column_name" : "creditHours",
"o:frequency" : 80,
"o:low_value" : 3,
"o:high_value" : 5,
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"maximum" : 5,
"minimum" : 3
},
{
"type" : "string",
"o:length" : 1,
"o:preferred_column_name" : "creditHours",
"o:frequency" : 20,
"o:low_value" : "3",
"o:high_value" : "3",
"o:num_nulls" : 0,
"o:last_analyzed" : "2025-01-10T17:29:04",
"o:sample_size" : 5,
"maxLength" : 1,
"minLength" : 1
}
]
}
}
}
DBMS_JSON_SCHEMA.describe
を使用して、二面性ビューに関する様々な情報を示すJSONスキーマを作成することもできます。
関連項目:
-
ファンクション
validate_import_report
の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』の「DBMS_JSON_DUALITY」を参照してください -
DBMS_JSON_DUALITY.validate_import_report
によってレポートされるエラー・コンテンツの詳細は、JSON PatchおよびJSON Pointerを参照してください -
『Oracle Database JSON開発者ガイド』のDBMS_JSON_SCHEMA.DESCRIBEで生成されたJSONスキーマ
-
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』の「DESCRIBEファンクション」
親トピック: JSONから二面性への移行