Closed3

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

fujimotoshinjifujimotoshinji

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 を参考に利用できるのですが、複数レコードを扱い時があったのでそのメモ。

fujimotoshinjifujimotoshinji

結論

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	
fujimotoshinjifujimotoshinji

公式ドキュメントに別の方法が載ってた

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/searching-for-values.html

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にクローズされました