Closed3
AWS Athena の WITH 句で複数レコードのテストデータでクエリ結果を確認する

AWS Athena の SQL の動作を素早く確認したい時に WITH 句を使ってテストデータとなるインプットを定義することで S3 にデータを置く必要もなく、テーブル定義する必要もありません。
SQL
WITH dataset AS (
SELECT '{"code": "code001", "value": 123}' AS jsonline
)
SELECT
json_extract_scalar(jsonline, '$.code') as code,
json_extract_scalar(jsonline, '$.value') as value,
json_extract_scalar(jsonline, '$.column') as column
FROM
dataset
結果
# code value column
1 code001 123
1レコードであれば AWS Athena のドキュメントにもある SQL を参考に利用できるのですが、複数レコードを扱い時があったのでそのメモ。

結論
UNION ALL で結合すればいいだけでした。
SQL
WITH dataset AS (
SELECT '{"code": "code001", "value": 123}' AS jsonline
union all
SELECT '{"code": "code002", "value": 456}' AS jsonline
union all
SELECT '{"code": "code003", "value": 789, "column": "3"}' AS jsonline
)
SELECT
json_extract_scalar(jsonline, '$.code') as code,
json_extract_scalar(jsonline, '$.value') as value,
json_extract_scalar(jsonline, '$.column') as column
FROM
dataset
結果
# code value column
1 code003 789 3
2 code001 123
3 code002 456

公式ドキュメントに別の方法が載ってた
WITH dataset AS (
SELECT * FROM (VALUES
(JSON '{"code": "code001", "value": 123}'),
(JSON '{"code": "code002", "value": 456}'),
(JSON '{"code": "code003", "value": 789, "column": "3"}')
) AS t (jsonline)
)
SELECT
json_extract_scalar(jsonline, '$.code') as code,
json_extract_scalar(jsonline, '$.value') as value,
json_extract_scalar(jsonline, '$.column') as column
FROM
dataset
結果
# code value column
1 code001 123
2 code002 456
3 code003 789 3
このスクラップは2022/03/09にクローズされました