21.13 変換後のインポート(useFlexFields=false)

インポートを試行すると、エラー・ログ表が作成され、問合せが実行されて、インポート・エラーおよびインポートされたドキュメントが表示されます。

エラー・ログを作成し、「コンバータの使用(useFlexFields=false)」で作成した二面性ビューに(表student_tabteacher_tabおよびcourse_tabの)入力ドキュメント・セットをインポートするプロセスは、簡易レシピ・ケースとまったく同じです。「二面性への移行、簡易レシピ」の例「エラー・ログの作成(外れ値なしのユースケース)」および「ドキュメント・セットのインポート(外れ値なしのユースケース)」を参照してください。しかし、デフォルト・ケースのエラー・ログを確認すると、別のことがわかります。

例21-33 インポートからのエラー・ログの確認(useFlexFields = falseの場合)

デフォルト・ケース(「デフォルトの変換後のインポート」「インポートからのエラー・ログの確認(デフォルト・ケース)」を参照)と同様に、学生の二面性ビューへのインポートでは、値"Nineteen"のフィールドageについて型出現の外れ値に関するエラーがログに記録され、教師のビューに関するエラーは記録されません。

ただし、デフォルト・ケースとは異なり、インポートでは欠落しているNotesフィールドに関するエラーもログに記録されます。フィールドNotesはどの列にもマップされず、フレックス列がないため、このフィールドは二面性ビューではサポートされません。

ORA_ERR_NUMBER$
---------------
ORA_ERR_MESG$
-------------
ORA_ERR_TAG$
------------
42555

ORA-42555: Cannot insert into JSON Relational Duality View 'COURSE': The input JSON document is invalid.
JZN-00651: field 'Notes' is unknown or undefined

Import Error

コースの入力表から原因となるコースのドキュメントを選択します:

SELECT * FROM "JANUS".course_tab
  WHERE ROWID IN (SELECT ora_err_rowid$ FROM course_err_log);

DATA
----
{"courseId":"MATH101","name":"Algebra","creditHours":3,"students":[{"studentId":
1,"name":"Donald P."},{"studentId":5,"name":"Hye E."}],"teacher":{"teacherId":10
1,"name":"Abdul J."},"Notes":"Prerequisite for Advanced Algebra"}

次に、DBMS_JSON_DUALITY.validate_import_reportを使用して、正常にインポートされたドキュメントの問題についてレポートします。デフォルト・ケースおよび簡易レシピ・ケースとは異なり、useFlexFields = falseでの変換では、インポートされた学生およびコースのドキュメントに関する検証の問題があります。(インポートされた教師のドキュメントに関する検証の問題はありません。)

例21-34 VALIDATE_IMPORT_REPORT (useFlexFields = falseの場合)

インポートされた教師のドキュメントに関する検証の問題はありません。

インポートされた学生のデータでは、ageが文字列値を持つ問題のあるドキュメントがレポートされます。

SELECT * FROM DBMS_JSON_DUALITY.validate_import_report(
                                  table_name => 'STUDENT_TAB',
                                  view_name  => 'STUDENT');
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"}}
ERRORS
------
[{"op":"replace","path":"/age","value":null}]

PL/SQLファンクションvalidate_import_reportは、入力ドキュメントと二面性ビューにインポートされたドキュメントを比較しますが、コンバータによって追加された追加フィールド(_id_metadataora$map*、ora$*_flex)は無視します。JSONパッチの形式を使用して、問題のあるフィールドを識別し、入力データに対して実行できる編集操作を指定して問題(相違)を解決します。

  • フィールドpathは場所を指定します。値の構文は、SQL/JSONパス式の構文ではなくJSONポインタの構文です。この場合、path/ageは、ドキュメントの最上位レベルのageフィールドをターゲットとします。

  • フィールドopは、編集操作を指定します。問題のある学生のドキュメントの場合、この操作は、最上位フィールドageの値をJSON nullに置き換えます。(それが、望ましい解決策であるかどうかはわかりません。)

問題のある学生のドキュメントは、student二面性ビューにインポートできません。しかし、そのビューで依然として"サポート"されています。ビューに存在するのは、ビューcourseおよびteacherにインポートすると、そのドキュメントの基礎となる表student_rootに行(student_id = 9)が追加されるためです。

ただし、そのドキュメント内のフィールドageの値は値(JSON) nullになります。これは、列student_root.ageにマップされるフィールドが他の2つのドキュメント・セットにないので、その列の値がSQL NULLになるためです。また、そのNULL列値は、学生のドキュメント内のJSON nullにマップされます。

インポートされたコースのデータでは、フィールドNotesを含む問題のあるドキュメントがレポートされます。

SELECT * FROM DBMS_JSON_DUALITY.validate_import_report(
                                  table_name => 'COURSE_TAB',
                                  view_name  => 'COURSE');
DATA
----
{"courseId":"MATH101","name":"Algebra","creditHours":3,"students":[{"studentId": [{"op":"remove","path":"/Notes"},{"op":"remove","path":"/creditHours"}]
1,"name":"Donald P."},{"studentId":5,"name":"Hye E."}],"teacher":{"teacherId":10
1,"name":"Abdul J."},"Notes":"Prerequisite for Advanced Algebra"}
ERRORS
------
[{"op":"remove","path":"/Notes"},{"op":"remove","path":"/creditHours"}]

問題のあるコースのドキュメントは、course二面性ビューにインポートできません。

そのドキュメントでは、最上位フィールドNotesおよびcreditHours削除する2つのエラー操作がレポートされています。(これが、望ましい解決策であるかどうかはわかりません。)

問題のあるコースのドキュメントのインポートは、フィールドNotesが原因で失敗します。このフィールドは、出現の外れ値としてどの列にもマップされなかったためプルーニングされました。また、フレックス列がない(入力データがuseFlexFields = falseで変換された)ため、インポータはマップされていないフィールドとしてフレックス列に格納できません。

ただし、courseビューの基礎となる表course_rootは、その問題のあるドキュメントに対応する行(フィールドcourseIdの値がMATH101)を取得します。学生および教師のデータをインポートするため、つまりstudentおよびteacherのビューに移入するためです。これらのビューにインポートすると、表course_rootの列course_idおよびnameが移入され、これらの列は、学生および教師のドキュメントで使用されます。ただし、フィールドNotesまたはcreditHoursは移入されません

次の例「学生の二面性ビューのドキュメント・コレクション(useFlexFields = false)」および「コースの二面性ビューのドキュメント・コレクション(useFlexFields = false)」に、二面性ビューでサポートされる学生およびコースのドキュメント・コレクション(これらのビューへのインポートの結果)をそれぞれ示します。

教師の二面性ビュー・コレクションは、useFlexFields = trueでの変換と同じです。「デフォルトの変換後のインポート」の例「教師の二面性ビューのドキュメント・コレクション(useFlexFields = true)」を参照してください。

例21-35 学生の二面性ビューのドキュメント・コレクション(useFlexFields = false)

これを、学生の入力ドキュメント・セット(「学校経営の例(マイグレータの入力ドキュメント)」「学生のドキュメント・セット(マイグレータの入力)」)と比較します。このセット(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)がstudent二面性ビューへのインポートに失敗した(フィールドage文字列"Nineteen"があり、その10%の出現は型出現の外れ値であるため)にもかかわらず、そのドキュメントは二面性ビューに存在しています。ドキュメントをcourseおよびteacherの二面性ビューにインポートすると、列student_root.student_idの値として9を持つ行が表student_rootに追加されます。これは、値9を持つstudentIdが入力表course_tabteacher_tabの両方に存在するためです。

    ただし、Luis F.の学生のドキュメントのageフィールド値は(JSON) nullです("Nineteen"でも19でもありません)。コースまたは教師の入力ドキュメント・セットのいずれにもageフィールドが存在しないため、Luis F.の学生のデータをcourse およびteacherビューにインポートすると、SQL NULLが表student_rootage列に格納されます。また、そのNULL列値は、学生のドキュメント内のJSON nullにマップされます。

他に相違はありません。具体的には、混合型フィールドavgGradeは外れ値ではない(各型はドキュメントの15%超で出現する)ため、入力データから変更されていません。

{
  "_id" : 1,
  "_metadata" :
  {
    "etag" : "4F39C8B86F4295AD2958B18A77B0AACC",
    "asof" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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" : "00000000004DB839"
  },
  "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-36 コースの二面性ビューのドキュメント・コレクション(useFlexFields = false)

これを、コースの入力ドキュメント・セット(「学校経営の例(マイグレータの入力ドキュメント)」の例「コースのドキュメント・セット(マイグレータの入力)」)と比較します。このセット(minFieldFrequency = 25およびminTypeFrequency = 15を使用して変換)にある外れ値フィールドはNotes (出現の頻度20%) 1つのみです。

相違(フィールドの順序は関係ないので無視)は次の点のみです:

  • ドキュメント識別子フィールド_idおよびドキュメント状態フィールド_metadataが追加されました。(二面性ビューでサポートされているすべてのドキュメントに、これらのフィールドがあります。)

  • フィールドora$mapCourseIdおよびora$mapStudentIdが追加されました。これらは、基になるマッピング表mapping_table_course_root_to_student_rootの識別列(この場合は主キー列)に対応付けられています。これらの値はそれぞれ、フィールドcourseNumberおよびstudentIdの値と同じです。

  • ドキュメント(courseId = "MATH101")がcourse二面性ビューへのインポートに失敗した(フィールドNotesがドキュメントの20%でしか出現せず、出現の外れ値であるため)にもかかわらず、そのドキュメントは二面性ビューに存在しています。ただし、フィールドNotes (コンバータによってどの列にもマップされず、useFlexFieldsfalseであったため、値を格納するフレックス列がない)およびフィールドcreditHoursがありません。

    ドキュメントをstudentおよびteacher二面性ビューにインポートすると、列course_root.course_idの値として"MATH101"を持つ行が表course_rootに追加されるため、問題のあるドキュメントがビューでサポートされます。これは、値が"MATH101"の列course_idが入力表student_tabteacher_tabの両方に存在するためです。

    フィールドNotesがあるコースのドキュメントはインポートできなかったため、その入力ドキュメントのフィールドcreditHoursもビューでサポートされるドキュメントにありません。studentまたはteacherビューにどのドキュメントをインポートしても、フィールドcreditHoursはそのドキュメントに提供されません。列credit_hoursを含むのは、表course_tabのみです。

{
  "_id" : "CS101",
  "_metadata" :
  {
    "etag" : "7600B24570B58297702B95B8DE4F1B00",
    "asof" : "00000000004DB847"
  },
  "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" : "C3813410219036CF0E210FFCE3917FEB",
    "asof" : "00000000004DB847"
  },
  "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" : "5E24FBF3B13A297A89FE1D4C68C705BE",
    "asof" : "00000000004DB847"
  },
  "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
    }
  ],
  "courseId" : "MATH101"
}

{
  "_id" : "MATH102",
  "_metadata" :
  {
    "etag" : "4B55E2EF38E6DDAF6777251168DD07A5",
    "asof" : "00000000004DB847"
  },
  "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" : "C59E6274FE813279ECC28C73CA4AB121",
    "asof" : "00000000004DB847"
  },
  "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スキーマの作成は、useFlexFields = trueの場合と同じです。「デフォルトの変換後のインポート」の例「二面性ビューでサポートされるドキュメント・コレクションのJSONデータ・ガイドの作成」を参照してください。また、studentおよびteacherビューの結果のデータ・ガイドも、その場合と同じです。「デフォルトの変換後のインポート」「学生の二面性ビュー・データ・ガイド」および「教師の二面性ビュー・データ・ガイド」を参照してください。

ただし、courseビュー用に作成されたデータ・ガイドは同じではありません:

例21-37 コースの二面性ビュー・データ・ガイド(useFlexFields = falseの場合)

このデータ・ガイドJSONスキーマは、useFlexFieldsfalseである変換の場合について、二面性ビューcourseでサポートされているコースのドキュメント・コレクションをまとめたものです。これは、useFlexFieldstrueである変換の場合のデータ・ガイドと同じですが、Notesフィールドがない点が異なります

{
  "type" : "object",
  "o:frequency" : 100,
  "o:last_analyzed" : "2025-01-15T21:19:03",
  "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-15T21:19:03",
      "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-15T21:19:03",
      "o:sample_size" : 5,
      "required" : true,
      "maxLength" : 16,
      "minLength" : 7
    },
    "teacher" :
    {
      "type" : "object",
      "o:preferred_column_name" : "teacher",
      "o:frequency" : 100,
      "o:last_analyzed" : "2025-01-15T21:19:03",
      "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-15T21:19:03",
          "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-15T21:19:03",
          "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-15T21:19:03",
      "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-15T21:19:03",
      "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-15T21:19:03",
            "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-15T21:19:03",
            "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-15T21:19:03",
            "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-15T21:19:03",
            "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-15T21:19:03",
      "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-15T21:19:03",
          "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-15T21:19:03",
          "o:sample_size" : 5,
          "required" : true
        }
      }
    },
    "creditHours" :
    {
      "oneOf" :
      [
        {
          "type" : "number",
          "o:preferred_column_name" : "creditHours",
          "o:frequency" : 60,
          "o:low_value" : 3,
          "o:high_value" : 5,
          "o:num_nulls" : 0,
          "o:last_analyzed" : "2025-01-15T21:19:03",
          "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-15T21:19:03",
          "o:sample_size" : 5,
          "maxLength" : 1,
          "minLength" : 1
        }
      ]
    }
  }
}

これは欠落しているNotesエントリ(useFlexFields = trueの場合)です:

"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-15T21:11:48",
           "o:sample_size"           : 5,
           "maxLength"               : 33,
           "minLength"              : 33}

関連項目: