【BigQuery】GENERATE_DATE_ARRAYでカレンダーを作ってみる

日ごとの販売数を集計したい時など、カレンダーを使いたい時があります。
今回はBigQueryでGENERATE_DATE_ARRAYを使ってカレンダーを作成するテクニックをメモしておきます。

使う関数

GENERATE_DATE_ARRAY

GENERATE_DATE_ARRAYは開始日から終了日までの日付の配列を生成する関数です。
↓公式リファレンス↓
https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions#generate_date_array

GENERATE_DATE_ARRAY(start_date, end_date[, INTERVAL INT64_expr date_part])
  • start_date:開始日(from)
  • end_date:終了日(to)
  • INT64_expr:間隔の数字、省略すると1
  • date_part:間隔の単位、DAY/WEEK/MONTH/QUARTER/YEAR、省略するとDAY

UNNEST

UNNESTは配列を行に分解します。
↓公式リファレンス↓
https://cloud.google.com/bigquery/docs/arrays?hl=ja#flattening_arrays

毎日の日付テーブル

SELECT
  date 
FROM
  UNNEST(
    GENERATE_DATE_ARRAY(
      '2025-01-01',
      '2025-01-31',
      INTERVAL 1 DAY
    )
  ) AS date

結果
month_first_day
2025-01-01
2025-01-02
2025-01-03
2025-01-04
2025-01-05
2025-01-06
2025-01-07
2025-01-08
2025-01-09
2025-01-10
2025-01-11
2025-01-12
2025-01-13
2025-01-14
2025-01-15
2025-01-16
2025-01-17
2025-01-18
2025-01-19
2025-01-20
2025-01-21
2025-01-22
2025-01-23
2025-01-24
2025-01-25
2025-01-26
2025-01-27
2025-01-28
2025-01-29
2025-01-30
2025-01-31

ひと月ごとの日付テーブル

SELECT
  month_first_day 
FROM
  UNNEST(
    GENERATE_DATE_ARRAY(
      '2025-01-01',
      '2025-12-01',
      INTERVAL 1 MONTH
    )
  ) AS month_first_day

結果
month_first_day
2025-01-01
2025-02-01
2025-03-01
2025-04-01
2025-05-01
2025-06-01
2025-07-01
2025-08-01
2025-09-01
2025-10-01
2025-11-01
2025-12-01

以上になります。
お読み頂き、ありがとうございました。