この例では、一度処理された共通値をシュレッドする方法を示します。
CREATE MULTISET TABLE jsonTable ( id INTEGER, data JSON );
テーブルに、シュレッドするサンプルJSONデータを入力します。rowDataでaとbを共通データglobalIdとして抽出します。
INSERT INTO jsonTable VALUES (1, '{ "globalId" : 1234, "rowData": [ { "a" : 1, "b" : "a" }, { "a" : 2, "b" : "b" }, { "a" : 3, "b" : "c" } ] }');
- メソッド1: 早めの抽出
このメソッドでは、ドット表記法(JsonExtractValue)とTD_JSONSHREDを組み合わせています。データは1回のみ処理されます。
SELECT globalId, a, b FROM TD_JSONSHRED (ON (SELECT id, CAST(data.globalId AS INTEGER), data FROM jsonTable) USING ROWEXPR('rowData') COLEXPR('a', 'b') RETURNTYPES ('INTEGER', 'VARCHAR(10)') ) d(id, globalId, a, b) ;
出力:
globalId a b ----------- ----------- ---------- 1234 1 a 1234 2 b 1234 3 c
- メソッド2: 後での抽出
この方法は、同じデータの繰り返し処理が必要になり、パフォーマンスの問題の原因になるので、避ける必要があります。
SELECT CAST(data.globalId AS INTEGER) as globalId, a, b FROM TD_JSONSHRED (ON (SELECT id, data as d, data FROM jsonTable) USING ROWEXPR('rowData') COLEXPR('a', 'b') RETURNTYPES ('INTEGER', 'VARCHAR(10)') ) d(id, data, a, b) ;