Oracle Database 12cR2の新機能「JSONデータ・ガイド」について
*以下は、サポート契約締結中のお客様に毎月配信しているサポートレターより一部抜粋して掲載しています。
JSON データ・ガイドについて
Oracle Database では、12.1.0.2 より、JSON 形式のデータを、CLOB/BLOB/VARCHAR2のいずれかのデータ型に格納出来るようになりました。2017年3月にオンプレミス版がリリースされた 12cR2では、さらに JSON データ・ガイドと呼ばれる機能が追加され、格納されたJSONデータのメタ情報を解析する事で、JSONデータの値からViewや仮想列を作成する事が可能となっています。今回は、JSONデータ・ガイドを利用し、JSONデータをもとにしたViewを作成し、SQLでアクセスする方法をご紹介します。
JSON とは
JSONとはJavaScript Object Notationの略で、テキストベースのデータフォーマット(データを表すための記法)です。他のデータフォーマットとしては、XMLが良く知られていますが、JSON は構造がシンプルで、同じ情報(データ)量を記述しても、XMLよりファイルサイズが小さくなるといったメリットがあります。
また、多くのプログラミング言語間におけるデータの受け渡しに利用できるよう設計されており、昨今のクラウドサービスやWebサービスで利用されるデータフォーマットについてはJSON形式がデファクトスタンダードになりつつあります。
Oracle DatabaseにてJSONが扱える利点
仮に、データベース側で JSON データを格納できない場合、アプリケーション側でJSONデータの解析(パース)を行い、取り出した値をデータベースに格納するといった処理を実装する必要があります。
もちろん、そもそもJSONデータを扱わないシステムにおいては、Oracle DatabaeがJSON形式のデータを扱える事の有用性をすぐには評価し難いかもしれません。
しかし、IoTやFinTechといったここ数年のITトレンドから、エンタプライズシステムにおいても、他社クラウドサービスやWebサービスとのAPIを介したデータの連携が増えていくと予想されます。その際、アプリケーション側の改修を最小限に抑え、かつOracle Database側で従来のSQLによりJSON形式のデータを取り扱えることは、システムの拡張性といった面でも、大きなメリットになると言えます。
JSON データ・ガイドの利用(View 作成)
JSON データ・ガイド利用し、Oracle Database に格納したJSONデータをもとにViewを作成し、SQLでアクセスする手順を紹介します。なお、本手順の詳細については下記マニュアルもご参照いただければと思います。
-
Oracle Database JSON開発者ガイド 12cリリース2(12.2) E85247-01
- 19 JSONデータ・ガイド
https://docs.oracle.com/cd/E82638_01/ADJSN/json-dataguide.htm
1. JSON データを格納する表の作成
JSONデータを格納する表を作成します。CREATE TABLE実行時、JSONデータを格納する列にJSON形式のチェック制約を付与する必要があります。
CREATE TABLE json_tbl ( id NUMBER(4), doc CLOB CONSTRAINT json_chk CHECK(doc IS JSON));
2. JSON 検索索引を作成
JSON データ・ガイドの JSONデータに関するメタ情報は、JSON 検索索引の一部として永続的に保存が可能です。以下のように、FOR JSONキーワードを付与し、CREATE SEARCH INDEXを実行する事で、JSON検索索引が作成され、データ・ガイド(メタ情報)が、検索索引に保存されます。
CREATE SEARCH INDEX json_idx ON json_tbl (doc) FOR JSON;
3. サンプルデータの挿入
作成した表にデータを挿入します。今回は以下のような、JSONデータを含むサンプルデータを2行挿入しています。
INSERT INTO json_tbl VALUES (1, '{ "company":"A.intellilink", "location":{ "country":"JP", "city":"Tokyo"}, "value":{ "key_1":232522, "key_2":75829, "key_3":{ "key_31":4342, "key_32":3823}}, "comment":"Support Letter 1" }'); INSERT INTO json_tbl VALUES (2, '{ "company":"B.intellilink", "location":{ "country":"JP", "city":"Tokyo"}, "value":{ "key_1":132355, "key_2":564, "key_3":{ "key_31":3333, "key_32":9854}}, "comment":"Support Letter 2" }' );
4. JSONデータからViewの作成
JSONデータからViewの作成については、2つの方法があります。
- 1) DBMS_JSON パッケージのCREATE_VIEWプロシージャーを利用
- 2) DBMS_JSON パッケージのCREATE_VIEW_ON_PATH プロシージャーを利用
1) の場合は、データ・ガイドを編集し、特定のフィールドを抽出したViewの作成が可能です。2) の場合は、JSON検索索引に保存されたデータ・ガイドのメタ情報を利用してViewを作成します。以下では、CREATE_VIEW_ON_PATHプロシージャーを実行して、Viewを作成しています。
EXEC DBMS_JSON.CREATE_VIEW_ON_PATH('json_v', 'json_tbl','doc','$');
5. View へのアクセス
JSONデータのメタ情報が解析され、JSONデータの各フィールドが列となったViewが作成されます。下記のようにSQLによるデータのアクセスが可能です。
SQL> select * from json_v; ID DOC$key_1 DOC$key_2 DOC$key_31 DOC$key_32 DOC$comment DOC$company DOC$city DO --- ---------- ---------- ---------- ---------- ---------------- ---------------- -------- -- 1 232522 75829 4342 3823 Support Letter 1 A.intellilink Tokyo JP 2 132355 564 3333 9854 Support Letter 2 B.intellilink Tokyo JP
まとめ
今回は12cR2のJSONデータ・ガイドについて紹介しました。既存のシステムにおいて、すぐに実装を検討いただけるといったトピックではございませんが、次期システムの提案や設計の際に判断基準の一助となれば幸いです。
(オラクル事業部 グローバル・アライアンス&サポート・サービス担当 露木)