Запуск пакета SSIS с помощью действия "Выполнить пакет SSIS" в Фабрике данных Azure с помощью PowerShell
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
В этой статье описано, как запустить пакет SQL Server Integration Services (SSIS) в конвейере Фабрики данных Azure с помощью PowerShell и действия "Выполнить пакет SSIS".
Предварительные требования
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Вам понадобится среда выполнения интеграции Azure-SSIS Integration Runtime (IR). Если у вас ее нет, создайте ее по инструкции в руководстве Подготовка Azure-SSIS Integration Runtime.
Создание фабрики данных с Azure-SSIS IR
Вы можете как использовать уже существующую фабрику данных с подготовленной средой Azure-SSIS IR, так и создать новую. См. подробные инструкции в статье Развертывание пакетов SQL Server Integration Services в Azure с помощью PowerShell.
Создание конвейера с действием "Выполнить пакет SSIS"
На этом этапе создается конвейер с действием "Выполнить пакет SSIS". Это действие запускает пакет SSIS.
В папке
C:\ADF\RunSSISPackage
создайте JSON-файл с именемRunSSISPackagePipeline.json
и примерно следующим содержимым.Внимание
Перед сохранением файла замените имена, описания и пути объектов, значения свойств или параметров, пароли и другие значения переменных.
{ "name": "RunSSISPackagePipeline", "properties": { "activities": [{ "name": "MySSISActivity", "description": "My SSIS package/activity description", "type": "ExecuteSSISPackage", "typeProperties": { "connectVia": { "referenceName": "MyAzureSSISIR", "type": "IntegrationRuntimeReference" }, "executionCredential": { "domain": "MyExecutionDomain", "username": "MyExecutionUsername", "password": { "type": "SecureString", "value": "MyExecutionPassword" } }, "runtime": "x64", "loggingLevel": "Basic", "packageLocation": { "type": "SSISDB", "packagePath": "MyFolder/MyProject/MyPackage.dtsx" }, "environmentPath": "MyFolder/MyEnvironment", "projectParameters": { "project_param_1": { "value": "123" }, "project_param_2": { "value": { "value": "@pipeline().parameters.MyProjectParameter", "type": "Expression" } } }, "packageParameters": { "package_param_1": { "value": "345" }, "package_param_2": { "value": { "type": "AzureKeyVaultSecret", "store": { "referenceName": "myAKV", "type": "LinkedServiceReference" }, "secretName": "MyPackageParameter" } } }, "projectConnectionManagers": { "MyAdonetCM": { "username": { "value": "MyConnectionUsername" }, "password": { "value": { "type": "SecureString", "value": "MyConnectionPassword" } } } }, "packageConnectionManagers": { "MyOledbCM": { "username": { "value": { "value": "@pipeline().parameters.MyConnectionUsername", "type": "Expression" } }, "password": { "value": { "type": "AzureKeyVaultSecret", "store": { "referenceName": "myAKV", "type": "LinkedServiceReference" }, "secretName": "MyConnectionPassword", "secretVersion": "MyConnectionPasswordVersion" } } } }, "propertyOverrides": { "\\Package.MaxConcurrentExecutables": { "value": 8, "isSensitive": false } } }, "policy": { "timeout": "0.01:00:00", "retry": 0, "retryIntervalInSeconds": 30 } }] } }
Для выполнения пакетов, хранящихся в файловой системе или Файлах Azure, используйте следующие значения свойств расположения пакета и журналов:
{ { { { "packageLocation": { "type": "File", "packagePath": "//MyStorageAccount.file.core.windows.net/MyFileShare/MyPackage.dtsx", "typeProperties": { "packagePassword": { "type": "SecureString", "value": "MyEncryptionPassword" }, "accessCredential": { "domain": "Azure", "username": "MyStorageAccount", "password": { "type": "SecureString", "value": "MyAccountKey" } } } }, "logLocation": { "type": "File", "logPath": "//MyStorageAccount.file.core.windows.net/MyFileShare/MyLogFolder", "typeProperties": { "accessCredential": { "domain": "Azure", "username": "MyStorageAccount", "password": { "type": "AzureKeyVaultSecret", "store": { "referenceName": "myAKV", "type": "LinkedServiceReference" }, "secretName": "MyAccountKey" } } } } } } } }
Для выполнения пакетов в проектах, хранящихся в файловой системе или Файлах Azure, используйте следующие значения свойств расположения пакета:
{ { { { "packageLocation": { "type": "File", "packagePath": "//MyStorageAccount.file.core.windows.net/MyFileShare/MyProject.ispac:MyPackage.dtsx", "typeProperties": { "packagePassword": { "type": "SecureString", "value": "MyEncryptionPassword" }, "accessCredential": { "domain": "Azure", "userName": "MyStorageAccount", "password": { "type": "SecureString", "value": "MyAccountKey" } } } } } } } }
Чтобы выполнять внедренные пакеты, используйте следующие значения свойств расположения пакета:
{ { { { "packageLocation": { "type": "InlinePackage", "typeProperties": { "packagePassword": { "type": "SecureString", "value": "MyEncryptionPassword" }, "packageName": "MyPackage.dtsx", "packageContent":"My compressed/uncompressed package content", "packageLastModifiedDate": "YYYY-MM-DDTHH:MM:SSZ UTC-/+HH:MM" } } } } } }
Для выполнения пакетов в хранилищах используйте следующие значения свойств расположения пакета и конфигурации:
{ { { { "packageLocation": { "type": "PackageStore", "packagePath": "myPackageStore/MyFolder/MyPackage", "typeProperties": { "packagePassword": { "type": "SecureString", "value": "MyEncryptionPassword" }, "accessCredential": { "domain": "Azure", "username": "MyStorageAccount", "password": { "type": "SecureString", "value": "MyAccountKey" } }, "configurationPath": "//MyStorageAccount.file.core.windows.net/MyFileShare/MyConfiguration.dtsConfig", "configurationAccessCredential": { "domain": "Azure", "userName": "MyStorageAccount", "password": { "type": "AzureKeyVaultSecret", "store": { "referenceName": "myAKV", "type": "LinkedServiceReference" }, "secretName": "MyAccountKey" } } } } } } } }
В Azure PowerShell перейдите в папку
C:\ADF\RunSSISPackage
.Чтобы создать конвейер RunSSISPackagePipeline, выполните командлет Set-AzDataFactoryV2Pipeline.
$DFPipeLine = Set-AzDataFactoryV2Pipeline -DataFactoryName $DataFactory.DataFactoryName ` -ResourceGroupName $ResGrp.ResourceGroupName ` -Name "RunSSISPackagePipeline" -DefinitionFile ".\RunSSISPackagePipeline.json"
Пример выходных данных:
PipelineName : Adfv2QuickStartPipeline ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {CopyFromBlobToBlob} Parameters : {[inputPath, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification], [outputPath, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
Запуск конвейера
Используйте для запуска конвейера командлет Invoke-AzDataFactoryV2Pipeline. Командлет позволяет получить идентификатор выполнения конвейера для дальнейшего мониторинга.
$RunId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $DataFactory.DataFactoryName `
-ResourceGroupName $ResGrp.ResourceGroupName `
-PipelineName $DFPipeLine.Name
Мониторинг конвейера
Запустите приведенный ниже скрипт PowerShell, чтобы проверять состояние выполнения, пока не закончится копирование данных. Скопируйте этот скрипт в окно PowerShell и нажмите клавишу "ВВОД".
while ($True) {
$Run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $ResGrp.ResourceGroupName `
-DataFactoryName $DataFactory.DataFactoryName `
-PipelineRunId $RunId
if ($Run) {
if ($run.Status -ne 'InProgress') {
Write-Output ("Pipeline run finished. The status is: " + $Run.Status)
$Run
break
}
Write-Output "Pipeline is running...status: InProgress"
}
Start-Sleep -Seconds 10
}
Вы также можете отслеживать конвейер на портале Azure. Пошаговые инструкции см. в разделе Мониторинг конвейера.
Запуск конвейера по расписанию с помощью триггера
Мы только что рассмотрели, как запускать конвейер по запросу. Еще можно создать триггер и запускать конвейер по расписанию (каждый час, каждый день и т. д.).
В папке
C:\ADF\RunSSISPackage
создайте JSON-файл с именемMyTrigger.json
и следующим содержимым:{ "properties": { "name": "MyTrigger", "type": "ScheduleTrigger", "typeProperties": { "recurrence": { "frequency": "Hour", "interval": 1, "startTime": "2017-12-07T00:00:00-08:00", "endTime": "2017-12-08T00:00:00-08:00" } }, "pipelines": [{ "pipelineReference": { "type": "PipelineReference", "referenceName": "RunSSISPackagePipeline" }, "parameters": {} }] } }
В Azure PowerShell перейдите в папку
C:\ADF\RunSSISPackage
.Выполните командлет создания триггера Set-AzDataFactoryV2Trigger.
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResGrp.ResourceGroupName ` -DataFactoryName $DataFactory.DataFactoryName ` -Name "MyTrigger" -DefinitionFile ".\MyTrigger.json"
По умолчанию триггер находится в остановленном состоянии. Запустите триггер с помощью командлета Start-AzDataFactoryV2Trigger.
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResGrp.ResourceGroupName ` -DataFactoryName $DataFactory.DataFactoryName ` -Name "MyTrigger"
Проверьте активацию триггера с помощью командлета Get-AzDataFactoryV2Trigger.
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName ` -DataFactoryName $DataFactoryName ` -Name "MyTrigger"
Через час выполните следующую команду. Например, если текущее время 15:25 (UTC), запустите команду в 16:00 (UTC).
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName ` -DataFactoryName $DataFactoryName ` -TriggerName "MyTrigger" ` -TriggerRunStartedAfter "2017-12-06" ` -TriggerRunStartedBefore "2017-12-09"
Чтобы убедиться, что пакет запустился, выполните следующий запрос к базе данных SSISDB на своем сервере SQL Server.
select * from catalog.executions