Что это
Подход к извлечению данных из источника, преобразованию по правилам и загрузке в целевую систему.
Процесс извлечения данных из источников, трансформации и загрузки в хранилище
ETL — навык, вокруг которого строится профессия инженера данных, с одной из самых высоких медиан на рынке. В объявлениях рядом почти всегда стоят SQL и Python: без этой пары в пайплайны не заходят. Спрос стабильно растёт.
Подход к извлечению данных из источника, преобразованию по правилам и загрузке в целевую систему.
В инженерии данных, BI, аналитике, отчётности, хранилищах, витринах, интеграциях и регулярных корпоративных загрузках.
Помогает превратить разрозненные сырые данные в проверяемую таблицу или витрину, которой можно пользоваться регулярно.
ETL (Extract, Transform, Load) — процесс, который переносит данные из рабочих систем в аналитическое хранилище за три шага: извлечь из источников, привести к единому виду, загрузить туда, где удобно считать. Источниками служат базы приложений, API, файлы и учётные системы вроде 1С; приёмником — DWH на PostgreSQL, ClickHouse или Greenplum. Без ETL каждая система хранит свою версию правды, и отчёты из разных отделов не сходятся. Пайплайн решает это: данные чистятся от дублей и ошибок, приводятся к общей модели и обновляются по расписанию — аналитик открывает дашборд и видит согласованные цифры, а не сырьё из десяти баз.
Он проектирует целевую таблицу, пишет правила преобразования, ставит проверки и разбирает сбои. Ещё он фиксирует, почему правило изменилось.
ETL важен там, где от потока данных зависят витрина, отчёт или модель, которую читают регулярно. На нём видно, умеет ли человек держать цифру под контролем.
ETL — это не три буквы в вакууме. Это путь данных от источника до слоя, которому можно доверять в отчёте или витрине.
Источник
Понять владельца, ключи и частоту обновления.
Извлечение
Забрать нужный период без потерь и дублей.
Преобразование
Очистить данные, привести типы, связать справочники.
Проверка
Сверить строки, ключи, суммы и диапазоны дат.
Загрузка
Записать результат в витрину или таблицу отчёта.
Сопровождение
Оставить журнал, статус и правило пересчёта.
ETL переносится между ролями: Инженер данных, Аналитик данных, BI-аналитик. В одном треке этот навык может быть основным рабочим инструментом, а в другом - сильным прикладным усилителем основной специализации.
Инженер данных — самый заметный профиль в распределении ролей по навыку.
Ещё 7 ролей используют ETL
Текущий срез показывает активные вакансии сейчас. Распределение по ролям рассчитано по расширенной исторической выборке, поэтому значения могут быть выше текущего количества активных вакансий.
ETL ценен не абстрактным знанием инструмента, а повторяющимися рабочими задачами — ниже они разобраны так, как встречаются в реальной работе.
Собрать загрузку
Довести источник до витрины или отчёта.
Проверить качество
Найти дубли, пропуски и сломанные ключи.
Изменить правило
Переделать трансформацию без потери устойчивости.
Разобрать сбой
Понять, на каком шаге поток упал.
Сделать rerun
Перезапустить процесс без ручной чистки.
Поддерживать поток
Следить за расписанием и качеством результата.
Главная ценность живёт в правилах и проверках.
Без проверок витрина быстро врёт.
Без безопасного повтора процесс ломает доверие.
Теория слабо помогает без живой загрузки.
ETL востребован там, где компания уже устала от ручных выгрузок и спорных цифр. Источников много, правила разные, а отчёты должны сходиться. Пока нет нормального потока, каждый отдел начинает чистить данные по-своему, а одно исправление легко ломает несколько витрин. И бизнес перестаёт спорить о базовых цифрах между отделами каждую неделю. Поэтому ценят не аббревиатуру, а человека, который собирает устойчивый процесс. Он понимает источник, ставит проверки, безопасно пересчитывает период после сбоя и объясняет, почему новой цифре можно доверять. Такой навык нужен инженерам данных, BI-командам и тем, кто отвечает за доверие к витрине.
ETL нужен там, где важно быстро проверить гипотезу, сверить метрику или подготовить данные для следующего шага.
Такой навык редко живёт в одной профессии: он остаётся полезным в аналитике, продукте, разработке и соседних data-сценариях.
Инструменты вокруг меняются, но сама задача не исчезает, поэтому ETL продолжает удерживать прикладной спрос.
ETL формирует устойчивый спрос внутри своего рабочего сегмента.
ETL сохраняет устойчивый прикладной спрос на рынке: 425 активных вакансий, #35 по рынку, 6.1% IT-вакансий. Ниже показано число открытых вакансий на конец каждого месяца: это исторический ряд по состоянию на конец месяца, а не текущий срез рынка на сегодня.
#35 по рынку • 6.1% IT-вакансий
-38 вакансий и -7% к предыдущему месяцу.
Зарплату в ETL-вакансиях определяют роль и грейд, а не сам навык, но медиана здесь — одна из высоких на рынке. Связка ETL + Airflow добавляет к офферу. Junior-входов мало, рынок ждёт опыт. Актуальные цифры — в рыночном блоке этой страницы.
71 вакансий с зарплатой в расширенной зарплатной выборке
Основной зарплатный ориентир по Senior-вакансиям
Senior - основной уровень рынка (55%)
ETL редко живёт изолированно: чаще всего рынок видит его рядом с SQL, Python, Airflow. Самая плотная связка сейчас - SQL: оба навыка встречаются вместе в 88% вакансий.
Главная связка: SQL • 88% вакансий. Показываем общерыночные связки ETL: не junior-минимум из блока выше, а навыки, которые чаще всего встречаются рядом с ним в одной вакансии.
навыки, которые рынок чаще всего видит рядом в одной вакансии
не базовый минимум, а более сильные комбинации стека
Сейчас на рынке 26 активных junior-вакансий с ETL. Это 7.5% всех вакансий по навыку, поэтому для старта важнее всего смотреть на реальный объём junior-окна и на стек, который рынок ждёт рядом.
7.5% всех вакансий по навыку • Senior / Junior 7.4x
Окно входа узкое: рынок чаще нанимает с опытом.
Медианная вакансия с ETL ожидает около 13 навыков в стеке. Это собранный стартовый набор: рынок обычно ищет не один изолированный инструмент, а рабочую комбинацию соседних навыков.
навыки из junior-вакансий, где встречается ETL
Выбор зависит от объёма данных, места хранения, частоты обновления, сложности преобразований, требований к качеству и того, кто будет сопровождать цепочку после запуска.
Подход к извлечению, преобразованию и загрузке данных в целевую систему.
Нужен, когда сырые данные нужно привести к рабочей структуре до использования в отчёте, витрине или модели.
Не равен конкретному инструменту; ETL можно реализовать через SQL, Python, специальные платформы или их сочетание.
Подход, где данные сначала загружают в хранилище, а затем преобразуют внутри него.
Уместен, если хранилище хорошо справляется с объёмом, а команда хочет держать преобразования ближе к аналитическому слою.
Требует дисциплины в моделях, правах доступа и стоимости вычислений.
Оркестратор, который запускает шаги по расписанию, учитывает зависимости и повторные попытки.
Нужен, когда цепочек много, есть зависимости, регулярные запуски и требуется прозрачность выполнения.
Не должен становиться местом для всей бизнес-логики преобразований.
Инструмент для SQL-моделей, проверок, документации и преобразований внутри аналитического хранилища.
Подходит командам, где основная логика преобразований живёт в SQL и важны тесты моделей.
Не закрывает все виды извлечения из внешних источников и не заменяет управление запуском сложных цепочек.
Система распределённой обработки для больших объёмов данных.
Нужна, когда объём и сложность вычислений выходят за пределы обычной базы или одного процесса.
Избыточна для небольших таблиц и простых регулярных загрузок.
ETL нужен там, где данные приходят из нескольких систем и должны регулярно становиться общим слоем для отчётов, витрин, сверок и моделей без ручной чистки для команды.
Единый слой для BI и регулярных метрик.
Загрузки по расписанию с проверками и историей.
Поиск дублей, пропусков и сломанных ключей.
ETL заметен в 3 направлениях рынка с долей выше 5%.
Рабочий ETL включает источник, преобразование, проверки качества, безопасный повторный запуск и понятное расписание. Уже потом вокруг него появляются SQL, Python, Airflow и другие инструменты.
Понять схему, ключи и ограничения источника.
Очистить, объединить и привести данные к цели.
Поймать дубли, пропуски и неверные даты.
Перезапустить поток без двойной загрузки.
Видеть шаг падения и объём обработки.
Понимать, как поле посчитано и кем принято.
ETL описывает порядок подготовки данных. Рядом с ним стоят ELT, Airflow, dbt и обычные SQL-скрипты, но роль у них разная.
Сначала преобразует, потом загружает.
Сначала загружает, потом считает в хранилище.
Управляет запуском и зависимостями.
Помогает строить SQL-модели в warehouse.
Перед запуском проверяют источник, ключи, типы, объём строк и дату обновления. После загрузки сверяют дубли, пустые поля и контрольные суммы. Повторный запуск за тот же период не должен менять прошлые данные без объяснения. Для этого нужен сырой слой, журнал загрузки и понятное правило backfill. Если у поля или статуса нет владельца, ETL-команда начинает гадать смысл данных. Это почти всегда заканчивается спором о цифрах.
Проверить уникальность и смысл идентификатора.
Убедиться, что даты, суммы и статусы читаются верно.
Сверить объём строк и период загрузки.
Поймать повтор до витрины и отчёта.
Понять, как пересчитывается история.
Знать, кто отвечает за поле и правило.
Перспективы ETL завязаны не только на текущем спросе, но и на том, как навык встраивается в новые платформы, инструменты и рабочие контуры.
Данные всё равно нужно готовить и грузить.
Сильнее ценится доверие к результату.
Инструменты ускорят рутину, но не мышление.
Ежедневный сбор вакансий из открытого API, очистка и нормализация в pandas, инкрементальная загрузка в PostgreSQL под оркестрацией Airflow, поверх — дашборд с динамикой зарплат. Показывает полный цикл ETL от источника...
Сырые события грузятся в ClickHouse как есть, dbt строит слои staging → core → витрины, тесты dbt проверяют уникальность ключей и свежесть. Демонстрирует ELT-подход и работу с качеством данных.
Debezium читает журнал транзакций PostgreSQL, изменения летят через Kafka в аналитическую базу с задержкой в секунды. Сравнение с batch-загрузкой по свежести и стоимости — сильная тема для собеседования.
Пайплайн с перезаписью партиций, ретраями и алертами в Telegram: падение шага или провал data quality теста останавливает загрузку и шлёт уведомление. Отвечает на главный продовый вопрос — что случится при повторном...
Учить ETL лучше на одном полном маршруте. Возьмите источник заказов, очистите даты и статусы, уберите дубли, загрузите итог в целевую таблицу и сразу добавьте проверки по числу строк, ключам и суммам. Потом повторите тот же запуск ещё раз и убедитесь, что он не создаёт дублей. После этого полезно специально сломать часть потока: отдать неполный файл, изменить статус или пересчитать старый день. Так быстрее видно, где нужен журнал, кто владелец ошибки и какое правило надо менять. И сразу фиксируйте в журнале, где лежит сырой слой и кто отвечает за правило. Это сэкономит время при первом сбое.
Соответствие — доля тем навыка, которые охватывает программа курса
Начать лучше с маленького, но полного сценария: CSV или таблица заказов, простая витрина и несколько проверок после загрузки. Сначала приведите типы, уберите дубли и выберите ключ. Потом загрузите результат второй раз и посмотрите, меняется ли итог. Если процесс нельзя безопасно повторить, это ещё не рабочий ETL. В конце сверьте строки и суммы с источником, посмотрите журнал и заранее зафиксируйте, кто разбирает сбой. Ещё полезно специально испортить один файл и проверить, как процесс это покажет. Так видно, готов ли поток к реальному сбою.
CSV, таблицу заказов или простой API.
Решить, какие поля и ключ нужны витрине.
Привести типы, убрать дубли, посчитать нужные поля.
Сверить строки, даты и контрольные суммы.
Запустить поток ещё раз без двойных записей.
ETL — это способ взять данные из источника, привести их к нужным правилам и загрузить в таблицу, которой потом пользуются отчёты или витрины. Такой процесс нужен там, где сырые данные сами по себе ещё не готовы для работы.
Он даёт один повторяемый маршрут для данных из разных систем. Благодаря этому отчёты меньше спорят друг с другом, а аналитика не зависит от ручной чистки перед каждой новой выгрузкой. А когда данные разошлись, команда быстрее находит причину: маршрут один, и видно, где он сломался.
В ETL значимая часть преобразований идёт до загрузки в целевую систему. В ELT данные сначала кладут в хранилище и считают уже там. Выбор зависит от типа нагрузки, роли хранилища и стоимости вычислений. Поэтому в реальном стеке обе схемы могут жить рядом.
Источники падают, присылают исправления и меняют прошлые периоды. Если поток нельзя повторить без дублей и ручной чистки, ему быстро перестают доверять. Поэтому безопасный rerun — часть зрелого ETL, а не приятный бонус. Иначе каждая авария заканчивается ручным ремонтом витрины.
Нужны понятный источник, целевая схема, преобразования, проверки качества, журнал ошибок и правило пересчёта истории. Если хотя бы один слой выпадает, поток начинает жить только в идеальном сценарии и плохо переживает реальный сбой. Поэтому сильный ETL всегда думает о следующем инциденте заранее.
Лучше взять один небольшой источник и провести его до целевой таблицы целиком. На таком примере быстрее видно, как работают ключи, дубли, проверки, инкрементальная загрузка и повторный запуск. После этого уже проще разбирать журналы и историю пересчёта.
При полной загрузке пайплайн каждый раз перечитывает источник целиком и перезаписывает таблицу — просто, но дорого на больших объёмах. Инкрементальная забирает только новые или изменённые строки: по полю updated_at, по автоинкрементному id или через CDC. На практике полную загрузку оставляют для маленьких справочников, а факты грузят инкрементально.
CDC — способ ловить изменения в источнике не запросами по расписанию, а чтением журнала транзакций базы: INSERT, UPDATE и DELETE прилетают почти в реальном времени. Так работает Debezium поверх PostgreSQL или MySQL. CDC берут, когда бизнесу нужны свежие данные быстрее, чем раз в час, или когда источник нельзя нагружать тяжёлыми SELECT.
Batch обрабатывает данные пачками по расписанию — раз в час, раз в ночь. Streaming (Kafka, Flink, Spark Structured Streaming) тянет события непрерывно, с задержкой в секунды. Для отчётности и витрин почти всегда хватает batch: он дешевле и проще в отладке. Streaming нужен антифроду, рекомендациям и мониторингу — там, где решение принимают по свежим событиям.
Минимальный набор: строки не потерялись (сверка count источника и приёмника), ключи уникальны, обязательные поля не пустые, значения в допустимых диапазонах, свежесть данных не старше SLA. Проверки вешают после каждого шага: упавший тест останавливает пайплайн раньше, чем битые цифры доедут до дашборда. Инструменты — dbt tests, Great Expectations, Soda.
SCD — приёмы хранения справочников, которые меняются со временем: клиент переехал, товар сменил категорию. SCD1 просто перезаписывает старое значение, SCD2 заводит новую версию строки с датами действия — так сохраняется история, и отчёт за прошлый год считается по тогдашним атрибутам. На собеседованиях по DWH про SCD2 спрашивают почти всегда.
Staging — буфер, куда сырые данные падают как есть, без трансформаций. Он развязывает извлечение и обработку: если трансформация упала, не нужно заново дёргать источник — всё уже лежит в staging. Плюс это точка для сверки с источником и для перезапуска пайплайна с середины, а не с нуля.
Airflow описывает пайплайн как DAG на Python: какие шаги, в каком порядке, что делать при падении. Он запускает задачи по расписанию, ретраит упавшие, показывает историю запусков и шлёт алерты. В московском IT-срезе Airflow — один из самых частых соседей ETL в вакансиях, и связка с ним усиливает оффер.
Ядро стека: Airflow для оркестрации, dbt для трансформаций в хранилище, Spark для тяжёлых объёмов. В enterprise живут SSIS (мир Microsoft) и NiFi (потоковая маршрутизация данных). Плюс коннекторы вроде Airbyte для извлечения. Учить всё сразу не нужно: SQL + Python + Airflow закрывают большинство требований вакансий.
dbt делает только букву T: он трансформирует данные, которые уже лежат в хранилище, через SQL-модели. Извлечение и загрузку он не берёт — их закрывают Airbyte, Fivetran или самописные скрипты. Поэтому dbt — инструмент ELT-подхода: сначала данные загружают как есть, потом dbt строит из них чистые слои и витрины.
Pandas обрабатывает данные в памяти одной машины — до нескольких гигабайт это самый быстрый путь: меньше кода, проще отладка. Spark распределяет работу по кластеру и нужен, когда данные в память не влезают — десятки гигабайт и дальше. Практичное правило: начинайте с pandas или Polars, на Spark переходите по факту роста объёмов, а не заранее.
Дата-инженер строит и сопровождает пайплайны — для него ETL основная работа. Аналитику ETL нужен на уровне понимания: откуда пришли данные, где они могли испортиться, почему цифры в витрине разошлись с источником. В московском IT-срезе ETL чаще всего встречается в вакансиях инженеров данных, реже — у аналитиков данных и BI-аналитиков.
DWH — общее хранилище со всеми данными компании, витрина (data mart) — его срез под конкретную команду или задачу: продажи, маркетинг, финансы. В витрине данные уже агрегированы и названы бизнес-терминами, поэтому дашборды поверх неё работают быстро и не требуют джойнов по десяти таблицам. ETL-пайплайн обычно заканчивается именно витриной.
Идемпотентный пайплайн можно запустить повторно на тех же данных — и результат не задвоится. Достигается перезаписью партиций за период, MERGE по ключу или очисткой целевого диапазона перед вставкой. Без этого каждый ретрай после сбоя плодит дубли, и цифры в отчётах едут. Это один из первых вопросов на собеседовании по ETL.
Три уровня. Технический: задача завершилась, время работы в норме — это даёт Airflow с алертами в Slack или Telegram. Данные: свежесть таблиц, объёмы, доля пустых значений — data quality тесты. Бизнес: выручка в витрине не упала в ноль за ночь. Хороший пайплайн падает громко и сразу, а не молча грузит мусор неделями.
Юнит-тесты покрывают функции трансформаций на синтетических данных: подали кривую строку — получили ожидаемый результат. Тесты данных (dbt tests, Great Expectations) проверяют сами таблицы: уникальность, ссылочную целостность, свежесть. Перед релизом гоняют пайплайн на копии прода и сверяют витрины до и после. Тестов на данные обычно нужно больше, чем на код.
Зарплату определяют роль и грейд, но медиана в вакансиях с ETL — одна из самых высоких на рынке. Связка с Airflow прибавляет к офферу. Junior-позиций мало, рынок ждёт людей с опытом, зато спрос стабильно растёт. Актуальные цифры — в рыночном блоке этой страницы.
В крупных компаниях половина источников — учётные системы: 1С, SAP, самописные CRM. Данные оттуда забирают через выгрузки, OData или репликацию в промежуточную базу, затем чистят и складывают в DWH. Специфика — кривые справочники, ручные правки задним числом и регламентные окна, когда источник трогать нельзя. Здесь же дольше всего живут SSIS и Informatica.
Рабочая траектория: SQL до уверенных джойнов и оконных функций, Python для скриптов, потом Airflow и один учебный пайплайн от API до витрины с дашбордом. Частый вход — из аналитики, поддержки БД или бэкенда: там уже есть половина стека. В вакансиях рядом с ETL SQL стоит в 85% случаев, Python — в 74%, так что эта пара обязательна.
Обычный ETL везёт данные из рабочих систем в хранилище. Reverse ETL двигает их обратно: сегменты клиентов из DWH уезжают в CRM, рекламные кабинеты и рассылки, чтобы менеджеры и маркетинг работали с теми же цифрами, что и аналитики. Инструменты — Hightouch, Census; локальные команды чаще пишут свои коннекторы поверх API.