メインコンテンツまでスキップ
翻訳ページ

このページは AI の支援を受けて英語から翻訳されています。内容が異なる場合は英語版が正となります。

JSON_EACH

配列要素またはオブジェクトメンバーごとに 1 行を含むテーブルを返すテーブル値関数です。

関連項目:
[SELECT] [DESCRIBE] [JSON_EXTRACT] [JSON_ARRAY_LENGTH] [ データ型 ]


ヒント

DESCRIBE 関数を使用すると、json_each 関数で使用できる array データ型を確認できます。

注記

postgres SQL バックエンドで stackql を使用している場合、json_each 関数は json_array_elements_text 関数として実装されます。

構文​

SELECT <alias>.<projectedField>, ... , json_each.value
FROM <multipartIdentifier> <alias>, JSON_EACH(json_array_or_object, json_path);

引数​

json_array_or_object
JSON 配列またはオブジェクト。

json_path
json_array_or_object に含まれる配列またはオブジェクトへの JSON パス。jsonpath.com を参照してください。

json_path が json_array_or_object に存在しない場合、関数は NULL を返します。

いずれかの引数が整形式でない場合、json_type() 関数はエラーを発生させます。

戻り値​

配列要素またはオブジェクトメンバーごとに 1 行を含むテーブル。


例​

文字列の配列を関連フィールドと結合したテーブルに展開する​

前提として:

describe google.cloudresourcemanager.projects_iam_policies;

このクエリは次の結果を返します:

|-----------|--------|
| name | type |
|-----------|--------|
| condition | object |
|-----------|--------|
| members | array |
|-----------|--------|
| role | string |
|-----------|--------|

次の stackql クエリは、json_each 関数を使用して members 配列をテーブルに展開し、role フィールドと、必要に応じて condition フィールドと結合します。

select
iam.role,
SPLIT_PART(json_each.value, ':', 2) as member
from google.cloudresourcemanager.projects_iam_policies iam, json_each(members)
where projectsId = 'stackql';

次のような結果が返されます:

|--------------------------------------|-------------------------------------------------------|
| role | member |
|--------------------------------------|-------------------------------------------------------|
| roles/cloudbuild.builds.builder | 1234567890@cloudbuild.gserviceaccount.com |
|--------------------------------------|---------------------------------------------- --------|
| roles/editor | 1234567890-compute@developer.gserviceaccount.com |
|--------------------------------------|-------------------------------------------------------|
| roles/editor | 1234567890@cloudservices.gserviceaccount.com |
|--------------------------------------|-------------------------------------------------------|
| roles/editor | stackql@appspot.gserviceaccount.com |
|--------------------------------------|-------------------------------------------------------|
| ... | ... |
|--------------------------------------|-------------------------------------------------------|

詳細については、https://www.sqlite.org/json1.html#jeach を参照してください。