7 JSONデータのパーティション化

JSON仮想列をパーティション化キーとして使用して、表をパーティション化できます。仮想列は、SQL/JSONファンクションjson_valueを使用してJSON列から抽出されます。

可能な場合の非JSON列のパーティション化

JSON仮想列を使用して表をパーティション化できますが、非JSON列の使用が好ましいことが一般的です。パーティション化キーによって、新しい行を挿入するパーティションが指定されます。JSON仮想列として定義されたパーティション化キーは、SQL/JSONファンクションjson_valueを使用し、パーティション定義のjson_value式が行が挿入されるたびに実行されます。この方法は、特に、大きなJSON文書の挿入ではコストがかかる可能性があります。

JSON仮想列を使用した表のパーティション化ルール

  • パーティション化キーとして機能する仮想列は、SQL/JSONファンクションjson_valueを使用して定義する必要があります。

  • 仮想列のデータ型は、json_value式に対して使用されるRETURNING句によって定義されます。

  • 仮想列に対してデータを抽出するために使用されるjson_valueのパスには、述語を含めないようにする必要があります。(パスがストリーム可能である必要があります。)

  • 仮想列を定義する式が参照するJSON列にはis jsonチェック制約を含めることができますが、このような制約を含めることは必須ではありません

関連項目:

CREATE TABLEの詳細は、Oracle Database SQL言語リファレンスを参照してください。

例7-1 JSON仮想列を使用したパーティション表の作成

この例は、表j_purchaseorder_partitionedを作成します。これは、仮想列po_num_vcを使用してパーティション化されています。この仮想列はJSON列po_documentを参照します(CLOB記憶域を使用)。仮想列を定義するjson_value式は、JSONフィールドPONumberpo_documentから数値として抽出します。列po_documentには、is jsonチェック制約はありません

CREATE TABLE j_purchaseorder_partitioned
  (id VARCHAR2 (32) NOT NULL PRIMARY KEY,
   date_loaded TIMESTAMP (6) WITH TIME ZONE,
   po_document CLOB,
   po_num_vc NUMBER GENERATED ALWAYS AS
     (json_value (po_document, '$.PONumber' RETURNING NUMBER)))
  LOB (po_document) STORE AS (CACHE)
  PARTITION BY RANGE (po_num_vc)
   (PARTITION p1 VALUES LESS THAN (1000),
    PARTITION p2 VALUES LESS THAN (2000));