Перейти к содержанию
Business MetricБизнес-Метрика
Назад в блог

Практика аналитики

Примеры работы с CAST функцией Google BigQuery

1 мин чтения

Функция CAST позволяет выполнять преобразование между различными типами данных в BigQuery Синтаксис выражения

CAST очень простой

CAST(<название столбца (выражение)> AS <тип данных>) Изначальным типом данных может быть: INT64, NUMERIC, BIGNUMERIC, FLOAT64, BOOL, STRING, BYTES, DATE, DATETIME, TIME, TIMESTAMP, ARRAY, STRUCT Нужно помнить о: не любые преобразования типов возможны результат функции

CAST для значения выражения, равного NULL, тоже будет NULL. Например,

В рамках БД BigQuery это запрос сделает из поля dat типа дата, поле типа строка (string)

Практические примеры c CAST BigQuery : DATE Преобразуем STRING ➜ DATE. Формат текста в поле STRING должен быть ГГГГ-ММ-ДД

В результате такого запроса будет ошибка

SQL
SELECT
  CAST ('2022-02-01' AS DATE) AS date,
  source,
  medium,
  conversions,
  revenue
FROM
  `united-strategy-279207.new_dataset.table_test_5`
SQL
SELECT
  CAST(date_0 AS DATE) AS date_0
FROM (
  SELECT
    '05.03.22' AS date_0 
  ) AS table_1
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

Формат даты в поле с типом стринг неправильный, но чтобы избежать подобных ошибок можно использовать safe_CAST

В таком случае результатом будет NULL, при большом количестве данных это может помочь не испортить большой запрос.

SQL
SELECT
  safe_CAST(date_0 AS DATE) AS date_0
FROM (
  SELECT
    '05.03.22' AS date_0 
  ) AS table_1
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

Например,

date_0 - неправильный формат date_1 - преобразование прошло успешно date_2 - неправильный формат new_format_date_1 - вариант записи даты

SQL
SELECT
  safe_CAST(date_0 AS DATE) AS date_0,
  safe_CAST(date_1 AS DATE) AS date_1,
  safe_CAST(date_2 AS DATE) AS date_2,
  FORMAT_DATE('%b %d,%Y', safe_CAST(date_1 AS DATE)) AS new_format_date_1
FROM
  (
    SELECT
      '05.03.22' AS date_0,
      '2022-05-07' AS date_1,
      '01-05-2022' AS date_2
  ) AS table_1
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

Аналогичные правила применяются для преобразования STRING ➜ DATETIME , TIMESTAMP и TIME При преобразовании STRING ➜ DATETIME строка должна быть в формате ГГГГ:ММ:ДД ЧЧ:ММ:СС. Возникает вопрос, как преобразовать поле с типом STRING ➜ DATE если формат не ГГГГ-ММ-ДД Используем PARSE_DATE

SQL
SELECT
  PARSE_DATE('%m.%d.%Y', '05.03.2020') as date_0
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

Или более сложный, но универсальный вариант Сначала извлекаем год, соединяем с "-", потом тоже самое с месяцем и днем.

Как написать такое регулярное выражение у нас есть отдельная статья.

SQL
SELECT
  CAST(CONCAT(REGEXP_EXTRACT(date_0, r'\/([0-9]{4})'), "-", 
  REGEXP_EXTRACT(date_0, r'([0-9]{1,2})\/'), "-", 
  REGEXP_EXTRACT(date_0, r'\/([0-9]{1,2})\/')) AS DATE) AS from_str_to_date
FROM (
  SELECT
    '10/07/2022' AS date_0 ) AS table_1
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

DATETIME При преобразовании STRING ➜ DATETIME строка должна быть в формате ГГГГ:ММ:ДД ЧЧ:ММ:СС

SQL
SELECT
  CAST('2022-07-07 10:02:01' AS DATETIME) AS datetime
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

TIMESTAMP При преобразовании STRING ➜ TIMESTAMP строка должна быть в формате ГГГГ:ММ:ДД ЧЧ:ММ:СС [отметка времени] (где отметка времени по умолчанию равна UTC, если она не указана).

SQL
SELECT
  CAST('2022-07-13 05:05:11-8:00' AS TIMESTAMP) AS timestamp
Иллюстрация: Примеры работы с CAST функцией Google BigQuery

Читайте также

Обсудить внедрение аналитики

Оставьте заявку — эксперт Business Metric свяжется с вами

+7

Нажимая на кнопку, вы соглашаетесь с политикой конфиденциальности и офертой на услуги.