Разберем вопрос создания календаря в Google BigQuery с помощью SQL
Для начала воспользуемся функцией GENERATE_DATE_ARRAY , которая генерирует массив дат. Нам необходим период в один день, поэтому мы используем следующий SQL код:
1 |
GENERATE_DATE_ARRAY('2014-01-01', '2016-01-01', INTERVAL 1 DAY) |
В качестве значения INTERVAL можно использовать один из вариантов DAY, WEEK, MONTH, QUARTER или YEAR.
Если хотите получить только первое число каждого месяца в BigQuery используйте значение MONTH:
1 |
GENERATE_DATE_ARRAY('2014-01-01', '2016-01-01', INTERVAL 1 month) |
Следующим шагом применим функцию UNNEST, чтобы массив превратить в отдельные строки таблицы:
1 |
UNNEST(GENERATE_DATE_ARRAY('2014-01-01', '2016-01-01', INTERVAL 1 DAY)) |
Теперь получим все данные сгенерированной таблицы:
1 2 3 4 |
SELECT * FROM UNNEST(GENERATE_DATE_ARRAY('2021-01-01', '2021-09-01', INTERVAL 1 DAY)) AS d |
Если вам нет необходимости получать дополнительные сведения по каждому из дней, то на этом создание календаря в BigQuery завершается, но можно и обогатить полученный список дат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SELECT FORMAT_DATE('%F', d) as id, d AS full_date, EXTRACT(YEAR FROM d) AS year, EXTRACT(WEEK FROM d) AS year_week, EXTRACT(DAY FROM d) AS year_day, EXTRACT(MONTH FROM d) AS month, FORMAT_DATE('%B', d) as month_name, FORMAT_DATE('%w', d) AS week_day, FORMAT_DATE('%A', d) AS day_name FROM ( SELECT * FROM UNNEST(GENERATE_DATE_ARRAY('2014-01-01', '2016-01-01', INTERVAL 1 DAY)) AS d ) |