Compartilhar via


Atualização incremental no Dataflow Gen2

Este artigo aborda a atualização incremental de dados no Dataflow Gen2 para o Data Factory do Microsoft Fabric. Quando você usa fluxos de dados para ingestão e transformação de dados, às vezes você precisa atualizar apenas dados novos ou atualizados, especialmente à medida que seus dados aumentam.

A atualização incremental ajuda você a:

  • Reduzir os tempos de atualização
  • Tornar as operações mais confiáveis evitando processos de execução prolongada
  • Usar menos recursos

Prerequisites

Para usar a atualização incremental no Dataflow Gen2, você precisa:

  • Uma capacidade da estrutura Fabric
  • Uma fonte de dados que dá suporte a folding (recomendado) e contém uma coluna Data/DataHora para filtrar dados
  • Um destino de dados que dá suporte à atualização incremental (consulte o suporte ao destino)
  • Revise as limitações antes de começar

Suporte ao destino

Esses destinos de dados dão suporte à atualização incremental:

  • Fabric Lakehouse
  • Fabric Warehouse
  • Banco de Dados SQL do Azure

Você também pode utilizar outros destinos com atualização incremental. Crie uma segunda consulta que faça referência aos dados em etapas para atualizar seu destino. Essa abordagem ainda permite que você use a atualização incremental para reduzir os dados que precisam ser processados do sistema de origem. No entanto, você precisará fazer uma recarga completa dos dados em estágio para o destino final.

Além disso, não há suporte para a configuração de destino padrão para atualização incremental. Você deve definir explicitamente o destino em suas configurações de consulta.

Como usar a atualização incremental

  1. Crie um novo Dataflow Gen2 ou abra um existente.

  2. No editor de fluxo de dados, crie uma nova consulta que obtém os dados que você deseja atualizar incrementalmente.

  3. Verifique a visualização de dados para verificar se a consulta retorna dados com uma coluna DateTime, Date ou DateTimeZone para filtragem.

  4. Verifique se a consulta é totalmente dobrada, o que significa que a consulta é enviada por push para o sistema de origem. Se ele não dobrar totalmente, modifique a consulta para que ela o faça. Você pode verificar se a consulta é totalmente dobrada examinando as etapas de consulta no editor de consultas.

    Captura de tela do editor de consultas no Fluxo de Dados Gen2.

  5. Clique com o botão direito na consulta e selecione Atualização incremental.

    Captura de tela do menu suspenso no Fluxo de Dados Gen2.

  6. Defina as configurações necessárias para a atualização incremental.

    Captura de tela das configurações de atualização incremental.

    1. Escolher uma coluna DateTime pela qual filtrar.
    2. Extraia dados do passado.
    3. Tamanho do bucket.
    4. Extraia apenas novos dados quando o valor máximo nesta coluna for alterado.
  7. Defina as configurações avançadas, se necessário.

    1. Exigir que a consulta de atualização incremental seja dobrada completamente.
  8. Selecione OK para salvar as configurações.

  9. Se desejar, configure um destino de dados para a consulta. Faça isso antes da primeira atualização incremental ou seu destino conterá apenas os dados alterados incrementalmente desde a última atualização.

  10. Publique o Dataflow Gen2.

Depois de configurar a atualização incremental, o fluxo de dados atualizará automaticamente os dados de forma incremental com base em suas configurações. O fluxo de dados só obtém dados que foram alterados desde a última atualização, portanto, ele é executado mais rapidamente e usa menos recursos.

Como a atualização incremental funciona nos bastidores

A atualização incremental divide seus dados em blocos com base na coluna de data e hora. Cada bucket contém dados que foram alterados desde a última atualização. O fluxo de dados sabe o que foi alterado verificando o valor máximo na coluna especificada.

Se o valor máximo for alterado para esse bucket, o fluxo de dados obterá o bucket inteiro e substituirá os dados no destino. Se o valor máximo não for alterado, o fluxo de dados não obterá nenhum dado. Veja como funciona passo a passo.

Primeira etapa: avaliar as alterações

Quando o fluxo de dados é executado, ele verifica primeiro o que foi alterado na fonte de dados. Ele examina o valor máximo em sua coluna DateTime e compara-o com o valor máximo da última atualização.

Se o valor máximo for alterado (ou se essa for sua primeira atualização), o fluxo de dados marcará esse bucket como "alterado" e o processará. Se o valor máximo for o mesmo, o fluxo de dados ignorará totalmente esse bucket.

Segunda etapa: Obter os dados

Agora, o fluxo de dados obtém os dados de cada bucket que foi alterado. Ele processa vários buckets ao mesmo tempo para acelerar o processo.

O fluxo de dados carrega esses dados em uma área de preparação. Ele só obtém dados que se enquadram no intervalo de tempo do bucket, o que significa apenas os dados que realmente foram alterados desde sua última atualização.

Última etapa: substituir os dados no destino

O fluxo de dados atualiza seu destino com os novos dados. Ele usa uma abordagem "replace": primeiro ele exclui os dados antigos desse bucket específico e insere os dados novos.

Esse processo afeta apenas os dados dentro do intervalo de tempo do bucket. Todos os dados fora desse intervalo (como dados históricos mais antigos) permanecem intocados.

Configurações de atualização incremental explicadas

Para configurar a atualização incremental, você precisa especificar essas configurações.

Captura de tela das configurações de atualização incremental.

Configurações gerais

Essas configurações são necessárias e especificam a configuração básica para atualização incremental.

Escolher uma coluna Data/Hora pela qual filtrar

Essa configuração necessária especifica a coluna que os fluxos de dados usam para filtrar os dados. Esta coluna deve ser uma coluna DateTime, Date ou DateTimeZone. O fluxo de dados usa essa coluna para filtrar os dados e obtém apenas os dados que foram alterados desde a última atualização.

Extrair dados do passado

Essa configuração necessária especifica a distância no tempo em que o fluxo de dados deve extrair dados. Essa configuração recebe a carga inicial de dados. O fluxo de dados obtém todos os dados do sistema de origem dentro do intervalo de tempo especificado. Os valores possíveis são:

  • x dias
  • x semanas
  • x meses
  • x trimestres
  • x anos

Por exemplo, se você especificar um mês, o fluxo de dados obterá todos os novos dados do sistema de origem no último mês.

Tamanho do bucket

Essa configuração necessária especifica o tamanho dos buckets que o fluxo de dados usa para filtrar dados. O fluxo de dados divide dados em buckets com base na coluna DateTime. Cada bucket contém dados que foram alterados desde a última atualização. O tamanho do bucket determina a quantidade de dados processados em cada iteração:

  • Um tamanho de bucket menor significa que o fluxo de dados processa menos dados em cada iteração, mas requer mais iterações para processar todos os dados.
  • Um tamanho maior de bucket significa que o fluxo de dados processa mais dados em cada iteração, mas requer menos iterações para processar todos os dados.

Extraia apenas novos dados quando o valor máximo nesta coluna for alterado

Essa configuração necessária especifica a coluna que o fluxo de dados usa para determinar se os dados foram alterados. O fluxo de dados compara o valor máximo nesta coluna com o valor máximo da atualização anterior. Se o valor máximo for alterado, o fluxo de dados obterá os dados que foram alterados desde a última atualização. Se o valor máximo não for alterado, o fluxo de dados não obterá nenhum dado.

Extrair apenas dados para períodos concluídos

Essa configuração opcional especifica se o fluxo de dados deve extrair apenas dados para períodos concluídos. Se você habilitar essa configuração, o fluxo de dados extrairá apenas dados para períodos concluídos. O fluxo de dados extrai apenas dados para períodos concluídos e que não contêm dados futuros. Se você desabilitar essa configuração, o fluxo de dados extrairá dados para todos os períodos, incluindo períodos que não estão concluídos e contêm dados futuros.

Por exemplo, se você tiver uma coluna DateTime que contenha a data da transação e quiser atualizar apenas meses completos, poderá habilitar essa configuração com o tamanho do bucket de month. O fluxo de dados extrairá apenas dados por meses completos e não extrairá dados por meses incompletos.

Configurações avançadas

Algumas configurações são consideradas avançadas e não são necessárias para a maioria dos cenários.

Exigir que a consulta de atualização incremental seja totalmente dobrada

Essa configuração controla se a consulta de atualização incremental deve "dobrar totalmente". Quando uma consulta é totalmente dobrada, ela é enviada por push inteiramente para o sistema de origem para processamento.

Se você habilitar essa configuração, sua consulta deverá ser totalmente dobrada. Se você desabilitá-la, a consulta poderá ser parcialmente processada pelo fluxo de dados em vez do sistema de origem.

É altamente recomendável manter essa configuração habilitada. Garante que, após salvar o fluxo de dados, validemos se a otimização de consulta para a origem é possível. Se essa validação falhar, o fluxo de dados poderá sofrer com a redução do desempenho e pode acabar recuperando dados desnecessários e não filtrados.

Em alguns casos, você pode ver um indicador de dobra verde durante a edição. No entanto, quando validamos a definição final do fluxo de dados, a dobra pode não ser mais possível; Por exemplo, se uma etapa como Table.SelectRows quebrar a dobra. Isso pode levar a um erro de validação.

Limitations

O suporte ao Lakehouse vem com ressalvas adicionais

Ao trabalhar com o lakehouse como destino de dados, lembre-se dessas limitações:

  • O número máximo de avaliações simultâneas é 10. Isso significa que o fluxo de dados só pode avaliar 10 buckets ao mesmo tempo. Se você tiver mais de 10 buckets, precisará limitar o número de buckets ou limitar o número de avaliações simultâneas. Captura de tela das configurações de controle de simultaneidade do fluxo de dados.

  • Quando você grava em um lakehouse, o fluxo de dados mantém o controle de quais arquivos ele grava. Isso segue as práticas padrão do lakehouse.

    Mas aqui está a pegadinha: se outras ferramentas (como Spark) ou processos também gravarem na mesma tabela, elas poderão interferir na atualização incremental. Recomendamos evitar outros escritores ao usar a atualização incremental.

    Se você precisar usar outros escritores, verifique se eles não entram em conflito com o processo de atualização incremental. Além disso, operações de manutenção de tabelas, como OPTIMIZE ou REORG TABLE, não são suportadas para tabelas que usam atualização incremental.

  • Se você aproveitar um gateway de dados para se conectar às fontes de dados, verifique se o gateway foi atualizado para pelo menos a versão de maio de 2025 atualização (3000.270) ou posterior. Isso é crucial para manter a compatibilidade e garantir que a atualização incremental funcione corretamente com destinos de lakehouse.

  • Não há suporte para alternar de atualização não incremental para incremental com dados sobrepostos existentes no destino. Se o destino do lakehouse já contiver dados para partições que se sobrepõem às partições incrementais definidas nas configurações, o sistema não poderá converter para atualização incremental com segurança sem reescrever a tabela Delta por completo. Recomendamos filtrar a ingestão inicial para incluir apenas dados antes do bucket incremental mais antigo para evitar sobreposição e garantir o comportamento correto de atualização.

O destino de dados deve ser definido como um esquema fixo

O destino de dados deve ser definido como um esquema fixo, o que significa que o esquema da tabela no destino de dados deve ser fixo e não pode ser alterado. Se o esquema da tabela no destino de dados estiver definido como esquema dinâmico, você precisará alterá-lo para o esquema fixo antes de configurar a atualização incremental.

O único método de atualização com suporte no destino de dados é replace

O único método de atualização com suporte no destino de dados é replace, o que significa que o fluxo de dados substitui os dados de cada bucket no destino de dados pelos novos dados. No entanto, os dados fora da faixa de buckets não são afetados. Se você tiver dados no destino de dados mais antigos que o primeiro bucket, a atualização incremental não afetará esses dados.

O número máximo de buckets é 50 para uma única consulta e 150 para todo o fluxo de dados

Cada consulta pode lidar com até 50 buckets. Se você tiver mais de 50 buckets, precisará aumentar o tamanho do bucket ou reduzir o intervalo de tempo para diminuir a contagem.

Para todo o fluxo de dados, o limite é de 150 buckets no total. Se você atingir esse limite, poderá reduzir o número de consultas usando a atualização incremental ou aumentar o tamanho do bucket em suas consultas.

Diferenças entre a atualização incremental no Fluxo de Dados Gen1 e no Fluxo de Dados Gen2

Há algumas diferenças na forma como a atualização incremental funciona entre o Dataflow Gen1 e o Dataflow Gen2. Aqui estão as principais diferenças:

  • Recurso de primeira classe: a atualização incremental agora é um recurso de primeira classe no Dataflow Gen2. No Dataflow Gen1, você configurou a atualização incremental depois de publicar o fluxo de dados. No Dataflow Gen2, você pode configurá-lo diretamente no editor de fluxo de dados. Isso facilita a configuração e reduz o risco de erros.

  • Nenhum intervalo de dados histórico: no Dataflow Gen1, você especificou o intervalo de dados histórico quando configurou a atualização incremental. No Dataflow Gen2, você não especifica esse intervalo. O fluxo de dados não remove nenhum dado do destino que está fora do intervalo de buckets. Se você tiver dados no destino mais antigos que o primeiro bucket, a atualização incremental não o afetará.

  • Parâmetros automáticos: no Dataflow Gen1, você especificou os parâmetros para atualização incremental quando o configurou. No Dataflow Gen2, você não especifica esses parâmetros. O fluxo de dados adiciona automaticamente os filtros e parâmetros como a última etapa na consulta.

perguntas frequentes

Recebi um aviso de que usei a mesma coluna para detectar alterações e filtragem. O que isso significa?

Se você receber esse aviso, isso significa que a coluna especificada para detectar alterações também será usada para filtrar os dados. Não recomendamos isso porque isso pode levar a resultados inesperados.

Em vez disso, use uma coluna diferente para detectar alterações e filtrar os dados. Se os dados forem deslocados entre buckets, o fluxo de dados poderá não detectar as alterações corretamente e pode criar dados duplicados em seu destino.

Você poderá resolver esse aviso usando uma coluna diferente para detectar alterações e filtrar os dados. Ou você poderá ignorar o aviso se tiver certeza de que os dados não são alterados entre as atualizações da coluna especificada.

Quero usar a atualização incremental com um destino de dados que não tem suporte. O que posso fazer?

Se você quiser usar a atualização incremental com um destino de dados que não dá suporte a ele, veja o que você pode fazer:

Habilite a atualização incremental em sua consulta e crie uma segunda consulta que faça referência aos dados em etapas. Em seguida, use essa segunda consulta para atualizar seu destino final. Essa abordagem ainda reduz o processamento de dados do sistema de origem, mas você precisará fazer uma atualização completa dos dados preparados para o destino final.

Certifique-se de configurar a janela e o tamanho do bucket corretamente. Não garantimos que os dados armazenados temporariamente permaneçam disponíveis fora da faixa de intervalo de buckets.

Outra opção é usar o padrão incremental de amass. Confira nosso guia: Acumulação incremental de dados usando o Dataflow Gen2.

Como fazer para saber se minha consulta tem a atualização incremental habilitada?

Você poderá visualizar se a consulta tem a atualização incremental habilitada verificando o ícone ao lado da consulta no editor de fluxo de dados. Se o ícone contiver um triângulo azul, a atualização incremental será habilitada. Se o ícone não contiver um triângulo azul, a atualização incremental não estará habilitada.

Minha fonte recebe muitas solicitações quando uso a atualização incremental. O que posso fazer?

Você pode controlar quantas solicitações seu fluxo de dados envia para o sistema de origem. Aqui está como:

Vá para as configurações globais do seu fluxo de dados e procure a configuração de avaliações paralelas de consultas. Defina isso como um número menor para reduzir as solicitações enviadas ao sistema de origem. Isso ajuda a reduzir a carga na fonte e pode melhorar o desempenho.

Para encontrar essa configuração: vá para as configurações globais, guia >, e defina o número máximo de avaliações de consultas paralelas.

Recomendamos usar esse limite somente se o sistema de origem não puder lidar com o número padrão de solicitações simultâneas.

Captura de tela das configurações de controle de simultaneidade do fluxo de dados.

Quero usar a atualização incremental, mas vejo que, após a habilitação, o fluxo de dados leva mais tempo para ser atualizado. O que posso fazer?

A atualização incremental deve tornar o fluxo de dados mais rápido processando menos dados. Mas às vezes acontece o oposto. Isso geralmente significa que a sobrecarga de gerenciar buckets e verificar se há alterações leva mais tempo do que você economiza processando menos dados.

Veja o que você pode tentar:

Ajuste suas configurações: aumente o tamanho do bucket para reduzir o número de buckets. Menos buckets significam menos sobrecarga para gerenciá-los.

Tente uma atualização completa: se o ajuste das configurações não ajudar, considere desabilitar a atualização incremental. Uma atualização completa pode realmente ser mais eficiente para seu cenário específico.

Próximas etapas