12 外部JSONデータのロード
JSONデータのデータベース表を、JSONダンプ・ファイルの内容から作成できます。
このトピックでは、GitHub (https://github.com/oracle/db-sample-schemas/tree/master/order_entry
)から取得できるJSONダンプ・ファイルPurchaseOrders.dmp
のデータから、JSON文書の全表をロードする方法について説明します。
このファイルには、1行に1つずつJSONオブジェクトが含まれています。この形式には、Oracle NoSQL Databaseなどの一般的なNoSQLデータベースによって作成されるエクスポート形式との互換性があります。
このような外部表は直接問い合せることができます。または、パフォーマンスを向上させるために、異なる行を対象とする複数の問合せがある場合には、外部表のデータから標準のデータベース表をロードできます。
例12-1では、ファイルシステム・ディレクトリ$ORACLE_HOME/demo/schema/order_entry
に対応するデータベース・ディレクトリを作成しています。次に、例12-2では、このデータベース・ディレクトリを使用して外部表であるjson_dump_file_contents
を作成し、ダンプ・ファイルPurchaseOrders.dmp
のデータを入力しています。これは、すべてのJSON文書を列json_document
にコピーして、外部表にデータを一括で入力します。
次に、例12-4ではINSERT
をSELECT
文として使用して、外部表のJSON文書を、通常のデータベース表j_purchaseorder
のJSON列po_document
にコピーします。
外部表のJSON列json_document
にBLOB
記憶域を選択するため、通常の表の列po_document
も型BLOB
にする必要があります。例12-3では、BLOB
列po_document
を含めて表j_purchaseorder
を作成します。
注意:
データベース・ディレクトリを作成するためには、システム権限CREATE ANY DIRECTORY
が必要です。
関連項目:
-
外部表の概要は、Oracle Database概要を参照してください。
-
外部表の詳細は、Oracle DatabaseユーティリティおよびOracle Database管理者ガイドを参照してください。
-
CREATE TABLE
の詳細は、Oracle Database SQL言語リファレンスを参照してください。
例12-1 発注書向けのデータベース・ディレクトリ・オブジェクトの作成
次のfolder-containing-dump-file
を、GitHub (https://github.com/oracle/db-sample-schemas/tree/master/order_entry
)からダウンロードしたダンプ・ファイルを配置したフォルダに置き換える必要があります。(データベースがそのフォルダにアクセスできる必要があります。)
CREATE OR REPLACE DIRECTORY order_entry_dir
AS 'folder-containing-dump-file';
例12-2 外部表の作成およびJSONダンプ・ファイルからの入力
CREATE TABLE json_dump_file_contents (json_document BLOB)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY order_entry_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY 0x'0A'
FIELDS (json_document CHAR(5000)))
LOCATION (order_entry_dir:'PurchaseOrders.dmp'))
PARALLEL
REJECT LIMIT UNLIMITED;
例12-3 JSONデータ用のBLOB列を含む表の作成
表j_purchaseorder
には、主キーid
と、BLOB
データ型を使用して格納されているJSON列po_document
があります。この列に対して、LOBキャッシュ・オプションがオンになっています。
DROP TABLE j_purchaseorder;
CREATE TABLE j_purchaseorder
(id VARCHAR2 (32) NOT NULL PRIMARY KEY,
date_loaded TIMESTAMP (6) WITH TIME ZONE,
po_document BLOB
CONSTRAINT ensure_json CHECK (po_document is json))
LOB (po_document) STORE AS (CACHE);
例12-4 外部表からデータベース表へのJSONデータのコピー
INSERT INTO j_purchaseorder (id, date_loaded, po_document)
SELECT SYS_GUID(), SYSTIMESTAMP, json_document FROM json_dump_file_contents
WHERE json_document is json;
親トピック: JSONデータの挿入、更新およびロード