Любой специалист по аналитике данных рано или поздно сталкивается с одной и той же ситуацией: данные есть, но типы полей в источнике вызывают лёгкое профессиональное раздражение. Дата хранится как строка, числа как текст, а иногда наоборот.
В результате простая задача вроде фильтрации по дате превращается в маленький квест.
Хорошая новость: в AW BI есть несколько способов привести типы данных в порядок. Причём сделать это можно на разных этапах: от уровня источника до уровня модели.
Разберём основные варианты на практическом примере.
В качестве источника данных будем использовать базу PostgreSQL AW_SampleDB. В таблице видно, что поля date_create и date_modify имеют тип varchar, хотя по смыслу это даты. Исправим эту небольшую архитектурную несправедливость.
В результате простая задача вроде фильтрации по дате превращается в маленький квест.
Хорошая новость: в AW BI есть несколько способов привести типы данных в порядок. Причём сделать это можно на разных этапах: от уровня источника до уровня модели.
Разберём основные варианты на практическом примере.
В качестве источника данных будем использовать базу PostgreSQL AW_SampleDB. В таблице видно, что поля date_create и date_modify имеют тип varchar, хотя по смыслу это даты. Исправим эту небольшую архитектурную несправедливость.
Преобразование через SQL-запрос к источнику
Самый прямолинейный и часто самый правильный способ: выполнить преобразование прямо в SQL-запросе к источнику данных.
Если поле date_create хранится как строка (VARCHAR), его можно привести к типу DATE с помощью стандартной функции TO_DATE.
Если поле date_create хранится как строка (VARCHAR), его можно привести к типу DATE с помощью стандартной функции TO_DATE.
Пример запроса:
SELECT
id,
state_region_code,
position_name,
TO_DATE(date_create, 'YYYY-MM-DD') AS date_create_date
FROM public.cv;Что здесь происходит:
Такой подход хорош тем, что преобразование происходит на стороне базы данных, а значит модель остаётся проще и чище.
Важно помнить: при написании запроса используется SQL-диалект подключённой базы данных.
- поле date_create преобразуется из строки в дату в формате YYYY-MM-DD;
- результат сразу получает корректный тип;
- в модель AW BI данные попадают уже в нужном формате.
Такой подход хорош тем, что преобразование происходит на стороне базы данных, а значит модель остаётся проще и чище.
Важно помнить: при написании запроса используется SQL-диалект подключённой базы данных.
Преобразование через ETL-блок в «Моделях»
Иногда менять SQL на уровне источника неудобно или невозможно. В этом случае можно выполнить преобразование внутри модели AW BI.
Для этого используется ETL-блок «SQL-блок».
Как это работает:
При выполнении такого блока используется Spark SQL, поэтому доступны все его функции.
Как это работает:
- В модели добавляем ETL-блок SQL;
- Перетаскиваем в него источник данных;
- Пишем SQL-запрос.
При выполнении такого блока используется Spark SQL, поэтому доступны все его функции.
Пример: если нужно преобразовать поле date_modify, представленное как строка (VARCHAR), в тип DATE, это можно сделать с помощью следующего SQL-блока в модели, попутно захватив нужные нам поля:
SELECT
id,
state_region_code,
position_name,
DATE(date_modify) AS date_modify
FROM child;
В результате строковое поле преобразуется в дату уже на этапе обработки модели.
Кстати, этот способ отлично работает не только с базами данных, но и с файловыми источниками.
Кстати, этот способ отлично работает не только с базами данных, но и с файловыми источниками.
Пример: у вас несколько одинаковых по структуре таблиц в документах, вы объединяете их блоком UNION и пишите к ним SQL-запрос, который преобразует сразу везде тип поля:
SELECT id, state_region_code, position_name, DATE(date_create) AS create_date
FROM junion
В итоге тип поля корректируется сразу для всех объединённых таблиц.
Изменение типа через параметры источника
Если источник данных — файл, есть ещё более простой вариант: изменить тип поля прямо на этапе загрузки.
В настройках источника можно использовать параметр «Тип», который позволяет задать нужный формат поля до того, как данные попадут в модель.
Например:
В настройках источника можно использовать параметр «Тип», который позволяет задать нужный формат поля до того, как данные попадут в модель.
Например:
- поле было распознано как числовое;
- мы меняем тип на строковый.
Это удобно, когда структура файла известна заранее и не требует дополнительной обработки.
Использование вычисляемого поля
Ещё один способ: создать вычисляемое поле в модели.
Фактически мы просто создаём новое поле с нужным преобразованием, используя функции Spark SQL.
Фактически мы просто создаём новое поле с нужным преобразованием, используя функции Spark SQL.
Пример для поля date_create:
DATE (date_create)
После этого:
DATE (date_create)
После этого:
- новое поле будет иметь корректный тип DATE;
- исходное поле можно скрыть;
- в модели и дашбордах будет использоваться уже правильный тип данных.
Этот подход часто применяют, когда нужно быстро исправить тип без изменения источника данных.
В AW BI изменить тип поля можно несколькими способами. Потому что в реальных проектах данные редко бывают идеальными.
В зависимости от задачи преобразование можно выполнить:
Проще говоря, если данные пришли «немного не в том виде» — это не проблема.
В зависимости от задачи преобразование можно выполнить:
- на уровне SQL-запроса к источнику;
- через ETL-блоки в модели;
- через параметры загрузки файлового источника;
- с помощью вычисляемого поля.
Проще говоря, если данные пришли «немного не в том виде» — это не проблема.
На практике данные редко приходят в идеальном виде, поэтому перед использованием в аналитике их почти всегда приходится приводить к корректной структуре и типам.