15 外部JSONデータのロード

JSONデータのデータベース表は、テキストJSON文書を含むファイルシステム・ファイルから作成できます。

このトピックでは、GitHub (https://github.com/oracle/db-sample-schemas/tree/master/order_entry)から取得できる外部ファイルシステム・ファイルPurchaseOrders.jsonから、JSON文書を含む表を移入する方法について説明します。

このファイルには、1行に1つずつJSONオブジェクトが含まれています。この形式には、Oracle NoSQL Databaseなどの一般的なNoSQLデータベースによって作成されるエクスポート形式との互換性があります。

このような外部表は直接問い合せることができます。パフォーマンスを向上させるために、異なる行を対象とする複数の問合せがある場合には、外部表のデータから通常のデータベース表またはJSONコレクション表を移入できます。

例15-1では、GitHubからファイルPurchaseOrders.jsonをダウンロードしたファイルシステム・フォルダにアクセスできるデータベース・ディレクトリを作成します。

次に、例15-2では、このデータベース・ディレクトリを使用して外部表であるjson_file_contentsを作成し、PurchaseOrders.jsonのデータを入力しています。これは、すべてのJSON文書を列json_documentにコピーして、外部表にデータを一括で入力します。

例15-4では、JSON文書を外部表から、通常のデータベース表j_purchaseorderのJSON列dataにコピーします。

例15-5も同様ですが、かわりにJSONコレクションpurchaseordersに移入します。

外部表のJSON列json_documentJSON型記憶域を選択してあるため、通常の表の列dataもJSONデータ型にする必要があります。例15-3では、JSONdataを含む表j_purchaseorderを作成します。

関連項目:

例15-1 発注書向けのデータベース・ディレクトリ・オブジェクトの作成

次のfolder-containing-json-fileを、GitHub (https://github.com/oracle/db-sample-schemas/tree/master/order_entry)からダウンロードしたファイルを配置したフォルダに置き換える必要があります。(データベースがそのフォルダにアクセスできる必要があります。)

CREATE OR REPLACE DIRECTORY order_entry_dir
  AS 'folder-containing-json-file';

ノート:

データベース・ディレクトリを作成するためには、システム権限CREATE ANY DIRECTORYが必要です。

例15-2 外部表の作成およびテキストJSONデータのファイルシステム・ファイルからの入力

CREATE TABLE json_file_contents (data JSON)
  ORGANIZATION EXTERNAL
    (TYPE ORACLE_BIGDATA
     ACCESS PARAMETERS (com.oracle.bigdata.fileformat = jsondoc)
     LOCATION (order_entry_dir:'PurchaseOrders.json'))
  PARALLEL
  REJECT LIMIT UNLIMITED;

例15-3 JSONデータ用のJSON列を含む表の作成

j_purchaseorderには、主キーidと、JSON列data (JSONデータ型を使用して格納されている)があります。

DROP TABLE j_purchaseorder;

CREATE TABLE j_purchaseorder
  (id          VARCHAR2 (32) NOT NULL PRIMARY KEY,
   date_loaded TIMESTAMP (6) WITH TIME ZONE,
   data        JSON);

例15-4 外部表からデータベース表へのJSONデータのコピー

INSERT INTO j_purchaseorder (id, date_loaded, data)
  SELECT SYS_GUID(), SYSTIMESTAMP, data
    FROM json_file_contents;

例15-5 外部表からJSONコレクション表へのJSONデータのコピー

この例では、JSONコレクション表purchaseordersを作成し、外部表json_file_contentsのデータを移入します。

CREATE JSON COLLECTION TABLE purchaseorders;

INSERT INTO purchaseorders SELECT * FROM json_file_contents;