Como usar os parâmetros, expressões e funções no Azure Data Factory

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!

Neste documento, vamos focar nos conceitos fundamentais de aprendizagem e analisar vários exemplos para explorar a capacidade de criar pipelines de dados com parâmetros dentro do Azure Data Factory. A parametrização e as expressões dinâmicas são complementos notáveis ao ADF (Azure Data Factory), pois elas podem economizar bastante tempo e permitir Extrair, Transformar e Carregar (ETL) de uma forma mais flexível, ou permitir uma solução de extração, transformação, carregamento (ETL), o que reduzirá drasticamente o custo da manutenção da solução e acelerará a implementação de novos recursos nas pipelines existentes. Você ganha esses benefícios porque a parametrização reduz a quantidade de codificação rígida e aumenta o número de objetos e processos reutilizáveis em uma solução.

Interface do usuário e parâmetros do Azure Data Factory

Se você não tiver familiaridade com o Azure Data Factory e não souber usar os parâmetros na interface do usuário do ADF, examine a Interface do usuário do Data Factory para serviços vinculados com parâmetros e a Interface do usuário do Data Factory para pipelines controlados por metadados com parâmetros para obter acesso a uma explicação visual.

Conceitos de parâmetro e expressão

Você pode usar parâmetros para passar valores externos em pipelines, conjuntos de dados, serviços vinculados e fluxos de dados. O parâmetro não pode ser alterado depois que passar para o recurso. Ao parametrizar recursos, você pode reutilizá-los com valores diferentes sempre que desejar. Os parâmetros podem ser usados individualmente ou como parte de expressões. Os valores JSON na definição podem ser literais ou expressões que são avaliadas no runtime.

Por exemplo:

"name": "value"

ou

"name": "@pipeline().parameters.password"

As expressões podem aparecer em qualquer lugar em um valor de cadeia de caracteres JSON e sempre retornam outro valor JSON. Aqui, a senha é um parâmetro de pipeline na expressão. Se um valor JSON for uma expressão, o corpo da expressão será extraído removendo a arroba (@). Se for necessária uma cadeia de caracteres literal que começa com @, seu escape deverá ser feito usando @@. Os exemplos a seguir mostram como as expressões são avaliadas.

Valor JSON Result
"parameters" Os “parâmetros” dos caracteres são retornados.
"parameters[1]" Os “parâmetros[1]” dos caracteres são retornados.
"@@" Uma cadeia de caracteres de 1 caractere que contém \'\@\' será retornada.
" @" Uma cadeia de caracteres de 2 caracteres que contém ' \@\' será retornada.

As expressões também podem aparecer dentro de cadeias de caracteres usando um recurso chamado interpolação de cadeia de caracteres em que as expressões estão encapsuladas em @{ ... }. Por exemplo: "name" : "First Name: @{pipeline().parameters.firstName} Last Name: @{pipeline().parameters.lastName}"

Usando interpolação de cadeia de caracteres, o resultado é sempre uma cadeia de caracteres. Digamos que defini myNumber como 42 e myString como foo:

Valor JSON Result
"@pipeline().parameters.myString" Retorna foo como uma cadeia de caracteres.
"@{pipeline().parameters.myString}" Retorna foo como uma cadeia de caracteres.
"@pipeline().parameters.myNumber" Retorna 42 como um número.
"@{pipeline().parameters.myNumber}" Retorna 42 como uma cadeia de caracteres.
"A resposta é: @{pipeline().parameters.myNumber}" Retorna a cadeia de caracteres Answer is: 42.
"@concat('Resposta é:', string (pipeline (). Parameters.myNumber))" Retorna a cadeia de caracteres Answer is: 42
"A resposta é: @@{pipeline().parameters.myNumber}" Retorna a cadeia de caracteres Answer is: @{pipeline().parameters.myNumber}.

Exemplos de como usar parâmetros em expressões

Exemplo de expressão complexa

O exemplo abaixo mostra um exemplo complexo que faz referência a um subcampo profundo da saída da atividade. Para fazer referência a um parâmetro de pipeline que é avaliado como um subcampo, use a sintaxe [] em vez do operador ponto (.) (como no caso de subfield1 e subfield2)

@activity('*activityName*').output.*subfield1*.*subfield2*[pipeline().parameters.*subfield3*].*subfield4*

Editor de conteúdo dinâmico

O editor de conteúdo dinâmico automaticamente dá escape nos caracteres do conteúdo quando você termina de editá-lo. Por exemplo, o conteúdo a seguir, no editor de conteúdo, é uma interpolação de cadeia de caracteres com duas funções de expressão.

{ 
  "type": "@{if(equals(1, 2), 'Blob', 'Table' )}",
  "name": "@{toUpper('myData')}"
}

O editor de conteúdo dinâmico converte o conteúdo acima em expressão "{ \n \"type\": \"@{if(equals(1, 2), 'Blob', 'Table' )}\",\n \"name\": \"@{toUpper('myData')}\"\n}". O resultado dessa expressão é uma cadeia de caracteres de formato JSON, como mostra o exemplo abaixo.

{
  "type": "Table",
  "name": "MYDATA"
}

Um conjunto de dados com parâmetros

No exemplo a seguir, o BlobDataset usa um parâmetro denominado path. Seu valor é usado para definir um valor para a propriedade folderPath usando as expressões: dataset().path.

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

Um pipeline com parâmetros

No exemplo a seguir, o pipeline usa os parâmetros inputPath e outputPath. O path para o conjunto de dados de blob com parâmetros é definido usando os valores desses parâmetros. A sintaxe usada aqui é: pipeline().parameters.parametername.

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "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"
                    }
                }
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            }
        }
    }
}

Chamando funções dentro de expressões

Você pode chamar funções dentro de expressões. As seções a seguir fornecem informações sobre as funções que podem ser usados em uma expressão.

Funções de cadeia de caracteres

Para trabalhar com cadeias de caracteres, você pode usar essas funções de cadeia de caracteres e algumas funções de coleta. Funções de cadeia de caracteres só funcionam com cadeias de caracteres.

Função de cadeia de caracteres Tarefa
concat Combinar duas ou mais cadeias de caracteres e retornar a cadeia de caracteres combinada.
endsWith Verificar se uma cadeia de caracteres termina com a subcadeia de caracteres especificada.
guid Gerar um GUID (identificador global exclusivo) como uma cadeia de caracteres.
indexOf Retornar a posição inicial de uma subcadeia de caracteres.
lastIndexOf Retorna a posição inicial da última ocorrência de uma subcadeia de caracteres.
substitui Substituir uma subcadeia de caracteres pela cadeia de caracteres especificada e retornar a cadeia de caracteres atualizada.
split Retorna uma matriz contendo subcadeias de caracteres, separadas por vírgulas, de uma cadeia de caracteres maior baseada em um caractere delimitador especificado na cadeia de caracteres original.
startsWith Verificar se uma cadeia de caracteres começa com uma subcadeia de caracteres específica.
substring Retornar caracteres de uma cadeia de caracteres, começando na posição especificada.
toLower Retornar uma cadeia de caracteres em letras minúsculas.
toUpper Retornar uma cadeia de caracteres em letras maiúsculas.
cortar Remover espaços em branco à esquerda e à direita de uma cadeia de caracteres e retornar a cadeia de caracteres atualizada.

Funções de coleção

Para trabalhar com coleções, matrizes em geral, cadeias de caracteres e, às vezes, dicionários, você pode usar estas funções de coleção.

Função de coleção Tarefa
contains Verificar se uma coleção tem um item específico.
empty Verifique se uma coleção está vazia.
first Retornar o primeiro item de uma coleção.
intersection Retornar uma coleção que tem somente os itens comuns entre as coleções especificadas.
join Retornar uma cadeia de caracteres que tem todos os itens de uma matriz, separados pelo caractere especificado.
last Retornar o último item de uma coleção.
length Retornar o número de itens em uma cadeia de caracteres ou matriz.
skip Remover itens do início de uma coleção e retornar todos os outros itens.
take Retornar itens do início de uma coleção.
union Retornar uma coleção que tem todos os itens das coleções especificadas.

Funções lógicas

Essas funções são úteis em condições e podem ser usadas para avaliar qualquer tipo de lógica.

Função de comparação lógica Tarefa
and Verificar se todas as expressões são verdadeiras.
equals Verificar se os dois valores são equivalentes.
greater Verificar se o primeiro valor é maior que o segundo valor.
greaterOrEquals Verificar se o primeiro valor é superior ou igual ao segundo.
if Verificar se uma expressão é verdadeira ou falsa. Com base no resultado, retornar um valor especificado.
less Verificar se o primeiro valor é menor que o segundo valor.
lessOrEquals Verificar se o primeiro valor é inferior ou igual ao segundo valor.
not Verificar se uma expressão é falsa.
or Verificar se pelo menos uma expressão é verdadeira.

Funções de conversão

Essas funções são usadas para converter entre cada um dos tipos nativos no idioma:

  • string
  • inteiro
  • FLOAT
  • booleano
  • matrizes
  • dicionários
Função de conversão Tarefa
array Retornar uma matriz de uma única entrada especificada. Para várias entradas, confira createArray.
base64 Retornar a versão codificada em Base64 de uma cadeia de caracteres.
base64ToBinary Retornar a versão binária de uma cadeia de caracteres codificada em Base64.
base64ToString Retornar a versão de cadeia de caracteres de uma cadeia de caracteres codificada em Base64.
binary Retornar a versão binária de um valor de entrada.
bool Retornar a versão booliana de um valor de entrada.
coalesce Retornar o primeiro valor não nulo de um ou mais parâmetros.
createArray Retornar uma matriz de várias entradas.
dataUri Retornar o URI de dados de um valor de entrada.
dataUriToBinary Retornar a versão binária de um URI de dados.
dataUriToString Retornar a versão de cadeia de caracteres de um URI de dados.
decodeBase64 Retornar a versão de cadeia de caracteres de uma cadeia de caracteres codificada em Base64.
decodeDataUri Retornar a versão binária de um URI de dados.
decodeUriComponent Retornar uma cadeia de caracteres que substitui caracteres de escape por versões decodificadas.
encodeUriComponent Retornar uma cadeia de caracteres que substitui caracteres não seguros para URL por caracteres de escape.
float Retornar um número de ponto flutuante correspondente a um valor de entrada.
int Retornar a versão em inteiros de uma cadeia de caracteres.
json Retornar o objeto ou valor de tipo JSON (JavaScript Object Notation) correspondente a uma cadeia de caracteres ou XML.
cadeia de caracteres Retornar a versão de cadeia de caracteres de um valor de entrada.
uriComponent Retornar a versão codificada para URI correspondente a um valor de entrada substituindo caracteres não seguros para URL por caracteres de escape.
uriComponentToBinary Retornar a versão binária de uma cadeia de caracteres codificada como URI.
uriComponentToString Retornar a versão de cadeia de caracteres correspondente a uma cadeia de caracteres codificada como URI.
xml Retornar a versão XML de uma cadeia de caracteres.
xpath Verificar o XML em busca de nós ou valores correspondentes a uma expressão XPath (Linguagem XPath) e retornar esses nós ou valores.

Funções matemáticas

Essas funções podem ser usadas para qualquer um dos tipos de números: inteiros e floats.

Função matemática Tarefa
adicionar Retornar o resultado da adição de dois números.
div Retornar o resultado da divisão de dois números.
max Retornar o valor mais alto de um conjunto de números em uma matriz.
min Retornar o valor mais baixo de um conjunto de números ou de uma matriz.
mod Retornar o resto da divisão de dois números.
mul Retornar o produto da multiplicação de dois números.
rand Retornar um número inteiro aleatório de um intervalo especificado.
range Retornar uma matriz de inteiros que começa em um inteiro especificado.
sub Retornar o resultado da subtração do segundo número do primeiro.

Funções de data

Função de data ou hora Tarefa
addDays Adicionar um número de dias a um carimbo de data/hora.
addHours Adicionar um número de horas a um carimbo de data/hora.
addMinutes Adicionar um número de minutos a um carimbo de data/hora.
addSeconds Adicionar um número de segundos a um carimbo de data/hora.
addToTime Adicionar um número de unidades de tempo a um carimbo de data/hora. Confira também getFutureTime.
convertFromUtc Converter um carimbo de data/hora de UTC (Tempo Universal Coordenado) no fuso horário de destino.
convertTimeZone Converter um carimbo de data/hora do fuso horário de origem no fuso horário de destino.
convertToUtc Converter um carimbo de data/hora do fuso horário de origem em UTC (Tempo Universal Coordenado).
dayOfMonth Retornar o componente de dia do mês de um carimbo de data/hora.
dayOfWeek Retornar o componente de dia da semana de um carimbo de data/hora.
dayOfYear Retornar o componente de dia do ano de um carimbo de data/hora.
formatDateTime Retorna o carimbo de data/hora como uma cadeia de caracteres no formato opcional.
getFutureTime Retornar o carimbo de data/hora atual mais as unidades de tempo especificadas. Confira também addToTime.
getPastTime Retornar o carimbo de data/hora atual menos as unidades de tempo especificadas. Confira também subtractFromTime.
startOfDay Retornar o início do dia de um carimbo de data/hora.
startOfHour Retornar o início da hora de um carimbo de data/hora.
startOfMonth Retornar o início do mês de um carimbo de data/hora.
subtractFromTime Subtrair um número de unidades de tempo de um carimbo de data/hora. Confira também getPastTime.
ticks Retornar o valor de propriedade ticks de um carimbo de data/hora especificado.
utcNow Retornar o carimbo de data/hora atual como uma cadeia de caracteres.

Exemplos detalhados para a prática

Pipeline de cópia do Azure Data Factory detalhado com parâmetros

Este Tutorial instrui você a passar parâmetros de pipeline de cópia do Azure Data Factory entre um pipeline e uma atividade, bem como entre as atividades.

Pipeline de fluxo de dados de mapeamento detalhado com parâmetros

Acesse o fluxo de dados de mapeamento com parâmetros para ver um exemplo completo de como usar parâmetros no fluxo de dados.

Pipeline controlado por metadados detalhado com parâmetros

Acesse o pipeline controlado por metadados com parâmetros para saber mais sobre como usar parâmetros para criar pipelines controlados por metadados. Esse é um caso comum de uso para parâmetros.

Para obter uma lista de variáveis de sistema que você pode usar em expressões, consulte Variáveis do sistema.