Google BigQuery – это мощное и масштабируемое облачное хранилище данных и аналитический инструмент. Работа с датами и временными метками является неотъемлемой частью анализа данных. Это руководство предоставит разработчикам исчерпывающую информацию о том, как эффективно работать с датами и временными метками в BigQuery, включая разбор, форматирование и использование в SQL-запросах. Мы рассмотрим основные типы данных, функции, продвинутые техники, и лучшие практики для оптимизации производительности и стоимости.
Основные типы данных даты и времени в BigQuery
Обзор типов данных: TIMESTAMP, DATE, DATETIME, TIME
BigQuery поддерживает несколько типов данных для представления даты и времени:
-
TIMESTAMP: Представляет момент времени, включая дату и время с точностью до микросекунд, а также часовой пояс.
-
DATE: Представляет календарную дату (год, месяц, день).
-
DATETIME: Представляет дату и время (год, месяц, день, час, минута, секунда).
-
TIME: Представляет время суток (час, минута, секунда, микросекунда).
Понимание различий между этими типами данных критически важно для правильной обработки и анализа временных данных. Например, TIMESTAMP подходит для записи событий, произошедших в определенный момент времени, а DATE – для анализа данных по дням.
Преобразование типов даты и времени: CAST и другие функции
Преобразование типов данных даты и времени необходимо для выполнения различных операций. CAST — основной инструмент для явного преобразования:
SELECT CAST('2023-10-26' AS DATE);
SELECT CAST('2023-10-26 10:00:00 UTC' AS TIMESTAMP);
Кроме CAST, BigQuery предоставляет функции для преобразования между типами данных:
-
DATE(timestamp): ПреобразуетTIMESTAMPвDATE. -
TIMESTAMP(date): ПреобразуетDATEвTIMESTAMP(время устанавливается в 00:00:00 UTC). -
DATETIME(timestamp): ПреобразуетTIMESTAMPвDATETIME. -
TIME(timestamp): ПреобразуетTIMESTAMPвTIME.
Извлечение компонентов даты и времени
Использование функции EXTRACT для получения года, месяца, дня и т.д.
Функция EXTRACT позволяет извлекать отдельные компоненты даты и времени, такие как год, месяц, день, час, минута, секунда и т.д.
SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-10-26 10:30:00 UTC') AS year;
SELECT EXTRACT(MONTH FROM DATE '2023-10-26') AS month;
SELECT EXTRACT(DAY FROM DATETIME '2023-10-26 10:30:00') AS day;
SELECT EXTRACT(HOUR FROM TIME '10:30:00') AS hour;
Примеры извлечения информации из TIMESTAMP, DATE, DATETIME и TIME
Функция EXTRACT работает со всеми типами данных даты и времени. Вот несколько примеров:
-
Извлечение дня недели из
TIMESTAMP:SELECT EXTRACT(DAYOFWEEK FROM TIMESTAMP '2023-10-26 10:30:00 UTC'); -- Возвращает 5 (четверг) -
Извлечение квартала из
DATE:SELECT EXTRACT(QUARTER FROM DATE '2023-10-26'); -- Возвращает 4 -
Извлечение минуты из
TIME:SELECT EXTRACT(MINUTE FROM TIME '10:30:00'); -- Возвращает 30
Форматирование и преобразование дат и временных меток в BigQuery
Форматирование TIMESTAMP в читаемый формат: FORMAT_TIMESTAMP
Функция FORMAT_TIMESTAMP позволяет преобразовывать TIMESTAMP в строку в заданном формате:
SELECT FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP '2023-10-26 10:30:00 UTC'); -- Возвращает '2023-10-26 10:30:00'
Форматные строки соответствуют стандарту strftime. Например:
-
%Y: Год (четыре цифры). -
%m: Месяц (01-12). -
%d: День месяца (01-31). -
%H: Час (00-23). -
%M: Минута (00-59). -
%S: Секунда (00-59).
Разбор даты и времени из строки: PARSE_TIMESTAMP
Функция PARSE_TIMESTAMP позволяет преобразовывать строку в TIMESTAMP с учетом заданного формата:
SELECT PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S', '2023-10-26 10:30:00'); -- Возвращает TIMESTAMP '2023-10-26 10:30:00 UTC'
Важно, чтобы формат строки соответствовал форматной строке, указанной в PARSE_TIMESTAMP. Если формат не совпадает, функция вернет NULL.
Продвинутые техники работы с датами и временем
Работа с часовыми поясами и UTC
BigQuery хранит TIMESTAMP в формате UTC. При работе с данными из разных часовых поясов необходимо учитывать преобразования часовых поясов.
-
TIMESTAMP_TO_STRING(timestamp, time_zone): ПреобразуетTIMESTAMPв строку с учетом заданного часового пояса. -
STRING_TO_TIMESTAMP(string, time_zone): Преобразует строку вTIMESTAMPс учетом заданного часового пояса.
Пример:
SELECT TIMESTAMP_TO_STRING(TIMESTAMP '2023-10-26 10:30:00 UTC', 'America/Los_Angeles'); -- Преобразует в тихоокеанское время
Рекомендуется хранить все TIMESTAMP в UTC и преобразовывать их в нужный часовой пояс только при отображении или анализе данных. Это упрощает обработку данных и исключает ошибки, связанные с разными часовыми поясами.
Использование дат и времени в SQL-запросах: фильтрация и группировка
Даты и временные метки часто используются в WHERE клаузах для фильтрации данных и в GROUP BY клаузах для агрегации данных по времени. Примеры:
-
Фильтрация данных за определенный период:
SELECT * FROM table WHERE date BETWEEN '2023-01-01' AND '2023-01-31'; -
Группировка данных по месяцам:
SELECT EXTRACT(MONTH FROM date), COUNT(*) FROM table GROUP BY 1;
Для оптимизации производительности запросов рекомендуется использовать секционирование и кластеризацию таблиц по дате. Это позволяет BigQuery обрабатывать только те разделы таблицы, которые соответствуют условиям запроса.
Заключение
В этом руководстве мы рассмотрели основные аспекты работы с датами и временными метками в Google BigQuery. Мы изучили типы данных, функции для преобразования и форматирования дат и времени, а также продвинутые техники работы с часовыми поясами и использования дат и времени в SQL-запросах. Правильное использование этих инструментов позволит разработчикам эффективно анализировать и обрабатывать временные данные в BigQuery.