
Amazon Athena で Application Load Balancer (ALB) のアクセスログを検索するときにタイムスタンプ time のタイムゾーンは UTC になっている💡検索するときに JST に変換したい❗️と思う場面があって,最近クエリを作っていたため,今後すぐに再利用できるようにクエリサンプルをメモしておこうと思う \( 'ω')/
サンプル: SELECT
単純に time を JST で表示するなら parse_datetime 関数と AT TIME ZONE オペレータを組み合わせる👌
SELECT parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') AT TIME ZONE 'Asia/Tokyo' AS time, request_verb, request_url, elb_status_code FROM alb_logs WHERE day = '2023/09/01' LIMIT 100
記述量はほぼ同じだけど AT TIME ZONE オペレータではなく parse_datetime 関数と at_timezone 関数を組み合わせることもできる👌
SELECT at_timezone(parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z'), 'Asia/Tokyo') AS time, request_verb, request_url, elb_status_code FROM alb_logs WHERE day = '2023/09/01' LIMIT 100
サンプル: WHERE
time を JST で絞り込む場合は少し冗長だけど parse_datetime 関数と timestamp 型を組み合わせる👌
SELECT parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') AT TIME ZONE 'Asia/Tokyo' AS time, request_verb, request_url, elb_status_code FROM alb_logs WHERE day = '2023/09/01' AND parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') < timestamp '2023-09-01 01:00:00 Asia/Tokyo' LIMIT 100
もちろん BETWEEN を使って範囲検索もできる👌
SELECT parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') AT TIME ZONE 'Asia/Tokyo' AS time, request_verb, request_url, elb_status_code FROM alb_logs WHERE day = '2023/09/01' AND parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN timestamp '2023-09-01 10:00:00 Asia/Tokyo' AND timestamp '2023-09-01 10:59:59 Asia/Tokyo' LIMIT 100
関連ドキュメント
AT TIME ZONE オペレータで指定できるタイムゾーンの一覧は以下のドキュメントに載っている📝 また at_timezone 関数や with_timezone 関数など関連するサンプルも載っている〜
parse_datetime 関数のサンプルは以下のドキュメントに載っている📝