Partilhar via


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 é 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.

Alterar configurações de linha

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 ocorrem durante as sessões de depuração. Para executar as políticas de alteração de linha em suas tabelas de banco de dados, execute uma atividade Executar fluxo de dados em um pipeline.

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 corresponde a nenhuma das expressões definidas anteriormente é marcada para a política de linha especificada. Por padrão, cada linha que não corresponde a nenhuma expressão condicional é marcada para Insert.

Alterar política de linha

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 produz ações DDL ou DML em relação ao seu destino.

Alterar políticas de linha

Um ícone para cada política de linha de alteração indica se ocorre uma ação de inserção, atualização, atualização ou exclusão. O cabeçalho superior mostra quantas linhas cada política afeta 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.

Alterar lavatório de linha

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 seu esquema de banco de dados de destino utilizou a propriedade identity de colunas de chave. O serviço requer que você identifique as chaves que você usa 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 informa ao serviço para não escrever a coluna que você selecionou como o valor-chave para o 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:

Exemplo de linha Alter

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.