Alterar a transformação de linha 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!

Os fluxos de dados estão disponíveis no Azure Data Factory e no Azure Synapse Pipelines. Este artigo aplica-se ao mapeamento de fluxos de dados. Se você é novo em transformações, consulte o artigo introdutório Transformar dados usando um fluxo de dados de mapeamento.

Use a transformação Alter Row para definir políticas de inserção, exclusão, atualização e atualização em linhas. Você pode adicionar condições um-para-muitos como expressões. Essas condições devem ser especificadas em ordem de prioridade, pois cada linha será marcada com a política correspondente à primeira expressão correspondente. Cada uma dessas condições pode resultar em uma linha (ou linhas) sendo inserida, atualizada, excluída ou atualizada. O Alter Row pode produzir ações DDL ou DML em seu banco de dados.

Alter row settings

As transformações Alter Row operam apenas em coletores de banco de dados, REST ou Azure Cosmos DB em seu fluxo de dados. As ações atribuídas às linhas (inserir, atualizar, excluir, upsert) não ocorrerão durante as sessões de depuração. Execute uma atividade Executar fluxo de dados em um pipeline para executar as políticas de linha de alteração em suas tabelas de banco de dados.

Nota

Uma transformação Alter Row não é necessária para fluxos de dados do Change Data Capture que usam fontes CDC nativas, como SQL Server ou SAP. Nesses casos, o ADF detetará automaticamente o marcador de linha, de modo que as políticas de Alterar Linha sejam desnecessárias.

Especificar uma política de linha padrão

Crie uma transformação Alter Row e especifique uma política de linha com uma condição de true(). Cada linha que não corresponder a nenhuma das expressões definidas anteriormente será marcada para a política de linha especificada. Por padrão, cada linha que não corresponder a nenhuma expressão condicional será marcada como Insert.

Alter row policy

Nota

Para marcar todas as linhas com uma política, você pode criar uma condição para essa política e especificar a condição como true().

Ver políticas na pré-visualização de dados

Use o modo de depuração para exibir os resultados de suas políticas de linha de alteração no painel de visualização de dados. Uma visualização de dados de uma transformação de linha alter não produzirá ações DDL ou DML em relação ao seu destino.

Alter row policies

Cada política de linha de alteração é representada por um ícone que indica se ocorrerá uma ação de inserção, atualização, atualização ou exclusão. O cabeçalho superior mostra quantas linhas são afetadas por cada política na visualização.

Permitir alterar políticas de linha no coletor

Para que as políticas de linha de alteração funcionem, o fluxo de dados deve gravar em um banco de dados ou coletor do Azure Cosmos DB. Na guia Configurações do coletor, habilite quais políticas de linha de alteração são permitidas para esse coletor.

Alter row sink

O comportamento padrão é permitir apenas inserções. Para permitir atualizações, atualizações ou exclusões, marque a caixa no coletor correspondente a essa condição. Se atualizações, upserts ou exclusões estiverem habilitadas, você deverá especificar quais colunas de chave no coletor corresponderão.

Nota

Se suas inserções, atualizações ou upserts modificarem o esquema da tabela de destino no coletor, o fluxo de dados falhará. Para modificar o esquema de destino em seu banco de dados, escolha Recriar tabela como a ação da tabela . Isso soltará e recriará sua tabela com a nova definição de esquema.

A transformação do coletor requer uma única chave ou uma série de chaves para identificação de linha exclusiva em seu banco de dados de destino. Para coletores SQL, defina as chaves na guia Configurações do coletor. Para o Azure Cosmos DB, defina a chave de partição nas configurações e também defina o campo "id" do sistema Azure Cosmos DB no mapeamento do coletor. Para o Azure Cosmos DB, é obrigatório incluir a coluna do sistema "id" para atualizações, atualizações e exclusões.

Mescla e atualiza com o Banco de Dados SQL do Azure e o Azure Synapse

Os Fluxos de Dados dão suporte a mesclagens no Banco de Dados SQL do Azure e no pool de bancos de dados do Azure Synapse (data warehouse) com a opção upsert.

No entanto, você pode se deparar com cenários em que o esquema do banco de dados de destino utilizou a propriedade identity das colunas de chave. O serviço requer que você identifique as chaves que você usará para corresponder aos valores de linha para atualizações e upserts. Mas se a coluna de destino tiver a propriedade de identidade definida e você estiver usando a política de upsert, o banco de dados de destino não permitirá que você escreva na coluna. Você também pode encontrar erros ao tentar fazer upsert em relação à coluna de distribuição de uma tabela distribuída.

Aqui estão maneiras de corrigir isso:

  1. Vá para as Configurações de transformação do coletor e defina "Ignorar colunas de chave de escrita". Isso informará ao serviço para não escrever a coluna que você selecionou como o valor-chave para seu mapeamento.

  2. Se essa coluna de chave não for a coluna que está causando o problema para colunas de identidade, você poderá usar a opção SQL de pré-processamento de transformação Coletor: SET IDENTITY_INSERT tbl_content ON. Em seguida, desative-o com a propriedade SQL pós-processamento: SET IDENTITY_INSERT tbl_content OFF.

  3. Para o caso de identidade e o caso da coluna de distribuição, você pode alternar sua lógica de Upsert para usar uma condição de atualização separada e uma condição de inserção separada usando uma transformação de Divisão Condicional. Dessa forma, você pode definir o mapeamento no caminho de atualização para ignorar o mapeamento de coluna de chave.

Script de fluxo de dados

Sintaxe

<incomingStream>
    alterRow(
           insertIf(<condition>?),
           updateIf(<condition>?),
           deleteIf(<condition>?),
           upsertIf(<condition>?),
        ) ~> <alterRowTransformationName>

Exemplo

O exemplo abaixo é uma transformação de linha alter nomeada CleanData que usa um fluxo SpecifyUpsertConditions de entrada e cria três condições de linha de alteração. Na transformação anterior, é calculada uma coluna nomeada alterRowCondition que determina se uma linha é ou não inserida, atualizada ou excluída no banco de dados. Se o valor da coluna tiver um valor de cadeia de caracteres que corresponda à regra de linha de alteração, essa política será atribuída.

Na interface do usuário, essa transformação se parece com a imagem abaixo:

Alter row example

O script de fluxo de dados para essa transformação está no trecho abaixo:

SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
	updateIf(alterRowCondition == 'update'),
	deleteIf(alterRowCondition == 'delete')) ~> AlterRow

Após a transformação Alter Row, convém agrupar seus dados em um armazenamento de dados de destino.