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を使用して)特別に処理できます。