Configurar transferências incrementais para o Snowflake
Neste guia, mostramos como configurar transferências incrementais de dados do Snowflake para o BigQuery. Com as transferências incrementais, você transfere apenas os dados que foram alterados desde a última execução, o que pode reduzir o tempo e os custos.
Limitações
As transferências incrementais do Snowflake estão sujeitas às seguintes limitações:
- Você precisa 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 processamento automático de mudanças de esquema com transferências incrementais não é compatível. Se o esquema de uma tabela de origem mudar, você precisará atualizar 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 ser muito prejudicado se as atualizações estiverem espalhadas pela tabela de origem, já que isso exige a verificação de muitas partições. Se você tiver muitas linhas que mudam entre as transferências de dados, recomendamos usar uma transferência completa.
- Algumas operações no Snowflake, como
CREATE OR REPLACE TABLEouCLONE, podem substituir o objeto da tabela original e o histórico de rastreamento de mudanças associado. 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 rastreamento de mudanças. Se a última transferência bem-sucedida for executada fora dessa janela, a próxima será completa.
Configurar transferências incrementais
É possível configurar transferências incrementais selecionando a preferência de gravação Incremental na configuração da transferência ao configurar uma transferência do Snowflake.
Se você selecionar Incremental para sua transferência de dados, poderá transferir usando os modos de gravação Adicionar ou Upsert, que definem como os dados são gravados no BigQuery durante uma transferência incremental. Para ativar o modo de gravação Upsert, defina uma chave primária em um arquivo de esquema personalizado. Se nenhuma chave primária for definida, a transferência vai usar o modo de gravação Anexar por padrão. As seções a seguir descrevem os modos de gravação disponíveis.
Modo de gravação de anexação
O modo de gravação por anexação só insere novas linhas na tabela de destino. Essa opção descarrega estritamente apenas as novas linhas inseridas na tabela de origem e anexa os dados transferidos sem verificar os registros existentes. Portanto, esse modo pode causar duplicação de dados na tabela de destino.
Modo de gravação de upsert
O modo de gravação upsert permite atualizar, inserir ou excluir registros na tabela de destino usando uma chave primária. Se a chave primária especificada estiver presente na tabela do BigQuery de destino, o conector do Snowflake vai inserir, atualizar ou excluir registros corretamente para refletir as mudanças. Se a chave primária não estiver presente na tabela de destino, o conector vai inserir novos registros para inserções ou atualizações de origem, e as exclusões serão ignoradas nesse caso.
Para usar o modo de gravação upsert com sua transferência de dados incremental, é necessário definir chaves primárias no arquivo de esquema personalizado. Observe o seguinte ao escolher uma chave primária:
A chave primária pode ser uma ou mais colunas na sua tabela que são necessárias para o conector identificar os registros a serem atualizados.
Selecione colunas que contenham valores não nulos e exclusivos em todas as linhas da tabela. Recomendamos colunas que incluem 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íveis 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 de anexação ou a ingestão completa.
Comportamento das mudanças de esquema
As transferências incrementais não são compatíveis com a evolução do esquema. Qualquer modificação no esquema da tabela de origem, como adicionar, remover ou renomear colunas ou mudar os tipos de dados das colunas, causa falhas nas execuções incrementais de transferência subsequentes. Se ocorrer uma mudança no esquema de origem, execute uma transferência de dados completa para resincronizar os dados.
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. O arquivo de esquema personalizado é um arquivo JSON que descreve os esquemas 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 rastreamento de mudanças
Antes de configurar uma transferência incremental do Snowflake, ative o rastreamento de alterações em cada tabela de origem com o seguinte comando:
ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;
Se o rastreamento de alterações não estiver ativado para uma tabela, o conector do Snowflake vai usar uma transferência de dados completa para essa tabela por padrão.
A seguir
Depois de configurar todas as etapas necessárias para uma transferência incremental do Snowflake, é possível ativar as transferências incrementais na configuração de transferência do Snowflake. Para mais informações, consulte Configurar uma transferência do Snowflake.