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フィールドPONumber
をpo_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));
親トピック: JSONデータの格納および管理