Поделиться через


Основные сведения о синхронных и асинхронных преобразованиях

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

Чтобы понять разницу между синхронным и асинхронным преобразованием в службах Integration Services, проще всего начать с понимания синхронного преобразования. Если синхронное преобразование соответствует требованиям пользователя, может потребоваться асинхронное преобразование.

Синхронные преобразования

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

Примером синхронного преобразования является преобразование «Конвертация данных». Для каждой входящей строки преобразуется значение в указанном столбце, и строка перенаправляется дальше. Каждая отдельная операция конвертации выполняется независимо от всех других строк в наборе данных.

В скриптах и программировании служб Integration Services можно указать синхронное преобразование, выполнив поиск идентификатора входных данных компонента и назначив его свойству SynchronousInputID выходных данных компонента. Подсистема обработки потока данных обрабатывает каждую строку входных данных и отправляет ее автоматически в указанное место назначения. Если нужно, чтобы каждая строка направлялась на каждый выход, необходимо создать дополнительный код для вывода данных. При использовании свойства ExclusionGroup для указания, что строки должны направляться на тот или иной выход, как при преобразовании "Условное разбиение", необходимо вызвать метод DirectRow, чтобы выбрать место назначения для каждой строки. Для выхода ошибок необходимо вызвать метод DirectErrorRow, чтобы направлять проблемные строки на выход ошибок, а не на выход по умолчанию.

Асинхронные преобразования

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

  • Компоненту требуется получить несколько буферов данных, прежде чем выполнить обработку. Примером является преобразование «Сортировка», при котором компоненту нужно обработать полный набор строк за одну операцию.

  • Компонент должен объединить строки из нескольких источников. Примером является преобразование «Слияние», при котором компонент должен исследовать несколько строк из каждого источника и объединить их в порядке сортировки.

  • Между входными и выходными строками нет однозначного соответствия. Примером является преобразование «Статистическая обработка», при котором компонент должен добавить к выходным данным строку, содержащую вычисленные статистические значения.

В скриптах и программировании служб Integration Services необходимо указать асинхронное преобразование, назначив значение 0 свойству SynchronousInputID выходных данных компонента. . Подсистема обработки потока данных не отправляет каждую строку автоматически на выход. Затем требуется написать код для явной отправки каждой строки на соответствующий выход, добавив ее в новый выходной буфер, созданный для выходных данных асинхронного преобразования.

Примечание.

Поскольку компонент-источник тоже должен явно добавить каждую строку, считываемую из источника данных, в выходные буферы, действия источника напоминают преобразование с асинхронным выходом.

Также можно создать асинхронное преобразование, имитирующее синхронное преобразование, путем явного копирования каждой входной строки в выходные данные. С помощью этого подхода можно переименовывать столбцы или преобразовывать типы или форматы данных. Однако этот подход снижает производительность. Можно получить те же результаты с более высокой производительностью, используя встроенные компоненты служб Integration Services, такие как «Копирование столбца» или «Конвертация данных».

См. также

Создание синхронного преобразования с помощью компонента скрипта
Создание асинхронного преобразования с помощью компонента скрипта
Разработка пользовательского компонента преобразования с синхронными выходами
Разработка пользовательского компонента преобразования с асинхронными выходами