Загрузка данных в хранилище данных Azure с Data Factory - SQL On Edge Episode 18

Tags: Azure, Data Factory, polybase, Microsoft

Ранее в этом году Microsoft выпустила следующее поколение своего продукта для обработки данных Azure Data Factory. Первый выпуск Data Factory не получил широкого распространения из-за ограничений в плане планирования, триггеров запуска и отсутствия контроля потока конвейеров. Microsoft приняла это близко к сердцу и вернулась с более функциональной версией, которая теперь может охватывать больший процент производственных сценариев и может быть подходящей для многих проектов.

Имея это в виду, недавно мне пришлось загружать данные на 1 ТБ в Azure SQL Data Warehouse и я подумал, что это отличная возможность протестировать Data Factory на более высоких томах. Я столкнулся с несколькими проблемами, которые заслуживают публичной публикации и делюсь своими обходными решениями, чтобы другие могли извлечь выгоду из моего опыта.

Важность Polybase

Прежде чем погрузиться в две конкретные проблемы, с которыми я столкнулся, важно коснуться Polybase и того, как она связана с загрузкой данных в Azure SQL Data Warehouse (ASDW). Существует два способа загрузки данных в ASDW:

  1. Через контрольный узел: это сценарий «trickle INSERT», в котором вы выполняете некоторые отдельные ВСТАВКИ через ваше соединение или используете такой инструмент, как BCP, или обычную нагрузку SSIS через драйвер SQL в ASDW.
  2. Через Polybase: Polybase - это высокопараллельный и эффективный модуль загрузки данных внутри ASDW. Он обходит узел управления и осуществляет загрузку непосредственно из хранилища в разные дистрибутивы, используя вычислительную емкость множества вычислительных узлов. Он может использоваться непосредственно через T-SQL или с инструментами, которые являются Polybase-подобными, такими как Azure Data Factory или целевая задача Polybase в SSIS.

Очевидно, что если мы хотим загрузить 1 Тбайт данных, нам необходимо загрузить его через Polybase, а возврат в загрузку через узел управления приведет к значительно меньшей пропускной способности и более низкой производительности. При проектировании конвейера, который будет загружать большое количество данных в ASDW, это самая важная характеристика; Polybase всегда следует использовать скрыто.

В следующих двух сценариях будут обсуждаться выявленные мной проблемы и мои обходные пути, которые всегда должны были содержать Polybase для загрузки данных.

Использование подстановочных знаков для выбора файлов

Когда вы разрабатываете конвейер, в котором используется источник памяти Blob (очень распространенный), вы можете указать подстановочный файл в соответствии с файлами, которые вы хотите загрузить. Это очень удобно, конечно, поскольку Polybase сама по себе не поддерживает подстановочные знаки; она требует указать полную папку для загрузки или отдельный файл.

 

Затем Data Factory позволит вам добавить цель зацикливания ASDW, и вам будет разрешено выбирать загрузку с помощью Polybase и развертывать конвейер без проблем. Проблема здесь, однако,состоит в том, что, как только конвейер начнет выполняться, Data Factory не будет использовать Polybase, он снова вернется к загрузке Control Node. Причина в том, что вы использовали подстановочный шаблон в источнике, и поскольку Polybase не поддерживает его, Data Factory отказывается от использования Polybase. Я думал, что под обложками Data Factory может отображать файлы подстановочных знаков в ряд определений таблицы EXTERNAL, чтобы Polybase все еще использовался, но это не так. Итак, извлеченный урок. Использование шаблона в источнике памяти Blob отключит Polybase в  зацикливании ASDW. Это не работает для загрузки больших объемов данных.

Обходной путь здесь заключается в реализации подстановочного знака с использованием параметров Data Factory и последующей загрузки в Polybase с каждым отдельным файлом. Это делается путем комбинирования цикла For Each с активностью Copy Data, чтобы вы выполняли итерацию файлов, соответствующих вашему шаблону, и каждый из них затем загружался как одна операция с использованием Polybase. При таком подходе производительность моей загрузки данных была примерно в 100 раз быстрее, чем при снижении активности, когда ADF просто удалил Polybase и загрузился через контрольный узел.

Перейдем к следующей проблеме, с которой я столкнулся.

Работа с пользовательскими форматами дат

Файлы, которые я загружал, использовали не слишком общий формат даты «YYYY-MMM-DD», например, 2018-JUL-01. Когда я просто сконфигурировал конвейер и запустил его, я подумал, что, возможно, ADF достаточно умен, чтобы автоматически распознавать формат, но он просто провалился, выдав ошибку. Хорошо, подумал я, возможно просто нужно указать, что это нестандартный формат. И действительно, ADF поддерживает определение пользовательских форматов дат, основанных на том, что доступно в .NET framework.  Полный список ЗДЕСЬ.

Теперь, если вы пройдете через список, вы увидите, что конкретно моего формата даты на самом деле не существует, мне очень не повезло, что из десятков форматов этот просто недоступен. Однако форматы, поддерживаемые Polybase, на самом деле не совпадают, и это другой список, который вы можете найти ЗДЕСЬ. И на этот раз мне повезло, мой формат YYYY-MMM-DD поддерживается напрямую Polybase!

Решение здесь очень просто; для файлов с форматом даты, который не поддерживается ADF, но поддерживается Polybase, я все еще могу использовать ADF, если я хочу, чтобы он был средством планирования и потока, но мне нужно выполнить фактическую загрузку через Polybase и T-SQL. Или, если у вас очень простая или разовая загрузка, просто просто отключите ADF и загрузите Polybase на T-SQL.

Есть еще одна возможность, которую я хочу упомянуть ради полноты, но не подходит для меня. ADF также позволяет делать предварительные копии, которые могут изменять схему данных; однако, это означает копирование данных для управления им, а затем, наконец, выполнение реальной загрузки таблицы. При работе с данными 1TB + этот шаг копирования данных был слишком большим, когда Polybase уже поддерживала формат даты.

Демонстрация

Надеюсь, что эти решения помогут вам, если вы столкнетесь с подобными проблемами, и вы можете воспользоваться моим опытом при работе с Azure Data Factory и Azure SQL Data Warehouse.

Теперь, когда мы рассмотрели сценарии, давайте сделаем демо-версию проблемы с загрузкой подстановочного знака и разницу в производительности на Azure Data Factory, когда Polybase не используется и когда она есть. Я также покажу, как сконфигурирован конвейер, чтобы он мог выполнять загрузку подстановочных знаков и поддерживать активность Polybase. Посмотрите это видео!



Уорнер Чейвз

No Comments

Add a Comment