【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 |
以上になります。
お読み頂き、ありがとうございました。