Como usar parâmetros, expressões e funções no Azure Data Factory
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!
Neste documento, vamos nos concentrar principalmente em aprender conceitos fundamentais com vários exemplos para explorar a capacidade de criar pipelines de dados parametrizados no Azure Data Factory. Parametrização e expressões dinâmicas são adições notáveis ao ADF porque podem economizar uma enorme quantidade de tempo e permitir uma solução muito mais flexível de Extrair, Transformar, Carregar (ETL) ou Extrair, Carregar, Transformar (ELT), o que reduzirá drasticamente o custo de manutenção da solução e acelerará a implementação de novos recursos em pipelines existentes. Esses ganhos ocorrem porque a parametrização minimiza 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ê for novo no uso de parâmetros do Azure Data Factory na interface do usuário do ADF, consulte 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 pipeline controlado por metadados com parâmetros para obter uma explicação visual.
Conceitos de parâmetros e expressões
Você pode usar parâmetros para passar valores externos para pipelines, conjuntos de dados, serviços vinculados e fluxos de dados. Uma vez que o parâmetro tenha sido passado para o recurso, ele não pode ser alterado. Ao parametrizar recursos, você pode reutilizá-los com valores diferentes a cada vez. 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 em tempo de execução.
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 resultam em outro valor JSON. Aqui, 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 o at-sign (@). Se for necessária uma cadeia de caracteres literal que comece com @, ela deverá ser escapada usando @@. Os exemplos a seguir mostram como as expressões são avaliadas.
Valor JSON | Result |
---|---|
"parâmetros" | Os caracteres 'parâmetros' são retornados. |
"parâmetros[1]" | Os caracteres 'parameters[1]' são retornados. |
"@@" | Uma cadeia de caracteres de 1 caractere que contém '@' é retornada. |
" @" | Uma cadeia de 2 caracteres que contém ' @' é retornada. |
As expressões também podem aparecer dentro de cadeias de caracteres, usando um recurso chamado interpolação de cadeia de caracteres, onde as expressões sã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 myNumber
defini 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" | Devolve 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('A 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 uso de 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 para um subcampo, use a sintaxe [] em vez do operador dot(.) (como no caso do subcampo1 e subcampo2)
@activity('*activityName*').output.*subfield1*.*subfield2*[pipeline().parameters.*subfield3*].*subfield4*
Editor de conteúdo dinâmico
O editor de conteúdo dinâmico escapa automaticamente dos caracteres do seu conteúdo quando você termina de editar. 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 mostrada abaixo.
{
"type": "Table",
"name": "MYDATA"
}
Um conjunto de dados com parâmetros
No exemplo a seguir, o BlobDataset usa um parâmetro chamado path. Seu valor é usado para definir um valor para a propriedade folderPath usando a expressão: 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 caminho para o conjunto de dados de blob parametrizado é definido usando valores desses parâmetros. A sintaxe utilizada 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 usadas em uma expressão.
Funções de cadeia
Para trabalhar com cadeias de caracteres, você pode usar essas funções de cadeia de caracteres e também algumas funções de coleção. As funções de cadeia de caracteres funcionam apenas em cadeias de caracteres.
Função da cadeia de carateres | Task |
---|---|
concat | Combine duas ou mais cadeias de caracteres e retorne a cadeia combinada. |
termina com | Verifique se uma cadeia de caracteres termina com a subcadeia especificada. |
GUID | Gere um identificador global exclusivo (GUID) como uma cadeia de caracteres. |
indexOf | Retornar a posição inicial de uma substring. |
lastIndexOf | Retorne a posição inicial para a última ocorrência de uma substring. |
replace | Substitua uma substring pela string especificada e retorne a string atualizada. |
split | Retorna uma matriz que contém substrings, separadas por vírgulas, de uma cadeia de caracteres maior com base em um caractere delimitador especificado na cadeia de caracteres original. |
começaCom | Verifique se uma cadeia de caracteres começa com uma subcadeia de caracteres específica. |
substring | Retorna caracteres de uma cadeia de caracteres, começando a partir da posição especificada. |
paraMais baixo | Retornar uma cadeia de caracteres em formato minúsculo. |
toUpper | Retornar uma cadeia de caracteres em formato maiúsculo. |
guarnição | Remova o espaço em branco à esquerda e à direita de uma cadeia de caracteres e retorne a cadeia de caracteres atualizada. |
Funções de recolha
Para trabalhar com coleções, geralmente matrizes, cadeias de caracteres e, às vezes, dicionários, você pode usar essas funções de coleção.
Função de recolha | Task |
---|---|
contém: | Verifique se uma coleção tem um item específico. |
empty | Verifique se uma coleção está vazia. |
primeiro | Retornar o primeiro item de uma coleção. |
intersecção | Retornar uma coleção que tenha apenas os itens comuns nas coleções especificadas. |
aderir | Retorna uma cadeia de caracteres que tem todos os itens de uma matriz, separados pelo caractere especificado. |
último | Retornar o último item de uma coleção. |
length | Retornar o número de itens em uma cadeia de caracteres ou matriz. |
pular | Remova itens da frente de uma coleção e devolva todos os outros itens. |
tomar | Devolver itens da frente de uma coleção. |
União | Retornar uma coleção que tenha todos os itens das coleções especificadas. |
Funções lógicas
Estas funções são úteis dentro das condições, elas podem ser usadas para avaliar qualquer tipo de lógica.
Função de comparação lógica | Task |
---|---|
and | Verifique se todas as expressões são verdadeiras. |
igual a | Verifique se ambos os valores são equivalentes. |
greater | Verifique se o primeiro valor é maior que o segundo. |
greaterOrEquals | Verifique se o primeiro valor é maior ou igual ao segundo valor. |
se | Verifique se uma expressão é verdadeira ou falsa. Com base no resultado, retorne um valor especificado. |
less | Verifique se o primeiro valor é menor que o segundo. |
lessOrEquals | Verifique se o primeiro valor é menor ou igual ao segundo valor. |
não | Verifique se uma expressão é falsa. |
or | Verifique 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 na linguagem:
- string
- integer
- flutuante
- boolean
- matrizes
- dicionários
Função de conversão | Task |
---|---|
matriz | Retornar uma matriz de uma única entrada especificada. Para várias entradas, consulte createArray. |
base64 | Retorne a versão codificada em base64 para uma cadeia de caracteres. |
base64ToBinary | Retorne a versão binária para uma cadeia de caracteres codificada em base64. |
base64ToString | Retorne a versão da cadeia de caracteres para uma cadeia de caracteres codificada em base64. |
binário | Retornar a versão binária para um valor de entrada. |
Bool | Retorne a versão booleana para um valor de entrada. |
coalesce | Retorna 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 para um valor de entrada. |
dataUriToBinary | Retornar a versão binária para um URI de dados. |
dataUriToString | Retornar a versão da cadeia de caracteres para um URI de dados. |
decodeBase64 | Retorne a versão da cadeia de caracteres para uma cadeia de caracteres codificada em base64. |
decodeDataUri | Retornar a versão binária para um URI de dados. |
decodeUriComponent | Retorna uma cadeia de caracteres que substitui caracteres de escape por versões decodificadas. |
encodeUriComponent | Retorna uma cadeia de caracteres que substitui caracteres não seguros de URL por caracteres de escape. |
flutuar | Retorna um número de ponto flutuante para um valor de entrada. |
Int | Retorne a versão inteira para uma cadeia de caracteres. |
Json | Retorne o valor ou objeto do tipo JSON (JavaScript Object Notation) para uma cadeia de caracteres ou XML. |
string | Retorne a versão da cadeia de caracteres para um valor de entrada. |
uriComponent | Retorne a versão codificada por URI para um valor de entrada substituindo caracteres não seguros de URL por caracteres de escape. |
uriComponentToBinary | Retorne a versão binária para uma cadeia de caracteres codificada por URI. |
uriComponentToString | Retorne a versão da cadeia de caracteres para uma cadeia de caracteres codificada por URI. |
xml | Retornar a versão XML para uma cadeia de caracteres. |
XPath | Verifique se há nós ou valores que correspondam a uma expressão XPath (XML Path Language) e retorne os nós ou valores correspondentes. |
Funções matemáticas
Estas funções podem ser usadas para qualquer tipo de números: inteiros e flutuantes.
Função matemática | Task |
---|---|
adicionar | Retornar o resultado da adição de dois números. |
div | Retornar o resultado da divisão de dois números. |
máx. | Retornar o valor mais alto de um conjunto de números ou de uma matriz. |
min | Retornar o menor valor de um conjunto de números ou de uma matriz. |
Mod | Retorne o restante da divisão de dois números. |
Mul | Devolva o produto multiplicando dois números. |
RAND | Retornar um inteiro aleatório de um intervalo especificado. |
range | Retornar uma matriz inteira que começa a partir de um inteiro especificado. |
sub | Retornar o resultado subtraindo o segundo número do primeiro número. |
Funções de data
Função de data ou hora | Task |
---|---|
addDias | Adicione um número de dias a um carimbo de data/hora. |
addHours | Adicione um número de horas a um carimbo de data/hora. |
adicionarMinutos | Adicione alguns minutos a um carimbo de data/hora. |
addSeconds | Adicione alguns segundos a um carimbo de data/hora. |
addToTime | Adicione várias unidades de tempo a um carimbo de data/hora. Consulte também getFutureTime. |
convertFromUtc | Converta um carimbo de data/hora de Universal Time Coordinated (UTC) para o fuso horário de destino. |
convertTimeZone | Converta um carimbo de data/hora do fuso horário de origem para o fuso horário de destino. |
convertToUtc | Converta um carimbo de data/hora do fuso horário de origem em Universal Time Coordinated (UTC). |
diadeMês | Retornar o componente dia do mês de um carimbo de data/hora. |
diadesemana | Retornar o componente dia da semana de um carimbo de data/hora. |
diadeano | Retornar o componente dia do ano de um carimbo de data/hora. |
formatDateTime | Retorne o carimbo de data/hora como uma cadeia de caracteres no formato opcional. |
getFutureTime | Retorne o carimbo de data/hora atual mais as unidades de tempo especificadas. Consulte também addToTime. |
getPastTime | Retorne o carimbo de data/hora atual menos as unidades de tempo especificadas. Consulte também subtractFromTime. |
inícioOfDay | Retorne o início do dia para um carimbo de data/hora. |
iníciodehora | Retorne o início da hora para um carimbo de data/hora. |
iníciodemês | Retorne o início do mês para um carimbo de data/hora. |
subtrairFromTime | Subtraia várias unidades de tempo de um carimbo de data/hora. Consulte também getPastTime. |
carrapatos | Retornar o valor da propriedade para um carimbo ticks de data/hora especificado. |
utcAgora | Retorne o carimbo de data/hora atual como uma cadeia de caracteres. |
Exemplos pormenorizados de prática
Pipeline de cópia detalhado do Azure Data Factory com parâmetros
Este tutorial de passagem de parâmetros de pipeline de cópia do Azure Data Factory orienta você sobre como passar parâmetros entre um pipeline e uma atividade, bem como entre as atividades.
Pipeline de fluxo de dados de mapeamento detalhado com parâmetros
Siga Mapeando o fluxo de dados com parâmetros para obter um exemplo abrangente sobre como usar parâmetros no fluxo de dados.
Pipeline detalhado orientado por metadados com parâmetros
Siga o pipeline controlado por metadados com parâmetros para saber mais sobre como usar parâmetros para projetar pipelines orientados por metadados. Este é um caso de uso popular para parâmetros.
Conteúdos relacionados
Para obter uma lista de variáveis de sistema que você pode usar em expressões, consulte Variáveis de sistema.