📣新登場!TiDB Cloud BYOC、TiDB Cloud Filesystem、PostgreSQL-compatible TiDB Cloud Starter がパブリックプレビュー中。このページは自動翻訳されたものです。原文はこちらからご覧ください。

FLATTEN



ネストされた JSON または配列データを表形式に変換し、各要素またはフィールドを個別の行として表します。

構文

[LATERAL] FLATTEN ( INPUT => <expr> [, PATH => <expr>] [, OUTER => TRUE | FALSE] [, RECURSIVE => TRUE | FALSE] [, MODE => 'OBJECT' | 'ARRAY' | 'BOTH'] )

パラメータ

パラメータ説明デフォルト
INPUTフラット化する JSON または配列データ必須
PATHフラット化する配列/オブジェクトへのパスなし
OUTER結果が 0 件の行も含める(値は NULL)FALSE
RECURSIVEネストされた要素をフラット化するFALSE
MODEオブジェクト、配列、またはその両方をフラット化する'BOTH'
LATERAL先行するテーブル式との相互参照を有効にする任意

出力カラム

カラム説明
SEQ入力に対するシーケンス番号
KEY展開された値のキー(存在しない場合は NULL)
PATHフラット化された要素へのパス
INDEX配列インデックス(オブジェクトの場合は NULL)
VALUEフラット化された要素の値
THISフラット化対象の要素

Note: LATERAL を使用する場合、動的な相互参照により出力カラムが変わることがあります。

例

基本的なフラット化

-- Flatten a JSON object with nested structures SELECT * FROM FLATTEN( INPUT => PARSE_JSON( '{"name": "John", "languages": ["English", "Spanish"], "address": {"city": "New York"}}' ) );

最上位レベルのキーがフラット化される結果になります。

| seq | key | path | index | value | this | |-----|-----------|-----------|-------|----------------------|----------------------| | 1 | name | name | NULL | "John" | {original JSON} | | 1 | languages | languages | NULL | ["English","Spanish"]| {original JSON} | | 1 | address | address | NULL | {"city":"New York"} | {original JSON} |

PATH パラメータの使用

-- Flatten only the languages array by specifying the PATH SELECT * FROM FLATTEN( INPUT => PARSE_JSON( '{"name": "John", "languages": ["English", "Spanish"]}' ), PATH => 'languages' );

配列要素がフラット化される結果になります。

| seq | key | path | index | value | this | |-----|------|--------------|-------|-----------|-------------------| | 1 | NULL | languages[0] | 0 | "English" | ["English","Spanish"] | | 1 | NULL | languages[1] | 1 | "Spanish" | ["English","Spanish"] |

再帰的なフラット化

-- Recursively flatten nested objects and arrays SELECT * FROM FLATTEN( INPUT => PARSE_JSON( '{"name": "John", "address": {"city": "New York", "zip": 10001}}' ), RECURSIVE => TRUE );

ネストされたオブジェクトがフラット化される結果になります。

| seq | key | path | index | value | this | |-----|---------|--------------|-------|-------------|-----------------| | 1 | name | name | NULL | "John" | {original JSON} | | 1 | address | address | NULL | {"city":...}| {original JSON} | | 1 | city | address.city | NULL | "New York" | {"city":...} | | 1 | zip | address.zip | NULL | 10001 | {"city":...} |

LATERAL FLATTEN の使用

-- Use LATERAL FLATTEN to transform a JSON array into rows -- This allows direct access to array elements without a table SELECT f.value:item::STRING AS item_name, f.value:price::FLOAT AS price FROM LATERAL FLATTEN( INPUT => PARSE_JSON('[ {"item":"coffee", "price":2.50}, {"item":"donut", "price":1.20} ]') ) f;

結果:

| item_name | price | |-----------|-------| | coffee | 2.5 | | donut | 1.2 |

このページは役に立ちましたか?