21.6 コンバータを使用する前に(1): データベース・ドキュメント・セットの作成

JSON-to-Dualityコンバータを使用する前に、元の外部ドキュメント・セットからJSON型のドキュメント・セットをOracle Databaseに作成する必要があります。各ドキュメント・セットのコンバータへの入力は、JSONデータ型の単一列を含むOracle Database表です。

JSONドキュメント・セットをドキュメント・データベースからエクスポートし、Oracleおよびドキュメント・データベースによって提供される様々なツールを使用して、JSON型の列にインポートできます。(MongoDBコマンドライン・ツールmongoexportおよびmongoimportは、これを行う1つの方法です。)

したがって、学生、教師およびコースの各ドキュメント・セットは、特定の種類のドキュメント(コースのドキュメントなど)のドキュメント・データベース・ダンプ・ファイルから、一時転送表(たとえば、コースのドキュメントの場合はcourse_tab)のJSON型の列dataにロードされているものとします。これを次の例に示します。

例21-4 JSONダンプ・ファイルからのOracleドキュメント・セット(コース)の作成

この例では、コースのドキュメント・セットcourse.jsonのJSONダンプ・ファイルから、Oracle Database外部表dataset_courseを作成します。次に、JSON型の列データを含む一時転送表course_tabを作成します。最後に、コースのドキュメントを一時転送表course_tabにインポートします。この表はJSONリレーショナル・コンバータへの入力として使用できます。

course_tab.data内のドキュメントは、「学校経営の例(マイグレータの入力ドキュメント)」の例「コースのドキュメント・セット(マイグレータの入力)」で示しているドキュメントです。

(同様に、学生および教師のドキュメント・セットはそれぞれ、ダンプ・ファイル student.jsonおよびteacher.jsonから作成された外部表dataset_studentおよびdataset_teacherから転送表student_tabおよびteacher_tabにロードされます。)

CREATE TABLE dataset_course (data JSON)
  ORGANIZATION EXTERNAL
    (TYPE ORACLE_BIGDATA
     ACCESS PARAMETERS (com.oracle.bigdata.fileformat = jsondoc)
     LOCATION (data_dir:'course.json'))
  PARALLEL
  REJECT LIMIT UNLIMITED;
CREATE TABLE course_tab AS SELECT * FROM dataset_course;
SELECT json_serialize(data PRETTY) FROM course_tab;
JSON_SERIALIZE(DATAPRETTY)
-----------------------------------
{
  "courseId" : "MATH101",
  "name" : "Algebra",
  "creditHours" : 3,
  "students" :
  [
    {
      "studentId" : 1,
      "name" : "Donald P."
    },
    {
      "studentId" : 5,
      "name" : "Hye E."
    }
  ],
  "teacher" :
  {
    "teacherId" : 101,
    "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."
  }
}

ノート:

Oracle Databaseでは、非標準型のスカラーJSON値を表すテキストのJSONオブジェクトの使用をサポートしています。たとえば、拡張オブジェクト{"$numberDecimal" : 31}は、非標準型10進数のJSONスカラー値を表し、そのように解釈されると、Oracleのネイティブ・バイナリJSON形式OSONの10進数に置き換えられます。

Oracle以外のデータベースの中には、このような拡張オブジェクトを使用するものもあります。このような外部拡張オブジェクトがOracleで認識される形式である場合、JSONデータがロードされる(取り込まれる)と、拡張オブジェクトは対応するOracleスカラーJSON値に置き換えられます。形式がOracleでサポートされていない場合、拡張オブジェクトはそのまま、つまりオブジェクトとして保持されます。

拡張オブジェクトのOracleサポートの詳細は、『Oracle Database JSON開発者ガイド』「拡張されたスカラー値を表すテキストのJSONオブジェクト」を参照してください。

関連項目: