例: TD_JSONSHRED共通値 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - JSONデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年9月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/gzn1554761068186.ditamap
dita:ditavalPath
ja-JP/gzn1554761068186.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

この例では、一度処理された共通値をシュレッドする方法を示します。

CREATE MULTISET TABLE jsonTable
(
    id      INTEGER,
    data    JSON
);

テーブルに、シュレッドするサンプルJSONデータを入力します。rowDataabを共通データ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)
    ;