iimon TECH BLOG

iimonエンジニアが得られた経験や知識を共有して世の中をイイモンにしていくためのブログです

Hive形式でyear/month/dayで切ったパーティションをAthenaでBETWEENを使って範囲検索する方法

s3://<バケット名>/year=<年>/month=<月>/day=<日> の様にHive形式でyear/month/dayでパーティションを切っているデータに対してAthenaで月を跨いだ日付の範囲検索が出来る様にしました。

元々はこの様な動的に生成するクエリを書いていました( {{ y.start }} には範囲の開始年 {{ y.end }} には範囲の終了年といった値が入ります)

SELECT *
FROM
    table_name
WHERE
    {{ y.start }} <= year AND
    year <= {{ y.end }} AND
    {{ m.start }} <= month AND
    month <= {{ m.end }} AND
    {{ d.start }} <= day AND
    day <= {{ d.end }};

2022-12-10から2023-01-30といった月を跨いだ時に

SELECT *
FROM
    table_name
WHERE
    2022 <= year AND
    year <= 2023 AND
    12 <= month AND
    month <= 1 AND
    10 <= day AND
    day <= 30;

の様になり常に条件がFALSEになってしまい適切なレコードが取得できなかったのですが、BETWEEN句をこの様に使うことで取得できる様になりました。