Criar expressões no mapeamento do fluxo de dados
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!
No mapeamento do fluxo de dados, muitas propriedades de transformação são inseridas como expressões. Essas expressões são compostas por valores de coluna, parâmetros, funções, operadores e literais que são avaliados para um tipo de dados do Spark em tempo de execução. O mapeamento de fluxos de dados tem uma experiência dedicada destinada a ajudá-lo a criar essas expressões chamadas Construtor de Expressões. Utilizando o autocompletar de código IntelliSense para realce, verificação de sintaxe e preenchimento automático, o construtor de expressões foi projetado para facilitar os fluxos de dados de criação. Este artigo explica como usar o construtor de expressões para criar efetivamente sua lógica de negócios.
Abrir o Construtor de Expressões
Há vários pontos de entrada para abrir o construtor de expressões. Tudo isso depende do contexto específico da transformação do fluxo de dados. O caso de uso mais comum é em transformações como coluna derivada e agregação , onde os usuários criam ou atualizam colunas usando a linguagem de expressão de fluxo de dados. O construtor de expressões pode ser aberto selecionando Abrir construtor de expressões acima da lista de colunas. Você também pode selecionar um contexto de coluna e abrir o construtor de expressões diretamente para essa expressão.
Em algumas transformações, como filtro, clicar em uma caixa de texto de expressão azul abre o construtor de expressões.
Quando você faz referência a colunas em uma condição de correspondência ou grupo por, uma expressão pode extrair valores de colunas. Para criar uma expressão, selecione Coluna computada.
Nos casos em que uma expressão ou um valor literal são entradas válidas, selecione Adicionar conteúdo dinâmico para criar uma expressão avaliada como um valor literal.
Elementos de expressão
No mapeamento de fluxos de dados, as expressões podem ser compostas por valores de coluna, parâmetros, funções, variáveis locais, operadores e literais. Essas expressões devem ser avaliadas para um tipo de dados do Spark, como string, booleano ou inteiro.
Funções
O mapeamento de fluxos de dados tem funções e operadores internos que podem ser usados em expressões. Para obter uma lista de funções disponíveis, consulte a referência de linguagem de fluxo de dados de mapeamento.
Funções definidas pelo usuário (visualização)
O mapeamento de fluxos de dados suporta a criação e o uso de funções definidas pelo usuário. Para ver como criar e usar funções definidas pelo usuário, consulte Funções definidas pelo usuário.
Índices de matriz de endereços
Quando você estiver lidando com colunas ou funções que retornam tipos de matriz, use colchetes ([]) para acessar um elemento específico. Se o índice não existir, a expressão será avaliada em NULL.
Importante
No mapeamento de fluxos de dados, as matrizes são baseadas em um, o que significa que o primeiro elemento é referenciado pelo índice um. Por exemplo, myArray[1] acessará o primeiro elemento de uma matriz chamada 'myArray'.
Esquema de entrada
Se o fluxo de dados usar um esquema definido em qualquer uma de suas fontes, você poderá fazer referência a uma coluna pelo nome em muitas expressões. Se você estiver utilizando desvio de esquema, poderá fazer referência a colunas explicitamente usando as byName()
funções ou byNames()
corresponder usando padrões de coluna.
Nomes de colunas com caracteres especiais
Quando você tiver nomes de coluna que incluam caracteres especiais ou espaços, coloque o nome entre chaves para fazer referência a eles em uma expressão.
{[dbo].this_is my complex name$$$}
Parâmetros
Parâmetros são valores que são passados para um fluxo de dados em tempo de execução a partir de um pipeline. Para fazer referência a um parâmetro, selecione o parâmetro na visualização Elementos de expressão ou faça referência a ele com um cifrão na frente de seu nome. Por exemplo, um parâmetro chamado parameter1 é referenciado por $parameter1
. Para saber mais, consulte Parametrizando fluxos de dados de mapeamento.
Pesquisa em cache
Uma pesquisa em cache permite que você faça uma pesquisa embutida da saída de um coletor armazenado em cache. Há duas funções disponíveis para uso em cada pia, lookup()
e outputs()
. A sintaxe para fazer referência a essas funções é cacheSinkName#functionName()
. Para obter mais informações, consulte coletores de cache.
lookup()
Recebe as colunas correspondentes na transformação atual como parâmetros e retorna uma coluna complexa igual à linha correspondente às colunas de chave no coletor de cache. A coluna complexa retornada contém uma subcoluna para cada coluna mapeada no coletor de cache. Por exemplo, se você tinha um coletor errorCodeCache
de cache de código de erro que tinha uma coluna de chave correspondente no código e uma coluna chamada Message
. A chamada errorCodeCache#lookup(errorCode).Message
retornaria a mensagem correspondente ao código passado.
outputs()
não usa parâmetros e retorna todo o coletor de cache como uma matriz de colunas complexas. Isso não pode ser chamado se as colunas de chave forem especificadas no coletor e só deve ser usado se houver algumas linhas no coletor de cache. Um caso de uso comum é acrescentar o valor máximo de uma chave de incremento. Se uma única linha CacheMaxKey
agregada em cache contiver uma coluna MaxKey
, você poderá fazer referência ao primeiro valor chamando CacheMaxKey#outputs()[1].MaxKey
.
Locals
Se você estiver compartilhando lógica em várias colunas ou quiser compartimentar sua lógica, poderá criar uma variável local. Um local é um conjunto de lógica que não é propagado a jusante para a seguinte transformação. Os locais podem ser criados dentro do construtor de expressões indo para Elementos de expressão e selecionando Locais. Crie um novo selecionando Criar novo.
Os locais podem fazer referência a qualquer elemento de expressão, incluindo funções, esquema de entrada, parâmetros e outros locais. Ao fazer referência a outros locais, a ordem importa, pois o local referenciado precisa estar "acima" do atual.
Para fazer referência a um local em uma transformação, selecione o local na exibição Elementos de expressão ou faça referência a ele com dois pontos na frente de seu nome. Por exemplo, um local chamado local1 seria referenciado por :local1
. Para editar uma definição local, passe o mouse sobre ela na visualização de elementos de expressão e selecione o ícone de lápis.
Visualizar resultados da expressão
Se o modo de depuração estiver ativado, você poderá usar interativamente o cluster de depuração para visualizar o que sua expressão avalia. Selecione Atualizar ao lado da visualização de dados para atualizar os resultados da visualização de dados. Você pode ver a saída de cada linha dadas as colunas de entrada.
Interpolação de cadeias
Ao criar cadeias de caracteres longas que usam elementos de expressão, use a interpolação de cadeias de caracteres para criar facilmente uma lógica de cadeia de caracteres complexa. A interpolação de cadeias de caracteres evita o uso extensivo de concatenação de cadeias de caracteres quando os parâmetros são incluídos em cadeias de caracteres de consulta. Use aspas duplas para incluir texto de cadeia de caracteres literal junto com expressões. Você pode incluir funções de expressão, colunas e parâmetros. Para usar a sintaxe da expressão, coloque-a em chaves encaracoladas,
Alguns exemplos de interpolação de cordas:
"My favorite movie is {iif(instr(title,', The')>0,"The {split(title,', The')[1]}",title)}"
"select * from {$tablename} where orderyear > {$year}"
"Total cost with sales tax is {round(totalcost * 1.08,2)}"
"{:playerName} is a {:playerRating} player"
Nota
Ao usar a sintaxe de interpolação de cadeia de caracteres em consultas de código-fonte SQL, a cadeia de caracteres de consulta deve estar em uma única linha, sem '/n'.
Comentar expressões
Adicione comentários às suas expressões usando a sintaxe de comentário de linha única e multilinha.
Os seguintes exemplos são comentários válidos:
/* This is my comment */
/* This is a
multi-line comment */
Se você colocar um comentário na parte superior da expressão, ele aparecerá na caixa de texto de transformação para documentar suas expressões de transformação.
Expressões regulares
Muitas funções de linguagem de expressão usam sintaxe de expressão regular. Quando você usa funções de expressão regular, o Construtor de Expressões tenta interpretar uma barra invertida (\) como uma sequência de caracteres de escape. Quando você usa barras invertidas em sua expressão regular, coloque todo o regex em backticks (') ou use uma barra invertida dupla.
Um exemplo que usa backticks:
regex_replace('100 and 200', `(\d+)`, 'digits')
Um exemplo que usa barras duplas:
regex_replace('100 and 200', '(\\d+)', 'digits')
Atalhos de teclado
Abaixo está uma lista de atalhos disponíveis no construtor de expressões. A maioria dos atalhos do intellisense estão disponíveis ao criar expressões.
- Ctrl+K Ctrl+C: Comente toda a linha.
- Ctrl+K Ctrl+U: Descomente.
- F1: Forneça comandos de ajuda do editor.
- Alt+Tecla de seta para baixo: Mover a linha atual para baixo.
- Alt+Seta para cima: Mover a linha atual para cima.
- Ctrl+Barra de espaço: mostra ajuda de contexto.
Expressões mais usadas
Converter em datas ou carimbos de data/hora
Para incluir literais de cadeia de caracteres na saída do carimbo de data/hora, envolva a conversão em toString()
.
toString(toTimestamp('12/31/2016T00:12:00', 'MM/dd/yyyy\'T\'HH:mm:ss'), 'MM/dd /yyyy\'T\'HH:mm:ss')
Para converter milissegundos de época em um carimbo de data ou hora, use toTimestamp(<number of milliseconds>)
. Se o tempo estiver chegando em segundos, multiplique por 1.000.
toTimestamp(1574127407*1000l)
O "l" à direita no final da expressão anterior significa conversão para um tipo longo como sintaxe embutida.
Encontre tempo de época ou tempo Unix
toLong( currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000', 'aaaa-MM-dd HH:mm:ss. SSS') * 1000l
Avaliação do tempo de fluxo de dados
O fluxo de dados processa até milissegundos. Para 2018-07-31T20:00:00.2170000, você verá 2018-07-31T20:00:00.217 na saída. No portal do serviço, o carimbo de data/hora está sendo mostrado na configuração atual do navegador, que pode eliminar 217, mas quando você executará o fluxo de dados de ponta a ponta, 217 (parte de milissegundos também é processada). Você pode usar toString(myDateTimeColumn) como expressão e ver dados de precisão total na visualização. Processe datetime como datetime em vez de string para todos os fins práticos.