ETL — это процесс транспортировки данных, при котором информацию из разных мест преобразуют и кладут в новое место. ETL расшифровывается как extract, transform, load, то есть «извлечь, трансформировать, загрузить».
Обычно данные компании хранятся в разных местах:
● файлы на рабочих компьютерах;
● Google-таблицы;
● почта;
● облачный сервер;
● базы данных;
● копии баз данных, которые используют для отчётности;
● CRM (система взаимодействия с клиентами);
● внешние и внутренние API.
У каждого источника свой способ предоставления доступа к данным: к базам данных надо подключиться напрямую, к файлам надо получить ссылки, к API — токен авторизации. Часто эти способы недоступны для быстрого использования, поэтому сравнивать данные из разных источников сложно. Чтобы с данными было удобно работать, им надо придать единую структуру, убрать лишнее и положить в хранилище данных. Для этого и нужен ETL-процесс.
ETL-процессы используют аналитики и инженеры данных в IT-компаниях, которые сталкиваются с одной из двух проблем:
● Данных стало слишком много, поэтому аналитические запросы работают долго, а за хранение лишних данных приходится платить;
● Данные лежат в разных местах, поэтому аналитики не могут с ними работать.
В ходе преобразования в ETL-процессе часть данных может потеряться. Когда риск потерять данные слишком высок, используют ELT-процесс — он расшифровывается как extract, load, transform. Данные сначала перекладывают из нескольких мест в одно хранилище, а потом уже приводят в порядок.
ETL:
✅ В хранилище попадают структурированные данные, которые удобно анализировать;
❌ Есть риск потерять часть данных в процессе трансформации;
ELT:
✅ Данные не теряются. Из источников в хранилище попадает 100% информации;
❌ В хранилище попадают «грязные» данные, которые надо приводить в порядок;
❌ Дороже хранить большое количество необработанных данных.
Когда в компании появляется задача объединить множество данных в одном месте, используют оба процесса.
Хотя аббревиатура ETL содержит всего три этапа обработки данных, на практике процесс можно разделить на шесть шагов:
1. Подключение к источнику;
Первым делом нужно подключиться к системе, из которой будут выгружать данные. Это делают с помощью специальных приложений, например Apache Airflow. Для работы автоматизированных процессов нужно создать отдельную учётную запись с ограниченными правами. Такая учётная запись называется сервисной.
2. Выгрузка данных из источника;
Если источником выступает база данных, то для получения информации отправляют SQL-запрос — это набор команд для работы с табличными базами данных. Если данные надо получить из внешнего источника, например CRM, файлов или почты, то обращаются к API, который позволяет разным приложениям обмениваться данными между собой.
На этом этапе важно учитывать объём выгружаемых данных: если в системе, которая принимает данные, не хватит памяти, процессы будут работать с ошибками.
3. Первичная очистка данных;
Иногда данные надо очищать от тестовой информации или дублей. Инженер данных предусматривает возможные ошибки и прописывает правила в SQL-запросах.
4. Маппинг данных;
В компании могут использовать несколько разных источников, не связанных между собой. Чтобы данные из разных источников собрать в одной таблице, надо задать каждому свойству новое название — это и есть маппинг (от англ. mapping). Допустим, аналитик выгружает из базы идентификатор клиента, а из CRM — даты его заказов. Тогда в итоговом хранилище должны появиться колонки с названиями client_id и order_date.
Apache Airflow:
Одна из самых популярных систем для управления ETL-процессами. Запускает задачи:
Есть интерфейс работы с аудитом процессов и мониторингом решений. Позволяет запускать десятки и тысячи ETL-процессов одновременно: например, чтобы собирать статистику продаж по франшизным ресторанам из разных городов.
PySpark:
PySpark — фреймворк, с помощью которого строятся приложения для распределённой обработки данных. Его главная особенность в том, что Spark хранит и обрабатывает данные в оперативной памяти, а не в файловой системе. PySpark полезен для задач, когда необходимо производить быстрые вычисления над большим объёмом данных: например, обрабатывать сообщения в соцсети с аудиторией 25 миллионов пользователей.