Usar a atualização incremental com fluxos de dados

Com fluxos de dados, você pode trazer grandes quantidades de dados para o Power BI ou o armazenamento fornecido pela sua organização. Mas, em alguns casos, não é prático atualizar uma cópia completa de dados de origem em cada atualização. Uma ótima alternativa é a atualização incremental, que traz os seguintes benefícios para fluxos de dados:

  • A atualização ocorre com mais rapidez: somente os dados alterados precisam ser atualizados. Por exemplo, atualize apenas os últimos cinco dias de um fluxo de dados de 10 anos.
  • A atualização é mais confiável: por exemplo, não é necessário manter conexões de execução prolongada com sistemas de origem voláteis.
  • O consumo de recursos é reduzido: uma quantidade menor de dados para atualização reduz o consumo geral da memória e de outros recursos.

A atualização incremental está disponível em fluxos de dados criados no Power BI e fluxos de dados criados no Power Apps. Este artigo mostra as telas do Power BI, mas essas instruções se aplicam aos fluxos de dados criados no Power BI ou no Power Apps.

Observação

Quando o esquema de uma tabela em um fluxo de dados analítico é alterado, uma atualização completa ocorre para garantir que todos os dados resultantes correspondam ao novo esquema. Como resultado, todos os dados armazenados de modo incremental são atualizados e, em alguns casos, se o sistema de origem não reter dados históricos, serão perdidos.

Incremental refresh for dataflows.

O uso da atualização incremental em fluxos de dados criados no Power BI requer que o fluxo de dados resida em um workspace na capacidade Premium. A atualização incremental no Power Apps exige planos do Power Apps por aplicativo ou por usuário; ela só está disponível para fluxos de dados com o Azure Data Lake Storage como destino.

No Power BI ou no Power Apps, o uso da atualização incremental requer que os dados de origem ingeridos no fluxo de dados tenham um campo DateTime no qual a atualização incremental possa filtrar.

Configurar a atualização incremental para fluxos de dados

Um fluxo de dados pode conter muitas tabelas. A atualização incremental é configurada em nível da tabela, permitindo a um fluxo de dados manter tabelas totalmente atualizadas e tabelas atualizadas de forma incremental.

Para configurar uma tabela atualizada incrementalmente, comece configurando a tabela como faria com outra tabela.

Depois que o fluxo de dados for criado e salvo, selecione Atualização incrementalIncremental refresh. na exibição de tabela, conforme mostrado na imagem a seguir.

Incremental refresh icon for dataflows.

Ao selecionar o ícone, surgirá a janela Configurações da atualização incremental. Ative a atualização incremental.

Incremental refresh for dataflows.

A lista a seguir explica as configurações na janela Configurações de atualização incremental.

  • Ativação/desativação da atualização incremental: ativa ou desativa a política de atualização incremental da tabela.

  • Lista suspensa do campo Filtrar: seleciona o campo de consulta em que a tabela deve ser filtrada para incrementos. Este campo contém apenas os campos DateTime. Não será possível usar a atualização incremental se a tabela não contiver um campo DateTime.

  • Armazenar/atualizar linhas do passado: o exemplo na imagem anterior ilustra essas configurações a seguir.

    Neste exemplo, definimos uma política de atualização para armazenar cinco anos de dados no total e atualizar incrementalmente 10 dias de dados. Supondo que ocorra uma atualização diária da tabela, as seguintes ações são executadas para cada operação de atualização:

    • Adicione um novo dia de dados.

    • Atualizar 10 dias até a data atual.

    • Remover os anos civis com mais de cinco anos antes da data atual. Por exemplo, se a data atual for 1º de janeiro de 2019, o ano de 2013 será removido.

    A primeira atualização do fluxo de dados poderá demorar para importar todos os cinco anos, mas é provável que as atualizações subsequentes sejam concluídas muito mais rapidamente.

  • Detectar alterações de dados: uma atualização incremental de dez dias é muito mais eficiente do que uma atualização completa de cinco anos, mas talvez possamos fazer ainda mais. Ao marcar a caixa de seleção Detectar alterações nos dados, será possível selecionar uma coluna de data/hora para identificar e atualizar somente os dias em que os dados foram alterados. Isso pressupõe que essa coluna exista no sistema de origem, em geral para fins de auditoria. O valor máximo dessa coluna é avaliado para cada um dos períodos no intervalo incremental. Se esses dados não foram alterados desde a última atualização, não será necessário atualizar o período. No exemplo, isso poderia reduzir ainda mais os dias atualizados incrementalmente de 10 para, talvez, 2.

    Dica

    O design atual requer que a coluna usada para detectar as alterações nos dados seja mantida e fique armazenada em cache na memória. É interessante considerar uma das técnicas a seguir para reduzir a cardinalidade e o consumo de memória:

    • Mantenha apenas o valor máximo dessa coluna no momento da atualização, talvez usando uma função do Power Query.
    • Reduza a precisão a um nível aceitável, considerando seus requisitos de frequência de atualização.
  • Atualizar somente períodos completos: imagine que a atualização esteja agendada para execução todo dia às 4h. Caso apareçam dados no sistema de origem durante as primeiras quatro horas desse dia, talvez não seja necessário considerá-los. Não é muito prático nem faz muito sentido considerar algumas métricas comerciais com base em dias parciais, como barris de petróleo por dia no setor de petróleo e gás.

    Outro exemplo em que convém apenas atualizar períodos completos é a atualização de dados de um sistema financeiro. Imagine um sistema financeiro em que dados do mês anterior sejam aprovados no 12º dia corrido do mês. Você pode definir o intervalo incremental para um mês e agendar a atualização para ser executada no dia 12 do mês. Com essa opção marcada, o sistema atualizará dos dados de janeiro (o período mensal completo mais recente) em 12 de fevereiro.

Observação

A atualização incremental do fluxo de dados determina as datas de acordo com a seguinte lógica: se uma atualização estiver agendada, a atualização incremental dos fluxos de dados usará o fuso horário definido na política de atualização. Se não existir qualquer cronograma de atualização, a atualização incremental usará a hora do computador que executa a atualização.

Depois que a atualização incremental é configurada, o fluxo de dados altera automaticamente a consulta para incluir a filtragem por data. Se o fluxo de dados tiver sido criado no Power BI, você também poderá editar a consulta gerada automaticamente usando o editor avançado no Power Query para ajustar ou personalizar a atualização. Leia mais sobre a atualização incremental e seu funcionamento na próxima seção.

Atualização incremental e tabelas vinculadas x tabelas computadas

Para tabelas vinculadas, a atualização incremental atualiza a tabela de origem. Como as tabelas vinculadas são um simples ponteiro para a tabela original, a atualização incremental não afeta a tabela vinculada. Quando a tabela de origem é atualizada conforme a política de atualização definida, qualquer tabela vinculada deve pressupor que os dados na origem são atualizados.

As tabelas computadas se baseiam em consultas executadas em um armazenamento de dados, que pode ser outro fluxo de dados. Dessa forma, o comportamento de tabelas computadas é igual ao de tabelas vinculadas.

Como tabelas computadas e tabelas vinculadas se comportam de forma semelhante, os requisitos e as etapas de configuração são equivalentes para ambos. Uma distinção é que, para tabelas computadas, em certas configurações, a atualização incremental não pode ser executada de forma otimizada devido à forma como as partições são criadas.

Alterar entre atualização incremental e completa

Os fluxos de dados são compatíveis com a alteração da política de atualização entre a atualização incremental e a completa. Quando ocorre uma alteração em qualquer direção (de completa para incremental ou de incremental para completa), a alteração afeta o fluxo de dados após a atualização seguinte.

Ao mover um fluxo de dados de uma atualização completa para uma incremental, a nova lógica de atualização atualiza o fluxo de dados adotando a janela de atualização e faz a incrementação conforme definido nas configurações de atualização incremental.

Ao mover um fluxo de dados de uma atualização incremental para completa, todos os dados acumulados na atualização incremental são substituídos pela política definida na atualização completa. Você deve aprovar esta ação.

Suporte a fuso horário na atualização incremental

A atualização incremental do fluxo de dados depende do horário em que é executada. A filtragem da consulta depende do dia em que é executada.

Para acomodar essas dependências e garantir a consistência de dados, a atualização incremental para fluxos de dados implementa a seguinte heurística para cenários de atualizar agora:

  • No caso em que uma atualização agendada é definida no sistema, a atualização incremental usa as configurações de fuso horário da seção da atualização agendada. Isso garante que, independentemente do fuso horário em que se encontra a pessoa que está atualizando o fluxo de dados, ele será sempre consistente com a definição do sistema.

  • Se nenhuma atualização agendada estiver definida, os fluxos de dados usarão o fuso horário do computador do usuário que está executando a atualização.

A atualização incremental também pode ser invocada por APIs. Nesse caso, a chamada à API pode ter uma configuração de fuso horário que é usada na atualização. O uso de APIs pode ser útil para fins de teste e validação.

Detalhes da implementação de atualização incremental

Os fluxos de dados usam particionamento para atualização incremental. A atualização incremental nos fluxos de dados mantém o número mínimo de partições para atender aos requisitos da política de atualização. As partições antigas que saem do intervalo são descartadas, mantendo uma janela rolante. As partições são mescladas de maneira oportuna, reduzindo o número total de partições necessárias. Isso melhora a compactação e, em alguns casos, pode melhorar o desempenho da consulta.

Os exemplos nesta seção compartilham a seguinte política de atualização:

  • Armazenar linhas no último 1º trimestre
  • Atualizar linhas nos últimos 10 Dias
  • Detectar alterações de dados = Falso
  • Somente atualizar dias completos = Verdadeiro

Mesclar partições

Neste exemplo, as partições de dia são mescladas automaticamente com o nível do mês depois de extrapolarem o intervalo incremental. As partições no intervalo incremental precisam ser mantidas na granularidade diária para permitir atualizar apenas esses dias. A operação de atualização com Data de Execução em 12/11/2016 mescla os dias em novembro porque eles estão fora do intervalo incremental.

Merge partitions in dataflows.

Remover partições antigas

As partições antigas fora do intervalo total são removidas. A operação de atualização com Data da Execução 2/1/2017 descarta a partição do T3 de 2016 por ficar fora do intervalo total.

Drop old partitions in dataflows.

Recuperação de falha prolongada

Este exemplo simula como o sistema se recupera normalmente de uma falha prolongada. Digamos que a atualização não seja executada com êxito porque as credenciais da fonte de dados expiraram e o problema leva 13 dias para ser resolvido. O intervalo incremental é de apenas 10 dias.

A próxima operação de atualização com êxito, com Data de Execução em 15/01/2017, precisa preencher os 13 dias faltando e atualizá-los. Ela também precisa atualizar os nove dias anteriores porque eles não foram atualizados de acordo com o cronograma normal. Em outras palavras, o intervalo incremental aumenta de 10 para 22 dias.

A operação de atualização seguinte, com Data da Execução 16/1/2017, aproveita a oportunidade para mesclar os dias de dezembro e os meses do T4 de 2016.

Recovery from prolonged failure in dataflows.

Atualização incremental de fluxo de dados e conjuntos de dados

As atualizações incrementais do fluxo de dados e do conjunto de dados são projetadas para atuar juntas. É aceitável e compatível ter uma tabela de atualização incremental em um fluxo de dados, totalmente carregada em um conjunto de dados, ou uma tabela totalmente carregada em um fluxo de dados carregado de forma incremental em um conjunto de dados.

Ambas as abordagens funcionam de acordo com as definições especificadas por você nas configurações de atualização. Mais informações: Atualização incremental no Power BI Premium

Confira também

Este artigo descreveu a atualização incremental para fluxos de dados. Confira outros artigos que podem ser úteis:

Para obter mais informações sobre Power Query e atualização agendada, você pode ler esses artigos:

Para obter mais informações sobre o Common Data Model, leia este artigo com uma visão geral: