Configurar transferências incrementais para o Snowflake

Este guia mostra como configurar transferências de dados incrementais do Snowflake para o BigQuery. As transferências incrementais permitem transferir apenas os dados que foram alterados desde a última execução da transferência, o que pode reduzir o tempo e os custos de transferência.

Limitações da transferência incremental

As transferências incrementais do Snowflake estão sujeitas às seguintes limitações:

  • É necessário fornecer colunas de chave primária para usar o modo de gravação upsert. Para mais informações, consulte Definir chaves primárias para transferências incrementais .
  • As chaves primárias precisam ser exclusivas na tabela de origem. Se houver duplicatas, os resultados da operação de mesclagem no BigQuery poderão ser inconsistentes e não corresponder aos dados de origem.
  • O tratamento automático de mudanças de esquema com transferências incrementais não é compatível. Se o esquema de uma tabela de origem mudar, atualize manualmente o esquema da tabela do BigQuery.
  • As transferências incrementais funcionam melhor quando as mudanças nos dados de origem estão concentradas em um pequeno número de partições. O desempenho da transferência incremental pode diminuir significativamente se as atualizações estiverem espalhadas pela tabela de origem, porque isso exige a verificação de muitas partições. Se você tiver muitas linhas que foram alteradas entre as transferências de dados, recomendamos usar uma transferência completa.
  • Algumas operações no Snowflake, como CREATE OR REPLACE TABLE ou CLONE, podem substituir o objeto da tabela original e o histórico de acompanhamento de mudanças associado a ele. Isso torna as transferências de dados atuais obsoletas e exige uma nova sincronização completa para retomar as transferências incrementais.
  • As transferências incrementais precisam ser executadas com frequência suficiente para permanecer dentro do período de armazenamento de dados do Snowflake para acompanhamento de mudanças. Se a última transferência bem-sucedida for executada fora dessa janela, a próxima será uma transferência completa.

Comportamento de ingestão de dados

É possível especificar como os dados são carregados no BigQuery selecionando a preferência de gravação Completa ou Incremental na configuração da transferência ao configurar uma transferência do Snowflake. As transferências incrementais são aceitas na versão pré-lançamento.

É possível configurar uma transferência de dados completa para transferir todos os dados dos conjuntos de dados do Snowflake com cada transferência.

Como alternativa, você pode configurar uma transferência de dados incremental (versão pré-lançamento) para transferir apenas os dados que foram alterados desde a última transferência, em vez de carregar todo o conjunto de dados com cada transferência. Se você selecionar Incremental para a transferência de dados, especifique os modos de gravação Adicionar ou Upsert para definir como os dados são gravados no BigQuery durante uma transferência de dados incremental. As seções a seguir descrevem os modos de gravação disponíveis.

Modo de gravação "Adicionar"

O modo de gravação "Adicionar ao final" insere apenas novas linhas na tabela de destino. Essa opção anexa estritamente os dados transferidos sem verificar os registros atuais. Portanto, esse modo pode causar duplicação de dados na tabela de destino.

Ao selecionar o modo de anexação, é necessário selecionar uma coluna de marca-d'água. Uma coluna de marca d'água é necessária para que o conector do Snowflake acompanhe as mudanças na tabela de origem.

Para transferências do Snowflake, recomendamos selecionar uma coluna que só seja atualizada quando o registro for criado e que não mude com atualizações subsequentes. Por exemplo, a coluna CREATED_AT.

Modo de gravação "Upsert"

O modo de gravação upsert atualiza uma linha ou insere uma nova linha na tabela de destino verificando uma chave primária. É possível especificar uma chave primária para permitir que o conector do Snowflake determine quais mudanças são necessárias para manter a tabela de destino atualizada com a tabela de origem. Se a chave primária especificada estiver presente na tabela do BigQuery de destino durante uma transferência de dados, o conector do Snowflake atualizará essa linha com novos dados da tabela de origem. Se uma chave primária não estiver presente durante uma transferência de dados, o conector do Snowflake vai inserir uma nova linha.

Ao selecionar o modo upsert, é necessário selecionar uma coluna de marca d'água e uma chave primária:

  • Uma coluna de marca d'água é necessária para que o conector do Snowflake acompanhe as mudanças na tabela de origem.
    • Selecione uma coluna de marca d'água que seja atualizada sempre que uma linha for modificada. Recomendamos colunas semelhantes à coluna UPDATED_AT ou LAST_MODIFIED.
  • A chave primária pode ser uma ou mais colunas na tabela necessárias para que o conector do Snowflake determine se precisa inserir ou atualizar uma linha.

    Selecione colunas que contenham valores não nulos exclusivos em todas as linhas da tabela. Recomendamos colunas que incluam identificadores gerados pelo sistema, códigos de referência exclusivos (por exemplo, IDs de incremento automático) ou IDs de sequência imutáveis baseados em tempo.

    Para evitar possível perda de dados ou corrupção de dados, as colunas de chave primária selecionadas precisam ter valores exclusivos. Se você tiver dúvidas sobre a exclusividade da coluna de chave primária escolhida, recomendamos usar o modo de gravação "Adicionar".

Para usar o modo de gravação upsert com a transferência de dados incremental, você deve definir as chaves primárias no arquivo de esquema personalizado.

Comportamento de ingestão incremental

Quando você faz mudanças no esquema da tabela na fonte de dados, as transferências de dados incrementais dessas tabelas são refletidas no BigQuery das seguintes maneiras:

Mudanças na fonte de dados Comportamento de ingestão incremental
Adicionar uma nova coluna Uma nova coluna é adicionada à tabela do BigQuery de destino. Todos os registros anteriores dessa coluna terão valores nulos.
Excluir uma coluna A coluna excluída permanece na tabela de destino do BigQuery. Novas entradas nessa coluna excluída são preenchidas com valores nulos.
Mudar o tipo de dados em uma coluna O conector só aceita conversões de tipo de dados que são aceitas pela instrução DDL ALTER COLUMN. Qualquer outra conversão de tipo de dados faz com que a transferência de dados falhe.

Se você encontrar algum problema, recomendamos criar uma nova configuração de transferência.

Renomear uma coluna A coluna original permanece na tabela de destino do BigQuery no estado em que se encontra, enquanto uma nova coluna é adicionada à tabela de destino com o nome atualizado.

Arquivo de esquema personalizado para transferências incrementais

É possível usar um arquivo de esquema personalizado para definir chaves primárias para transferências incrementais e personalizar o mapeamento de esquema. Um arquivo de esquema personalizado é um arquivo JSON que descreve o esquema de origem e de destino.

Para transferências incrementais no modo Upsert, é necessário identificar uma ou mais colunas como chaves primárias. Para fazer isso, anote as colunas com o tipo de uso PRIMARY_KEY no arquivo de esquema personalizado.

O exemplo a seguir mostra um arquivo de esquema personalizado que define O_ORDERKEY e O_ORDERDATE como chaves primárias para a tabela orders:


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

Ativar o acompanhamento de mudanças

Antes de configurar uma transferência incremental do Snowflake, ative o acompanhamento de mudanças em cada tabela de origem com o seguinte comando:

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

Se o acompanhamento de mudanças não estiver ativado para uma tabela, o conector do Snowflake vai usar uma transferência de dados completa para essa tabela.

A seguir

Depois de configurar todas as etapas necessárias para uma transferência incremental do Snowflake, ative as transferências incrementais para a configuração de transferência do Snowflake. Para mais informações, consulte Configurar uma transferência do Snowflake.