17.7 ORACLE_BIGDATA JSONドキュメント・ファイル・タイプへのアクセス

オブジェクト・ストレージまたはローカル・ディレクトリに格納されているドキュメントにネイティブJSONリーダー形式(jsondoc)を使用する方法をを参照してください。

17.7.1 JSONドキュメント・サポートの概要

ORACLE_BIGDATAアクセス・ドライバは、jsondocネイティブJSONリーダー形式をサポートしています。

jsondocに対するORACLE_BIGDATAアクセス・ドライバのサポートにより、オブジェクト・ストレージまたはローカル・ディレクトリに格納されているJSONドキュメントとシームレスに対話できます。JSONリーダーは、次のような様々な構造でJSONデータを解析および問合せするように設計されています。

  • 行区切りのJSONドキュメント
  • JSON配列(ネストされた配列のオプションのパス指定あり)
  • 特殊なデータ型に対する拡張JSON (EJSON)注釈を使用したJSONドキュメント

この新機能により、複雑なJSON構造を柔軟に処理でき、tpではOracle Databaseの強力なJSON機能を問合せと分析に活用できます。

17.7.2 JSONドキュメントのアクセス・パラメータ

Oracleでは、jsondocファイル形式を定義するORACLE_BIGDATAアクセス・パラメータがサポートされており、CREATE TABLE文のACCESS PARAMETERS句で使用されます。

表17-8 JSONドキュメントのアクセス・パラメータ

パラメータ 説明 必須

com.oracle.bigdata.fileformat

新しいJSON Reader機能をコールします

: jsondoc

あり

com.oracle.bigdata.json.ejson

拡張JSONを有効にするかどうかを指定します

有効な値: truefalse

デフォルト: true

オプション

com.oracle.bigdata.json.path

ORACLE_BIGDATAがドキュメントをロードできる場所を定義する有効なJSONパス式。

デフォルト: ドキュメント$のルートから読み取ります。

あり

17.7.3 JSONDOCの使用例

次の例は、jsondocファイル・タイプでORACLE_BIGDATAを使用してJSONドキュメントにアクセスする方法を示しています。

17.7.3.1 行区切りJSONドキュメントの問合せ

次に、複数行区切りのJSONドキュメントを含むJSONファイルと、このファイルを使用するSQL文の例を示します。

例17-26 行区切りJSONドキュメントの問合せ

ファイル: fruit.json

{"name": "apple", "count": 20} {"name": "orange", "count": 42} {"name": "pear", "count": 10}

SQL文:

CREATE TABLE fruit (data JSON)

ORGANIZATION EXTERNAL

(TYPE ORACLE_BIGDATA ACCESS PARAMETERS

( com.oracle.bigdata.fileformat = jsondoc

   com.oracle.bigdata.credential.name = 'OCI_CRED' )

LOCATION ('https://<objectstorage-location>/fruit.json'));



SELECT f.data."name", f.data."count" FROM fruit f;

name            count
------------------------------
"apple"         20
"orange"        42
"pear"          10

17.7.3.2 JSON配列の問合せ

次に、JSONオブジェクトの単一の配列を含むJSONファイルと、このファイルを使用するSQL文の例を示します。

例17-27 JSON配列の問合せ

ファイル: fruit-array.json

[
   {
      "name" : "apple",
      "count": 20
   },
   {
      "name" : "orange",
      "count": 42
   },
   {
      "name" : "pear",
      "count": 10
   }
]

SQL文:

CREATE TABLE fruit (data JSON) ORGANIZATION EXTERNAL (
  TYPE ORACLE_BIGDATA
  DEFAULT DIRECTORY default_dir
ACCESS PARAMETERS (
    com.oracle.bigdata.fileformat = jsondoc
    com.oracle.bigdata.json.path = $.[*]
    com.oracle.bigdata.credential.name = OCI_CRED
     )
  location ('https://<objectstorage-location>/fruit-array.json')
);
 
SQL> SELECT f.data."name", f.data."count"
     FROM fruit f;  
 
name            count
------------------------------
"apple"         20
"orange"        42
"pear"          10

17.7.3.3 オブジェクトのラップされたJSON配列

次に、外部JSONドキュメントにラップされたJSONドキュメントの例を示します。

例17-28 オブジェクトのラップされたJSON配列

この例を使用するには、ロードするデータへのパス(com.oracle.bigdata.json.pathを使用)を指定します。パスは配列につながる必要があります。行は前の例のようにマップされます。

ファイル: fruit-array.json

{
  "last_updated": 1434054678,
  "ttl": 0,
  "version": "1.0",
  "fruit": [
    {"name" : "apple", "count": 20 },
    {"name" : "orange", "count": 42 },
    {"name" : "pear", "count": 10 }
  ]
}

CREATE TABLE fruit (data JSON) ORGANIZATION EXTERNAL (
  TYPE ORACLE_BIGDATA
  DEFAULT DIRECTORY default_dir
  ACCESS PARAMETERS
  (
    com.oracle.bigdata.fileformat = jsondoc
    com.oracle.bigdata.json.path = $.fruit[*]
    com.oracle.bigdata.credential.name = OCI_CRED
     )
  location ('https://objectstorage-location/fruit-wrapped.json')
);
 
SELECT f.data."name", f.data."count"
     FROM fruit f;
 
name            count
------------------------------
"apple"        20
"orange"       42
"pear"         10

17.7.3.4 拡張JSON (EJSON)のサポート

SQL型JSONは、TIMESTAMPDOUBLEFLOATRAWなどの拡張JSON型を表すことができます。

例17-29 拡張JSON (EJSON)のサポート

.JSONテキストは、拡張JSON形式を使用して拡張JSON型を表すことができます。設定すると、これらのejson注釈は対応する型に自動的に変換されます。

ファイル: fruit-extended.json

{"name" : "apple", "count": 20, "modified":{"$date":"2020-06-29T11:53:05.439Z"} }
{"name" : "orange", "count": 42 }
{"name" : "pear", "count": 10 }

SQL文:

CREATE TABLE fruit (data JSON) ORGANIZATION EXTERNAL (
  TYPE ORACLE_BIGDATA
  DEFAULT DIRECTORY default_dir
  ACCESS PARAMETERS
  (
    com.oracle.bigdata.fileformat = jsondoc
    com.oracle.bigdata.credential.name = oci_adwc4pm
  )
   location ('https://objectstorage-location/fruit-extended.json')
);
 
SELECT f.data."count", f.data."modified"
     FROM fruit f
     WHERE f.data."name" = "apple";
 
count       modified
------------------------------
20          2020-06

17.7.3.5 複数行ファイルを含む単一JSONドキュメント

複数行ファイルを含む単一のJSONドキュメントを表にマップできます。この表では、ディレクトリ内の各JSONファイルが1行にマップされます。

例17-30 単一JSONドキュメント、複数行ファイル

複数行ファイルを含む単一のJSONドキュメントは、ディレクトリ内の各JSONファイル(ドキュメント)が表の1行にマップされるJSONファイルを含むディレクトリです。この場合、ディレクトリは/dataで、次のファイルがあります:

ファイル: data/apple.json

{
   "name" : "apple",
   "count": 42
}

ファイル: data/orange.json

{
   "name" : "orange",
   "count": 5
}

ファイル: data/pear.json

{
   "name" : "pear",
   "count": 12
}

SQL文:

CREATE TABLE fruit (data JSON) ORGANIZATION EXTERNAL (
  TYPE ORACLE_BIGDATA
  DEFAULT DIRECTORY default_dir
  ACCESS PARAMETERS
  (com.oracle.bigdata.fileformat = jsondoc)
  location ('data/*.json')
);
 
SQL> SELECT f.data."name", f.data."count"
     FROM fruit f;  
 
name            count
------------------------------
"apple"         20
"orange"        42
"pear"          10