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オブジェクト」を参照してください。
関連項目:
-
コマンド
mongoexport
およびmongoimport
を使用した移行の詳細は、『MongoDBのためのOracle Database API』の「MongoDBからOracle Databaseへのアプリケーション・データの移行」を参照してください -
ドキュメント・データベース・ダンプ・ファイルからOracle Databaseにデータをロードするには、『Oracle Database JSON開発者ガイド』の「外部JSONデータのロード」を参照してください
親トピック: JSONから二面性への移行