Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

文字列から JSON データを抽出する

フォーカスモード
文字列から JSON データを抽出する - Amazon Athena

Athena のテーブルにデシリアライズしたくない、JSON でエンコードされた文字列が含まれるデータソースがある場合があります。このような場合でも、Presto の JSON 関数を使用し、このデータに対して SQL オペレーションを実行できます。

次の JSON 文字列をデータセット例として考えます。

{"name": "Susan Smith", "org": "engineering", "projects": [ {"name":"project1", "completed":false}, {"name":"project2", "completed":true} ] }

例: プロパティを抽出する

この JSON 文字列から name プロパティと projects プロパティを抽出するには、次の例に示すように、json_extract 関数を使用します。json_extract 関数は、JSON 文字列を含む列を対象にして、JSONPath (ドット . 表記を含む式など) を使用して JSON 文字列を検索します。

注記

JSONPath は、単純なツリー トラバーサルを行います。JSON ドキュメントのルートを示す $ 記号に続けて、ルートの直下にネストされたピリオドと要素を使用します (例: $.name)。

WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract(myblob, '$.name') AS name, json_extract(myblob, '$.projects') AS projects FROM dataset

返される値は JSON でエンコードされた文字列で、ネイティブ Athena データ型ではありません。

+-----------------------------------------------------------------------------------------------+ | name | projects | +-----------------------------------------------------------------------------------------------+ | "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] | +-----------------------------------------------------------------------------------------------+

JSON 文字列からスカラー値を抽出するには、json_extract_scalar(json, json_path) 関数を使用します。これは json_extract に似ていますが、JSON でエンコードされた文字列の代わりに varchar 文字列値を返します。json_path パラメータの値は、スカラー (ブール値、数値、または文字列) である必要があります。

注記

配列、マップ、または構造体に対して json_extract_scalar 関数は使用しないでください。

WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.name') AS name, json_extract_scalar(myblob, '$.projects') AS projects FROM dataset

このクエリは以下を返します。

+---------------------------+ | name | projects | +---------------------------+ | Susan Smith | | +---------------------------+

配列の例で projects プロパティの最初の要素を取得するには、json_array_get 関数を使用してインデックス位置を指定します。

WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_array_get(json_extract(myblob, '$.projects'), 0) AS item FROM dataset

JSON エンコード形式の配列で、指定したインデックス位置にある値が返されます。

+---------------------------------------+ | item | +---------------------------------------+ | {"name":"project1","completed":false} | +---------------------------------------+

Athena 文字列型を返すには、JSONPath 式内で [] 演算子を使用し、次に json_extract_scalar 関数を使用します。[] の詳細については、「配列要素にアクセスする」を参照してください。

WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name FROM dataset

次の結果が返されます。

+--------------+ | project_name | +--------------+ | project1 | +--------------+

このページの内容

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.