Configurare i trasferimenti incrementali per Snowflake
Questa guida mostra come configurare i trasferimenti di dati incrementali da Snowflake a BigQuery. I trasferimenti incrementali ti consentono di trasferire solo i dati che sono stati modificati dall'ultima esecuzione del trasferimento, il che può ridurre i tempi e i costi di trasferimento.
Limitazioni
I trasferimenti incrementali di Snowflake sono soggetti alle seguenti limitazioni:
- Devi fornire le colonne della chiave primaria per utilizzare la modalità di scrittura upsert. Per saperne di più, consulta Definizione delle chiavi primarie per i trasferimenti incrementali.
- Le chiavi primarie devono essere univoche nella tabella di origine. Se esistono duplicati, i risultati dell'operazione di unione in BigQuery potrebbero essere incoerenti e non corrispondere ai dati di origine.
- La gestione automatica delle modifiche dello schema con i trasferimenti incrementali non è supportata. Se lo schema di una tabella di origine cambia, devi aggiornare manualmente lo schema della tabella BigQuery.
- I trasferimenti incrementali funzionano meglio quando le modifiche ai dati di origine sono concentrate in un numero ridotto di partizioni. Il rendimento del trasferimento incrementale può peggiorare in modo significativo se gli aggiornamenti sono sparsi nella tabella di origine, in quanto ciò richiede la scansione di molte partizioni. Se hai molte righe che vengono modificate tra i trasferimenti di dati, ti consigliamo di utilizzare un trasferimento completo.
- Alcune operazioni in Snowflake, come
CREATE OR REPLACE TABLEoCLONE, possono sovrascrivere l'oggetto tabella originale e la relativa cronologia di monitoraggio delle modifiche. In questo modo, i trasferimenti di dati esistenti diventano obsoleti e richiedono una nuova sincronizzazione completa per riprendere i trasferimenti incrementali. - I trasferimenti incrementali devono essere eseguiti con una frequenza sufficiente per rimanere entro il periodo di conservazione dei dati di Snowflake per il monitoraggio delle modifiche. Se l'ultimo trasferimento riuscito viene eseguito al di fuori di questa finestra, il trasferimento successivo sarà un trasferimento completo.
Configura i trasferimenti incrementali
Puoi configurare i trasferimenti incrementali selezionando la preferenza di scrittura Incrementale nella configurazione del trasferimento quando configuri un trasferimento Snowflake.
Se selezioni Incrementale per il trasferimento dei dati, puoi trasferire i dati utilizzando le modalità di scrittura Aggiungi o Upsert, che definiscono come i dati vengono scritti in BigQuery durante un trasferimento incrementale dei dati. Per attivare la modalità di scrittura Upsert, devi definire una chiave primaria in un file di schema personalizzato. Se non è definita alcuna chiave primaria, il trasferimento utilizza la modalità di scrittura Aggiungi per impostazione predefinita. Le sezioni seguenti descrivono le modalità di scrittura disponibili.
Modalità di scrittura di accodamento
La modalità di scrittura di accodamento inserisce solo nuove righe nella tabella di destinazione. Questa opzione scarica rigorosamente solo le nuove righe inserite nella tabella di origine e accoda i dati trasferiti senza verificare la presenza di record esistenti, pertanto questa modalità può potenzialmente causare la duplicazione dei dati nella tabella di destinazione.
Modalità di scrittura upsert
La modalità di scrittura upsert consente di aggiornare, inserire o eliminare record nella tabella di destinazione utilizzando una chiave primaria. Se la chiave primaria specificata è presente nella tabella BigQuery di destinazione, il connettore Snowflake inserisce, aggiorna o elimina correttamente i record per riflettere le modifiche. Se la chiave primaria non è presente nella tabella di destinazione, il connettore inserisce nuovi record per gli inserimenti o gli aggiornamenti dell'origine, mentre le eliminazioni vengono ignorate in questo caso.
Per utilizzare la modalità di scrittura upsert con il trasferimento incrementale dei dati, devi definire le chiavi primarie nel file dello schema personalizzato. Quando scegli una chiave primaria, tieni presente quanto segue:
La chiave primaria può essere una o più colonne della tabella necessarie al connettore per identificare i record da aggiornare.
Seleziona le colonne che contengono valori non nulli univoci in tutte le righe della tabella. Ti consigliamo colonne che includano identificatori generati dal sistema, codici di riferimento univoci (ad esempio ID a incremento automatico) o ID sequenza basati sul tempo immutabili.
Per evitare potenziali perdite di dati o danneggiamenti dei dati, le colonne della chiave primaria che selezioni devono avere valori univoci. Se hai dubbi sull'unicità della colonna della chiave primaria che hai scelto, ti consigliamo di utilizzare la modalità di scrittura Aggiungi o l'importazione completa.
Comportamento delle modifiche allo schema
I trasferimenti incrementali non supportano l'evoluzione dello schema. Qualsiasi modifica allo schema della tabella di origine, ad esempio aggiunta, rimozione o ridenominazione di colonne o modifica dei tipi di dati delle colonne, causa l'esito negativo delle successive esecuzioni del trasferimento incrementale. Se si verifica una modifica dello schema di origine, devi eseguire un trasferimento completo dei dati per risincronizzarli.
File dello schema personalizzato per i trasferimenti incrementali
Puoi utilizzare un file di schema personalizzato per definire le chiavi primarie per i trasferimenti incrementali e per personalizzare il mapping dello schema. Un file di schema personalizzato è un file JSON che descrive lo schema di origine e di destinazione.
Per i trasferimenti incrementali in modalità Upsert, devi identificare una o più colonne come chiavi primarie. Per farlo, annota le colonne con il
tipo di utilizzo PRIMARY_KEY nel file dello schema personalizzato.
L'esempio seguente mostra un file dello schema personalizzato che definisce O_ORDERKEY e
O_ORDERDATE come chiavi primarie per la tabella 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"
]
}
]
}
]
}
]
}
Attivare il monitoraggio delle modifiche
Prima di poter configurare un trasferimento incrementale di Snowflake, devi attivare il monitoraggio delle modifiche su ogni tabella di origine con il seguente comando:
ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;
Se il monitoraggio delle modifiche non è abilitato per una tabella, il connettore Snowflake utilizza per impostazione predefinita un trasferimento completo dei dati per quella tabella.
Passaggi successivi
Dopo aver configurato tutti i passaggi necessari per un trasferimento incrementale di Snowflake, puoi attivare i trasferimenti incrementali per la configurazione del trasferimento di Snowflake. Per saperne di più, vedi Configurare un trasferimento Snowflake.