Partilhar via


Até atividade no Azure Data Factory e Synapse Analytics

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!

A atividade Until disponibiliza a mesma funcionalidade que uma estrutura de ciclos do-until fornecem nas linguagens de programação. Executa um conjunto de atividades num ciclo até que a condição associada às atividades seja avaliada como verdadeira. Se uma atividade interna falhar, a atividade Until não para. Você pode especificar um valor de tempo limite para a atividade até.

Criar uma atividade Until com a interface do usuário

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

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

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

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

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

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

  4. Defina as atividades que a atividade Until executa selecionando o botão Editar atividades diretamente na atividade Until ou selecionando a guia Atividades para selecioná-la lá. Um novo painel do editor de atividades é exibido onde você pode adicionar quaisquer atividades para a atividade Até ser executada. Neste exemplo, uma atividade set Variable simplesmente define o valor da variável referenciada na expressão acima mencionada como ['done'], de modo que a expressão Until activity será true na primeira vez que for executada e a atividade Until será interrompida. No seu uso no mundo real, você pode verificar todas as condições necessárias e a atividade Until continuará a executar suas atividades infantis cada vez 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 set Variable 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 do tipo

Property Description Valores permitidos Necessário
nome Nome da Until atividade. Cadeia (de carateres) Sim
tipo Deve ser definido como Até. Cadeia (de carateres) Sim
expressão Expressão que deve ser avaliada como verdadeira ou falsa Expressão. Sim
tempo limite O loop do-until expira após o tempo especificado aqui. String. d.hh:mm:ss ou) hh:mm:ss. O valor padrão é sete dias. O valor máximo é: 90 dias. Não
Atividades Conjunto de atividades que são executadas até que a expressão seja avaliada como true. Variedade de atividades. Sim

Exemplo 1

Nota

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

Pipeline com atividade Until

Neste exemplo, o pipeline tem duas atividades: Until e Wait. A atividade Esperar aguarda o período de tempo 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 neste exemplo copia dados de uma pasta de entrada para uma pasta de saída em um loop. O loop termina quando o valor do parâmetro repeat é definido como false ou expira após um minuto.

Pipeline com 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 de Blob do Azure parametrizado (BlobDataset.json)

O pipeline define o folderPath como 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"
            }
        }
    }
}

Parâmetro de pipeline JSON (PipelineParameters.json)

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

Comandos do PowerShell

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.

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 suportadas: