Executar um pacote SSIS com a atividade Executar Pacote SSIS no Azure Data Factory com PowerShell
APLICA-SE A: Azure Data Factory Azure Synapse Analytics
Gorjeta
Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!
Este artigo descreve como executar um pacote do SQL Server Integration Services (SSIS) em um pipeline do Azure Data Factory usando o PowerShell e a atividade Executar Pacote SSIS.
Pré-requisitos
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Crie um tempo de execução de integração (IR) do Azure-SSIS se ainda não tiver um, seguindo as instruções passo a passo no Tutorial: Provisionamento do IR do Azure-SSIS.
Criar uma fábrica de dados com o Azure-SSIS IR
Você pode usar uma fábrica de dados existente que já tenha o Azure-SSIS IR provisionado ou criar uma nova fábrica de dados com o Azure-SSIS IR. Siga as instruções passo a passo no Tutorial: Implantar pacotes SSIS no Azure por meio do PowerShell.
Criar um pipeline com uma atividade Executar Pacote SSIS
Nesta etapa, você cria um pipeline com uma atividade Executar Pacote SSIS. A atividade executa seu pacote SSIS.
Crie um arquivo JSON nomeado
RunSSISPackagePipeline.json
naC:\ADF\RunSSISPackage
pasta com conteúdo semelhante ao exemplo a seguir.Importante
Substitua nomes de objetos, descrições e caminhos, valores de propriedades ou parâmetros, senhas e outros valores de variáveis antes de salvar o arquivo.
{ "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 } }] } }
Para executar pacotes armazenados no sistema de arquivos/Arquivos do Azure, insira os valores para suas propriedades de local de pacote e log da seguinte maneira:
{ { { { "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" } } } } } } } }
Para executar pacotes em projetos armazenados no sistema de arquivos/Arquivos do Azure, insira os valores para as propriedades do local do pacote da seguinte maneira:
{ { { { "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" } } } } } } } }
Para executar pacotes incorporados, insira os valores para as propriedades do local do pacote da seguinte maneira:
{ { { { "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" } } } } } }
Para executar pacotes armazenados em repositórios de pacotes, insira os valores para as propriedades do pacote e do local de configuração da seguinte maneira:
{ { { { "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" } } } } } } } }
No Azure PowerShell, alterne para a
C:\ADF\RunSSISPackage
pasta.Para criar o pipeline RunSSISPackagePipeline, execute o cmdlet Set-AzDataFactoryV2Pipeline .
$DFPipeLine = Set-AzDataFactoryV2Pipeline -DataFactoryName $DataFactory.DataFactoryName ` -ResourceGroupName $ResGrp.ResourceGroupName ` -Name "RunSSISPackagePipeline" -DefinitionFile ".\RunSSISPackagePipeline.json"
Aqui está a saída de exemplo:
PipelineName : Adfv2QuickStartPipeline ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {CopyFromBlobToBlob} Parameters : {[inputPath, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification], [outputPath, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
Executar o pipeline
Use o cmdlet Invoke-AzDataFactoryV2Pipeline para executar o pipeline. O cmdlet devolve o ID de execução do pipeline para monitorização futura.
$RunId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $DataFactory.DataFactoryName `
-ResourceGroupName $ResGrp.ResourceGroupName `
-PipelineName $DFPipeLine.Name
Monitorizar o pipeline
Execute o seguinte script do PowerShell para verificar continuamente o estado de execução do pipeline até que este termine de copiar os dados. Copie ou cole o seguinte script na janela do PowerShell e selecione Enter.
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
}
Você também pode monitorar o pipeline usando o portal do Azure. Para obter instruções passo a passo, consulte Monitorar o pipeline.
Agendar o pipeline com um gatilho
Na etapa anterior, você executou o pipeline sob demanda. Você também pode criar um gatilho de agendamento para executar o pipeline em uma agenda, como por hora ou diariamente.
Crie um arquivo JSON nomeado
MyTrigger.json
naC:\ADF\RunSSISPackage
pasta com o seguinte conteúdo:{ "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": {} }] } }
No Azure PowerShell, alterne para a
C:\ADF\RunSSISPackage
pasta.Execute o cmdlet Set-AzDataFactoryV2Trigger , que cria o gatilho.
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResGrp.ResourceGroupName ` -DataFactoryName $DataFactory.DataFactoryName ` -Name "MyTrigger" -DefinitionFile ".\MyTrigger.json"
Por padrão, o gatilho está no estado interrompido. Inicie o gatilho executando o cmdlet Start-AzDataFactoryV2Trigger .
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResGrp.ResourceGroupName ` -DataFactoryName $DataFactory.DataFactoryName ` -Name "MyTrigger"
Confirme se o gatilho foi iniciado executando o cmdlet Get-AzDataFactoryV2Trigger .
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName ` -DataFactoryName $DataFactoryName ` -Name "MyTrigger"
Execute o seguinte comando após a próxima hora. Por exemplo, se a hora atual for 15:25 UTC, execute o comando às 16:25 UTC.
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName ` -DataFactoryName $DataFactoryName ` -TriggerName "MyTrigger" ` -TriggerRunStartedAfter "2017-12-06" ` -TriggerRunStartedBefore "2017-12-09"
Execute a seguinte consulta no banco de dados SSISDB em seu servidor SQL para verificar se o pacote foi executado.
select * from catalog.executions