21.5 学校経営の例(マイグレータの入力ドキュメント)
既存の学生、教師およびコースのドキュメント・セットは、学校経営の例に対するJSON-to-Dualityマイグレータの入力を構成しています。一般的な移行シナリオでは、それぞれが別のデータベースからJSONダンプ・ファイルの形式で受信される可能性があります。
ノート:
ここに示す例のドキュメント・セットは非常に小規模です。外れ値(高エントロピ)フィールドの処理を示すために、ここに示す例では、デフォルト値5
ではなく、マイグレータ構成フィールドminFieldFrequency
(値25
)およびminTypeFrequency
(値15
)に大きい値を使用します。
フィールドが特定のドキュメント・セットの出現の外れ値となるのは、ドキュメントのminFieldFrequency
パーセント未満でフィールドが出現する場合です。
フィールドが特定のドキュメント・セットの型の外れ値となるのは、ドキュメントのminTypeFrequency
パーセント未満で、その値のいずれかが特定の型で出現する場合です。
-
出現の外れ値フィールド(まれに出現するフィールド)は、コンバータによって基礎となる列のいずれにもマップされません。コンバータがフレックス列を生成する(構成フィールド
useFlexFields
=true
(デフォルト値))場合、インポータは、マップされていないフィールドを二面性ビューの基礎となる表のフレックス列に格納します。フレックス列がない場合、インポータはインポート・エラー・ログにマップされていないフィールドをレポートし、そのフィールドは二面性ビューではサポートされません。 -
型の外れ値フィールド(値が通常とは異なるまれな型であるフィールド)は、異なる方法で処理されます。インポートでは、まれな型の値をフィールドの想定される型に変換しようとします。失敗した変換はインポート・エラー・ログにレポートされ、そのフィールドは二面性ビューでは使用されません。
例21-1 学生のドキュメント・セット(マイグレータの入力)
これらは、JSON-to-Dualityマイグレータへの入力として機能する既存の外部ドキュメント・セットを構成するものした学生のドキュメントです。
{"studentId" : 1,
"name" : "Donald P.",
"age" : 20,
"advisorId" : 102,
"courses" : [ {"courseNumber" : "CS101",
"name" : "Algorithms",
"avgGrade" : 75},
{"courseNumber" : "CS102",
"name" : "Data Structures",
"avgGrade" : "TBD"},
{"courseNumber" : "MATH101",
"name" : "Algebra",
"avgGrade" : 90} ],
"dormitory" : {"dormId" : 201, "dormName" : "ABC"}}
{"studentId" : 2,
"name" : "Elena H.",
"age" : 21,
"advisorId" : 103,
"courses" : [ {"courseNumber" : "CS101",
"name" : "Algorithms",
"avgGrade" : 75},
{"courseNumber" : "CS102",
"name" : "Data Structures",
"avgGrade" : "TBD"},
{"courseNumber" : "MATH102",
"name" : "Calculus",
"avgGrade" : 95} ],
"dormitory" : {"dormId" : 202, "dormName" : "XYZ"}}
{"studentId" : 3,
"name" : "Francis K.",
"age" : 20,
"advisorId" : 103,
"courses" : [ {"courseNumber" : "MATH103",
"name" : "Advanced Algebra",
"avgGrade" : 82} ],
"dormitory" : {"dormId" : 204, "dormName" : "QWE"}}
{"studentId" : 4,
"name" : "Georgia D.",
"age" : 19,
"advisorId" : 101,
"courses" : [ {"courseNumber" : "CS101",
"name" : "Algorithms",
"avgGrade" : 75},
{"courseNumber" : "MATH102",
"name" : "Calculus",
"avgGrade" : 95},
{"courseNumber" : "MATH103",
"name" : "Advanced Algebra",
"avgGrade" : 82} ],
"dormitory" : {"dormId" : 203, "dormName" : "LMN"}}
{"studentId" : 5,
"name" : "Hye E.",
"age" : 21,
"advisorId" : 103,
"courses" : [ {"courseNumber" : "CS102",
"name" : "Data Structures",
"avgGrade" : "TBD"},
{"courseNumber" : "MATH101",
"name" : "Algebra",
"avgGrade" : 90} ],
"dormitory" : {"dormId" : 201, "dormName" : "ABC"}}
{"studentId" : 6,
"name" : "Ileana D.",
"age" : 21,
"advisorId" : 102,
"courses" : [ {"courseNumber" : "MATH103",
"name" : "Advanced Algebra",
"avgGrade" : 82} ],
"dormitory" : {"dormId" : 205, "dormName" : "GHI"}}
{"studentId" : 7,
"name" : "Jatin S.",
"age" : 20,
"advisorId" : 101,
"courses" : [ {"courseNumber" : "CS101",
"name" : "Algorithms",
"avgGrade" : 75},
{"courseNumber" : "CS102",
"name" : "Data Structures",
"avgGrade" : "TBD"} ],
"dormitory" : {"dormId" : 204, "dormName" : "QWE"}}
{"studentId" : 8,
"name" : "Katie H.",
"age" : 21,
"advisorId" : 102,
"courses" : [ {"courseNumber" : "CS102",
"name" : "Data Structures",
"avgGrade" : "TBD"},
{"courseNumber" : "MATH103",
"name" : "Advanced Algebra",
"avgGrade" : 82} ],
"dormitory" : {"dormId" : 205, "dormName" : "GHI"}}
{"studentId" : 9,
"name" : "Luis F.",
"age" : "Nineteen",
"advisorId" : 101,
"courses" : [ {"courseNumber" : "CS101",
"name" : "Algorithms",
"avgGrade" : 75},
{"courseNumber" : "MATH102",
"name" : "Calculus",
"avgGrade" : 95},
{"courseNumber" : "MATH103",
"name" : "Advanced Algebra",
"avgGrade" : 82} ],
"dormitory" : {"dormId" : 201, "dormName" : "ABC"}}
{"studentId" : 10,
"name" : "Ming L.",
"age" : 20,
"advisorId" : 101,
"courses" : [ {"courseNumber" : "MATH102",
"name" : "Calculus",
"avgGrade" : 95} ],
"dormitory" : {"dormId" : 202, "dormName" : "XYZ"}}
特に、次の2つのフィールドに注意してください:
-
フィールド
age
は、数値と文字列の混合型です。10個のドキュメントのうち1つのドキュメント(10%)では、その値は文字列("Nineteen"
)で、他のドキュメント(90%)では値は数値です。 -
フィールド
avgGrade
は、数値と文字列の混合型です。10個すべてのドキュメント(100%)で、少なくとも1つの出現で数値を持っています。10個のドキュメントのうち5つのドキュメント(50%)で、少なくとも1つの出現で文字列値("TBD"
)を持っています。
フィールドage
は、通常、その値が数値であると想定されていますが、フィールドがまれに文字列値で出現することがあるため、型の外れ値とみなすことができます。マイグレータを使用すると、"まれである"とみなす出現頻度を決定できるので、このようなフィールドを(構成フィールドminFieldFrequency
およびminTypeFrequency
を使用して)特別に処理できます。
例21-2 教師のドキュメント・セット(マイグレータの入力)
これらは、JSON-to-Dualityマイグレータへの入力として機能する既存の外部ドキュメント・セットを構成するものした教師のドキュメントです。
{"_id" : 101,
"name" : "Abdul J.",
"phoneNumber" : [ "222-555-011", "222-555-012" ],
"salary" : 200000,
"department" : "Mathematics",
"coursesTaught" : [ {"courseId" : "MATH101",
"name" : "Algebra",
"classType" : "Online"},
{"courseId" : "MATH102",
"name" : "Calculus",
"classType" : "In-person"} ],
"studentsAdvised" : [ {"studentId" : 4, "name" : "Georgia D.", "dormId" : 203},
{"studentId" : 7, "name" : "Jatin S.", "dormId" : 204},
{"studentId" : 9, "name" : "Luis F.", "dormId" : 201},
{"studentId" : 10, "name" : "Ming L.", "dormId" : 202} ]}
{"_id" : 102,
"name" : "Betty Z.",
"phoneNumber" : "222-555-022",
"salary" : 300000,
"department" : "Computer Science",
"coursesTaught" : [ {"courseId" : "CS101",
"name" : "Algorithms",
"classType" : "Online"},
{"courseId" : "CS102",
"name" : "Data Structures",
"classType" : "In-person"} ],
"studentsAdvised" : [ {"studentId" : 1, "name" : "Donald P.", "dormId" : 201},
{"studentId" : 6, "name" : "Ileana D.", "dormId" : 205},
{"studentId" : 8, "name" : "Katie H.", "dormId" : 205} ]}
{"_id" : 103,
"name" : "Colin J.",
"phoneNumber" : [ "222-555-023" ],
"salary" : 220000,
"department" : "Mathematics",
"coursesTaught" : [ {"courseId" : "MATH103",
"name" : "Advanced Algebra",
"classType" : "Online"} ],
"studentsAdvised" : [ {"studentId" : 2, "name" : "Elena H.", "dormId" : 202},
{"studentId" : 3, "name" : "Francis K.", "dormId" : 204},
{"studentId" : 5, "name" : "Hye E.", "dormId" : 201} ]}
{"_id" : 104,
"name" : "Natalie C.",
"phoneNumber" : "222-555-044",
"salary" : 180000,
"department" : "Computer Science",
"coursesTaught" : [],
"studentsAdvised" : []}
フィールドphoneNumber
は、文字列と配列(文字列の配列)の混合型です。4つのドキュメントのうち2つのドキュメント(50%)では、その値は文字列で、もう2つのドキュメントでは値は文字列の配列です。
(フィールドcoursesTaught
およびstudentsAdvised
にはそれぞれ、値が空の配列である出現が1つあります。)
例21-3 コースのドキュメント・セット(マイグレータの入力)
これらは、JSON-to-Dualityマイグレータへの入力として機能する既存の外部ドキュメント・セットを構成するものしたコースのドキュメントです。
{"courseId" : "MATH101",
"name" : "Algebra",
"creditHours" : 3,
"students" : [ {"studentId" : 1, "name" : "Donald P."},
{"studentId" : 5, "name" : "Hye E."} ],
"teacher" : {"teacherId" : 104, "name" : "Abdul J."},
"Notes" : "Prerequisite for Advanced Algebra"}
{"courseId" : "MATH102",
"name" : "Calculus",
"creditHours" : 4,
"students" : [ {"studentId" : 2, "name" : "Elena H."},
{"studentId" : 4, "name" : "Georgia D."},
{"studentId" : 9, "name" : "Luis F."},
{"studentId" : 10, "name" : "Ming L."} ],
"teacher" : {"teacherId" : 101, "name" : "Abdul J."}}
{"courseId" : "CS101",
"name" : "Algorithms",
"creditHours" : 5,
"students" : [ {"studentId" : 1, "name" : "Donald P."},
{"studentId" : 2, "name" : "Elena H."},
{"studentId" : 4, "name" : "Georgia D."},
{"studentId" : 7, "name" : "Jatin S."},
{"studentId" : 9, "name" : "Luis F."} ],
"teacher" : {"teacherId" : 102, "name" : "Betty Z."}}
{"courseId" : "CS102",
"name" : "Data Structures",
"creditHours" : 3,
"students" : [ {"studentId" : 1, "name" : "Donald P."},
{"studentId" : 2, "name" : "Elena H."},
{"studentId" : 5, "name" : "Hye E."},
{"studentId" : 7, "name" : "Jatin S."},
{"studentId" : 8, "name" : "Katie H."} ],
"teacher" : {"teacherId" : 102, "name" : "Betty Z."}}
{"courseId" : "MATH103",
"name" : "Advanced Algebra",
"creditHours" : "3",
"students" : [ {"studentId" : 3, "name" : "Francis K."},
{"studentId" : 4, "name" : "Georgia D."},
{"studentId" : 6, "name" : "Ileana D."},
{"studentId" : 8, "name" : "Katie H."},
{"studentId" : 9, "name" : "Luis F."} ],
"teacher" : {"teacherId" : 103, "name" : "Colin J."}}
特に、次の2つのフィールドに注意してください:
-
フィールド
Notes
は、1つのコースのドキュメントでのみ出現します(5つのうち1つ、20%)。 -
フィールド
creditHours
は、数値と文字列の混合型です。5つのドキュメントのうち1つのドキュメント(20%)では、その値は文字列で、他のドキュメント(80%)では値は数値です。
フィールドNotes
は、20%の出現はまれであると考えられるため、出現の外れ値とみなすことができ、また、フィールドcreditHours
は、文字列値でまれに出現する(20%)ため、型の外れ値とみなすことができます。マイグレータを使用すると、"まれである"とみなす出現頻度を決定できるので、このようなフィールドを(構成フィールドminFieldFrequency
およびminTypeFrequency
を使用して)特別に処理できます。
親トピック: JSONから二面性への移行