Criar de expressões no fluxo de dados de mapeamento
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!
No fluxo de dados de mapeamento, 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 avaliam como tipo de dados do Spark em tempo de execução. Os fluxos de dados de mapeamento têm uma experiência dedicada para ajudar você a criar essas expressões chamada de Construtor de Expressões. Utilizando a conclusão de código do IntelliSense para realce, verificação de sintaxe e preenchimento automático, o construtor de expressões é projetado para facilitar a criação de fluxos de dados. 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. Todos eles dependem do contexto específico da transformação do fluxo de dados. O caso de uso mais comum está em transformações como coluna derivada e agregação, em que 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 nessa expressão.
Em algumas transformações como filtro, clicar em uma caixa de texto de expressão azul abrirá o construtor de expressões.
Quando você faz referência a colunas em uma condição de correspondência ou agrupamento, 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 que avalie como valor literal.
Elementos de expressão
Nos fluxos de dados de mapeamento, as expressões podem ser compostas por valores de coluna, parâmetros, funções, variáveis locais, operadores e literais. Essas expressões devem avaliar como tipo de dados do Spark, como cadeia de caracteres, booliano ou número inteiro.
Funções
Os fluxos de dados de mapeamento têm 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 (versão prévia)
O mapeamento de fluxos de dados dá suporte à criação e ao uso de funções definidas pelo usuário. Para ver como criar e usar funções definidas pelo usuário, confira funções definidas pelo usuário.
Endereçar índices de matriz
Ao lidar 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 avalia como NULL.
Importante
Nos fluxos de dados de mapeamento, 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 por nome em muitas expressões. Se você estiver utilizando descompasso de esquema, será possível fazer referência a colunas explicitamente usando as funções byName()
ou byNames()
, ou fazer a correspondência usando padrões de coluna.
Nomes de coluna com caracteres especiais
Quando você tem nomes de coluna que incluem 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 de um pipeline para um fluxo de dados em tempo de execução. Para fazer referência a um parâmetro, selecione o parâmetro na exibição de Elementos de expressão ou faça referência a ele com um sinal de 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 armazenada em cache
Uma pesquisa armazenada 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 coletor, 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()
usa as colunas correspondentes na transformação atual como parâmetros e retorna uma coluna complexa igual à linha que corresponde à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ê tivesse um coletor de cache de códigos de erro errorCodeCache
com uma coluna de chave correspondente no código e uma coluna chamada Message
. Chamar errorCodeCache#lookup(errorCode).Message
retornaria a mensagem correspondente ao código passado.
outputs()
não usa parâmetros e retorna o coletor de cache inteiro como matriz de colunas complexas. Isso não poderá ser chamado se as colunas de chave forem especificadas no coletor e só deve ser usado se houver poucas linhas no coletor de cache. Um caso de uso comum é acrescentar o valor máximo de uma chave de incremento. Se uma única linha agregada armazenada em cache CacheMaxKey
contiver uma coluna MaxKey
, você poderá referenciar o primeiro valor chamando CacheMaxKey#outputs()[1].MaxKey
.
Locais
Se você estiver compartilhando a lógica em várias colunas ou desejar compartimentalizar a lógica, será possível criar uma variável local. Um local é um conjunto de lógica que não é propagada em downstream para a transformação a seguir. Os locais podem ser criados dentro do construtor de expressões indo para Elementos de expressão e selecionando Locais. Crie um novo local selecionando Criar novo.
Os locais podem referenciar 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 é importante, pois o local referenciado precisa ser "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 do nome. Por exemplo, um local chamado local1 seria referenciado por :local1
. Para editar uma definição local, passe o mouse sobre ela na exibição elementos de expressão e selecione o ícone de lápis.
Visualizar resultados da expressão
Se o modo de depuração for ativado, você poderá usar interativamente o cluster de depuração para visualizar como a 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 de acordo com as colunas de entrada.
Interpolação de cadeia de caracteres
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 cadeia de caracteres evita o uso extensivo da concatenação de cadeia de caracteres quando os parâmetros são incluídos em cadeias de caracteres de consulta. Use aspas duplas para colocar o texto da cadeia de caracteres literal junto com expressões. Você pode incluir funções, colunas e parâmetros de expressão. Para usar a sintaxe de expressão, coloque-a entre chaves,
Alguns exemplos de interpolação de cadeia de caracteres:
"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"
Observação
Ao usar a sintaxe de interpolação de cadeia de caracteres em consultas de origem do SQL, a cadeia de caracteres de consulta deve estar em uma única linha, sem '/n'.
Comentando expressões
Adicione comentários às expressões usando sintaxe de comentário de linha única e multilinhas.
Os exemplos a seguir 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. Ao usar funções de expressão regular, o Construtor de Expressões tentará interpretar uma barra invertida (\) como sequência de caracteres de escape. Ao usar barras invertidas na expressão regular, coloque o regex inteiro em aspas invertidas (`) ou use uma barra invertida dupla.
Um exemplo que usa aspas invertidas:
regex_replace('100 and 200', `(\d+)`, 'digits')
Um exemplo que usa barras duplas:
regex_replace('100 and 200', '(\\d+)', 'digits')
Atalhos do teclado
Veja abaixo uma lista de atalhos disponíveis no construtor de expressões. A maioria dos atalhos do IntelliSense está disponível durante a criação de expressões.
- Ctrl+K Ctrl+C: comentar linha inteira.
- Ctrl+K Ctrl+U: remover comentário.
- F1: fornecer comandos de ajuda do editor.
- Alt+seta para baixo: mover para baixo na linha atual.
- Alt+seta para cima: mover para cima na linha atual.
- Ctrl+barra de espaço: mostrar ajuda contextual.
Expressões comumente usadas
Converter em datas ou carimbos de data/hora
Para incluir literais de cadeia de caracteres na saída do carimbo de data/hora, encapsule 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 uma data ou carimbo de data/hora, use toTimestamp(<number of milliseconds>)
. Se o tempo for em segundos, multiplique por 1.000.
toTimestamp(1574127407*1000l)
O "l" à direita no final da expressão anterior significa conversão em um tipo longo como sintaxe embutida.
Localizar horário da época ou do horário do Unix
toLong( currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS') ) * 1000l
Avaliação de tempo de fluxo de dados
Processos de fluxo de dados até milissegundos. Para 2018-07-31T20:00:00.2170000, você verá 2018-07-31T20:00:00.217 na saída. No portal para o serviço, o carimbo de data/hora é mostrado na configuração atual do navegador, o que pode eliminar 217, mas quando você executar o fluxo de dados de ponta a ponta, 217 (a parte dos milissegundos também é processada). Você pode usar uma expressão toString(myDateTimeColumn) como e ver os dados de precisão total na visualização. Processe datetime como datetime em vez de string para todos os fins práticos.