Compartilhar via


Até a atividade no Azure Data Factory e no Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!

A atividade Until fornece a mesma funcionalidade que uma estrutura de loop do-until fornece em linguagens de programação. Ela executa um conjunto de atividades em um loop até que a condição associada à atividade seja avaliada como verdadeira. Se uma atividade interna falhar, a atividade Until não será interrompida. Você pode especificar um valor de tempo limite para a atividade Until.

Criar um atividade Until com a interface do usuário

Para usar uma atividade Until em um pipeline, conclua estas etapas:

  1. Procure Until no painel Atividades do pipeline e arraste uma atividade Until para a tela do pipeline.

  2. Selecione a atividade Until na tela, se ainda não estiver selecionada, e sua guia Configurações, para editar seus detalhes.

    Mostra a guia Configurações da atividade Until na tela do pipeline.

  3. Insira uma expressão que será avaliada após todas as atividades filho definidas na atividade Until serem executadas. Se a expressão for avaliada como falsa, a atividade Until executará todas as suas atividades filhas novamente. Quando for avaliado como verdadeiro, a atividade Until será concluída. A expressão pode ser uma expressão de cadeia de caracteres literais ou uma combinação de expressões dinâmicas, variáveis do sistema ou saídas de outras atividades. O exemplo a seguir verifica o valor de uma variável de matriz de pipeline definida anteriormente chamada TestVariable para ver se ela é avaliada como ['done'].

    Mostra o painel  Adicionar conteúdo dinâmico  com uma expressão para verificar uma variável em busca de um valor definido.

  4. Defina as atividades que a atividade Until executa selecionando o botão Editar Atividades diretamente na atividade Até ou selecionando a guia Atividades para selecioná-la ali. Um novo painel do editor de atividades é exibido onde você pode adicionar quaisquer atividades para a atividade Until executar. Nesse exemplo, uma atividade de Conjunto de Variáveis simplesmente define o valor da variável referenciada na expressão mencionada como [”concluído”], de modo que a expressão da atividade Until será verdadeira na primeira vez que for executada, e a atividade Until será interrompida. No mundo real, você pode verificar as condições necessárias e a atividade Until continuará executando suas atividades filho sempre que a expressão for avaliada, até que as condições sejam atendidas.

    Mostra o editor de atividades para uma atividade Until com uma atividade Definir Variável definida.

Sintaxe

{
    "type": "Until",
    "typeProperties": {
        "expression":  {
            "value":  "<expression that evaluates to true or false>", 
            "type": "Expression"
        },
        "timeout": "<time out for the loop. for example: 00:10:00 (10 minute)>",
        "activities": [
            {
                "<Activity 1 definition>"
            },
            {
                "<Activity 2 definition>"
            },
            {
                "<Activity N definition>"
            }
        ]
    },
    "name": "MyUntilActivity"
}

Propriedades de tipo

Propriedade Descrição Valores permitidos Obrigatório
name Nome da atividade Until. String Sim
type Deve ser definido como Until. String Sim
expressão Expressão que deve ser avaliada como verdadeira ou falsa Expressão. Yes
tempo limite O loop do-until atinge o tempo limite após o tempo especificado aqui. Cadeia de caracteres. d.hh:mm:ss (ou) hh:mm:ss. O valor padrão é sete dias. Valor máximo é: 90 dias. No
Atividades Conjunto de atividades que é executado até que a expressão seja avaliada como true. Matriz de atividades. Yes

Exemplo 1

Observação

Esta seção fornece definições de JSON e comandos de exemplo do PowerShell para executar o pipeline. Para obter instruções com instruções passo a passo para criar um pipeline do usando definições de JSON e do Azure PowerShell, consulte o tutorial: criar um Data Factory usando o Azure PowerShell.

Pipeline com a atividade Until

Neste exemplo, o pipeline tem duas atividades: Until e Wait. A atividade Wait aguarda o período especificado antes de executar a atividade da Web no loop. Para saber mais sobre expressões e funções, consulte Linguagem e funções de expressão.

{
    "name": "DoUntilPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression": {
                        "value": "@equals('Failed', coalesce(body('MyUnauthenticatedActivity')?.status, actions('MyUnauthenticatedActivity')?.status, 'null'))",
                        "type": "Expression"
                    },
                    "timeout": "00:10:00",
                    "activities": [
                        {
                            "name": "MyUnauthenticatedActivity",
                            "type": "WebActivity",
                            "typeProperties": {
                                "method": "get",
                                "url": "https://www.fake.com/",
                                "headers": {
                                    "Content-Type": "application/json"
                                }
                            },
                            "dependsOn": [
                                {
                                    "activity": "MyWaitActivity",
                                    "dependencyConditions": [ "Succeeded" ]
                                }
                            ]
                        },
                        {
                            "type": "Wait",
                            "typeProperties": {
                                "waitTimeInSeconds": 1
                            },
                            "name": "MyWaitActivity"
                        }
                    ]
                },
                "name": "MyUntilActivity"
            }
        ]
    }
}

Exemplo 2

O pipeline desta amostra copia dados de uma pasta de entrada para uma pasta de saída em um loop. O loop é encerrado quando o valor do parâmetro de repetição é definido como falso ou atinge o tempo limite após um minuto.

Pipeline com a atividade Until (Adfv2QuickStartPipeline.json)

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression":  {
                        "value":  "@equals('false', pipeline().parameters.repeat)", 
                        "type": "Expression"
                    },
                    "timeout": "00:10:00",
                    "activities": [
                        {
                            "name": "CopyFromBlobToBlob",
                            "type": "Copy",
                            "inputs": [
                                {
                                    "referenceName": "BlobDataset",
                                    "parameters": {
                                        "path": "@pipeline().parameters.inputPath"
                                    },
                                    "type": "DatasetReference"
                                }
                            ],
                            "outputs": [
                                {
                                    "referenceName": "BlobDataset",
                                    "parameters": {
                                        "path": "@pipeline().parameters.outputPath"
                                    },
                                    "type": "DatasetReference"
                                }
                            ],
                            "typeProperties": {
                                "source": {
                                    "type": "BlobSource"
                                },
                                "sink": {
                                    "type": "BlobSink"
                                }
                            },
                            "policy": {
                                "retry": 1,
                                "timeout": "00:10:00",
                                "retryIntervalInSeconds": 60
                            }
                        }
                    ]
                },
                "name": "MyUntilActivity"
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            },
            "repeat": {
                "type": "String"
            }                        
        }        
    }
}

Serviço vinculado do Armazenamento do Azure (AzureStorageLinkedService.json)

{
    "name": "AzureStorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<Azure Storage account name>;AccountKey=<Azure Storage account key>"
        }
    }
}

Conjunto de dados parametrizado do Blob do Azure (BlobDataset.json)

Os pipeline define o folderPath com o valor do parâmetro outputPath1 ou outputPath2 do pipeline.

{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": {
                "value": "@{dataset().path}",
                "type": "Expression"
            }
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}

JSON do parâmetro do pipeline (PipelineParameters.json)

{
    "inputPath": "adftutorial/input",
    "outputPath": "adftutorial/outputUntil",
    "repeat": "true"
}

Comandos do PowerShell

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Esses comandos pressupõem que você salvou os arquivos JSON na pasta: C:\ADF.

Connect-AzAccount
Select-AzSubscription "<Your subscription name>"

$resourceGroupName = "<Resource Group Name>"
$dataFactoryName = "<Data Factory Name. Must be globally unique>";
Remove-AzDataFactoryV2 $dataFactoryName -ResourceGroupName $resourceGroupName -force


Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location "East US" -Name $dataFactoryName
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -DefinitionFile "C:\ADF\AzureStorageLinkedService.json"
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "BlobDataset" -DefinitionFile "C:\ADF\BlobDataset.json"
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "Adfv2QuickStartPipeline" -DefinitionFile "C:\ADF\Adfv2QuickStartPipeline.json"
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName "Adfv2QuickStartPipeline" -ParameterFile C:\ADF\PipelineParameters.json

while ($True) {
    $run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $resourceGroupName -DataFactoryName $DataFactoryName -PipelineRunId $runId

    if ($run) {
        if ($run.Status -ne 'InProgress') {
            Write-Host "Pipeline run finished. The status is: " $run.Status -foregroundcolor "Yellow"
            $run
            break
        }
        Write-Host  "Pipeline is running...status: InProgress" -foregroundcolor "Yellow"
        Write-Host "Activity run details:" -foregroundcolor "Yellow"
        $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
        $result

        Write-Host "Activity 'Output' section:" -foregroundcolor "Yellow"
        $result.Output -join "`r`n"
    }

    Start-Sleep -Seconds 15
}

Veja outras atividades de fluxo de controle com suporte: