Несколько месяцев назад в виде preview появился сервис Azure Data Factory, и наконец-то у меня дошли руки с ним разобраться.
Основной смысл этого проекта в том, чтобы дать возможность брать различные источники данных, связывать их с обработчиками и получать очищенные данные на выходе.
Такой своеобразный аналог SQL Server Integration Service. Построил pipeline (конвейер обработки) и на выходе получил результат. При этом в качестве источника данных можно использовать SQL Azure, SQL Server (в том числе и не в Azure), а также Blob, Table, Queue из Storage Account.
Конечно с SSIS на порядок более мощный инструмент, но это самое близкое сравнение приходящее на ум.
Термины
Чтобы понять что такое ADF надо разобраться с его терминологий.
- Linked Service – фактически, это указатель-запись-строка на ресурс, который затем будет использован при работе. Он бывает 2 типов: хранение данных и обработка.
- Storage — SQL Azure, Azure Storage Account, SQL Server.
- Compute сейчас поддерживается только Hadoop. На мой взгляд, Hadoop может быть излишне мощным инструментом, и для задач обработки будет достаточно менее мощных ресурсов. Надеюсь, в будущем добавят и worker role, и виртуальные машины, и batch. Но на данный момент в стадии preview.
- Data Set — именованный набор данных. В теории, может быть как просто набором байт, так и структурированной таблицей со схемой. В реальности на данный момент поддерживается только один тип.
- Table — это набор плоских данных со схемой.
- Activity – это непосредственные обработчики данных. Они бывают 3 типов: написанные на C#, написанные на Hive/Pig для Hadoop и copy-активности, для копирования данных с локальных серверов в облако.
- Pipeline — это процесс, который объединяет linked service-источники данных, linked service-обработчики и activity и на выходе создает Data Set.
- Data Hub — логическая группировка Linked Service. Pipeline стартует в рамках одного Data Hub. (Судя по всему сейчас переименовали в Resource Group т.к. я только в одной статье видел этот термин, а на портале и в остальных статьях resource group. По этому даже pull request сделал, с правкой стать.)
- Slice — это часть Dataset, полученная в рамках одного запуска. Каждый последующий запуск процесса порождает новый slice.
- Data Management Gateway — это ПО, которое позволяет соединить локальный sql server ADF. Мы должны его установить в своей сети, зарегистрировать через Azure Portal.
Создаем Azure Data factory
Следующим шагом будет создание Pipeline.
Особенность на текущий момент в том, что мы не можем сделать это через интерфейс. Придется использовать Powershell командлеты.
Входящая таблица
Надеюсь, в будущем команда сделает экспорт какой-нибудь или графический wizard, но пока так.
Точно таким же образом создается выходная таблица. Т.к. если есть вход, значит должен быть и выход.
Создаем сам Pipeline
Самое важное я выделил — это имена входящих и исходящих таблиц, их типы указаны в трансформации.
Это достаточно простой пример.
Ничто нам не мешает выход одной активности передавать на вход другой или сделать несколько источников данных для активности. Все упирается в ваши потребности.
Источники и приемники для Copy Activity
Команда разработчиков предоставила нам табличку, показывающую, что и куда можно переливать.
Понятно, что внутри Azure все и везде. А вот если мы подключаем либо свой локальный SQL Server, либо созданный на виртуальной машине (что по сути одно и тоже, с точностью до Data Management Gateway), то мы уже ограничены в направлениях. Хотя если мы переливаем данные с одного локального SQL Server на другой, то не очень понятно, зачем тут Data Factory вообще: берем SQL Integration Service и поехали!
В этой же статье и набор свойств для каждого источника/приемника данных перечислен.
.Net code activity
Но это были всего лишь Copy Activity. Если мы хотим написать что-то более разумное, чем переливку данных из одного источника в другой, нам придется написать на C# code activity и подключать его в процесс обработки.
У нас есть входные и выходные таблицы, свойства, а какую логику с помощью этого реализовать — это на усмотрение разработчика.
После того, как мы написали код, мы должны его опубликовать в blob в виде zip-архива.
.net SDK — Создание всех настроек из C#
В принципе, мы можем создавать и linked resource и pipeline из C#, а не только из powershell через json. Все объекты в JSON один в один мапятся в C# классы. Кому интересно можно прочесть в статье
С ADF можно и нужно работать через PowerShell-коммандлеты, полное их описание можно прочитать тут.
Использования Hive на Hadoop
Мы можем написать скрипт на hive или pig и встроить его в pipeline обработки. Более подробно можно прочитать в этой и этой статье.
По большому счету ничего особенно отличающегося от остальных вариантов. Просто в качестве актвности указывается hive скрипт, грузится в blob и затем на него ссылается в декларации pipeline.
Я правда везде вижу Hive/Pig, но про Pig почему-то только заявления, что можно, ни статьи нет на эту тему.
Мониторинг, запуски, данные.
В интерфейсе портала можно посмотреть информацию по всем источникам данных, запускам, их состоянию, по slice-ам, образовавшимся в результате работы.
On Premise data source
Как заявляют авторы, мы можем использовать стоящий в нашем datacenter sql server.
Для этого нам надо поставить Data Management Gateway (это ПО, которое ставится на ваш сервер и обеспечивает связь azure с ним), а затем так же, как и раньше, зарегистрировать наш sql как linked service.
Более подробно рекомендую прочитать статью. Ни каких рокетных технологий тут нет.
Разбирательства с ошибками и проблемами
Более подробно
Как и любой проект по переливке данных (SQL Integration Service и т.п.) с логированием все могло бы быть лучше.
На мой субъективный взгляд, было бы полезно встроиться в шаг процесса и понять что там происходит и залогировать это, а то что есть сейчас немного не достаточно. Хотя это еще preview, а не релиз.
Цены:
Есть 2 возможности запуска, т.к. есть 2 тарификации: в облаке и локально.
Под локально понимается не возможность развернуть ADF под столом, а использование локального sql.
Тут как всегда: запуск активности — это одни деньги. Если используете HD Insight(Hadoop), то за него отдельно, трафик, исходящий из azure — тоже отдельно. Мне лично непонятно, зависит ли время работы активности и стоимость ее запуска, т.к. в информации этого не нашел.
Ссылки
- Data Factory на страничке preview
- Стартовая
- Видео Overview
- Техническая документация
- Техническая документация2
- Примеры на github
- .NetSDK документация
- Форум
- Цены
- FAQ
Мое личное мнение, что проекто родился из внутренней разработки внутри одной из команд azure и был представлен публике… Он решал свою специфичную задачу, а потом был выкачен в public. Как по мне так не хватает библиотеки активностей, чтобы не все писать руками (в SSIS есть ведь такая), не будет хватать возможности написать свой провайдер к источнику данных и т.п. В целом над SQL Server Integration Service есть 1 преимущество- можно испольовать не SQL источники и приемники данных, в остальном-же сервис сильно проще, если не сказать примитивнее.
P.S. статья доступна на github
Автор: SychevIgor