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 del trasferimento incrementale

I trasferimenti incrementali di Snowflake sono soggetti alle seguenti limitazioni:

  • Per utilizzare la modalità di scrittura upsert, devi fornire le colonne della chiave primaria. 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 TABLE o CLONE, 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.

Comportamento dell'importazione dati

Puoi specificare come caricare i dati in BigQuery selezionando l'opzione di scrittura Completa o Incrementale nella configurazione del trasferimento quando configuri un trasferimento Snowflake. I trasferimenti incrementali sono supportati in anteprima.

Puoi configurare un trasferimento di dati completo per trasferire tutti i dati dai tuoi set di dati Snowflake a ogni trasferimento di dati.

In alternativa, puoi configurare un trasferimento dei dati incrementale (anteprima) per trasferire solo i dati modificati dall'ultimo trasferimento, anziché caricare l'intero set di dati a ogni trasferimento. Se selezioni Incrementale per il trasferimento dei dati, devi specificare le modalità di scrittura Accoda o Upsert per definire come i dati vengono scritti in BigQuery durante un trasferimento incrementale dei dati. 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 aggiunge rigorosamente i dati trasferiti senza verificare la presenza di record esistenti, pertanto questa modalità può potenzialmente causare la duplicazione dei dati nella tabella di destinazione.

Quando selezioni la modalità di aggiunta, devi selezionare una colonna watermark. Per consentire al connettore Snowflake di monitorare le modifiche nella tabella di origine, è necessaria una colonna filigrana.

Per i trasferimenti Snowflake, ti consigliamo di selezionare una colonna che viene aggiornata solo quando è stato creato il record e non cambia con gli aggiornamenti successivi. Ad esempio, la colonna CREATED_AT.

Modalità di scrittura upsert

La modalità di scrittura upsert aggiorna una riga o ne inserisce una nuova nella tabella di destinazione controllando una chiave primaria. Puoi specificare una chiave primaria per consentire al connettore Snowflake di determinare le modifiche necessarie per mantenere la tabella di destinazione aggiornata con la tabella di origine. Se la chiave primariaa specificata è presente nella tabella BigQuery di destinazione durante un trasferimento di dati, il connettore Snowflake aggiorna la riga con i nuovi dati della tabella di origine. Se una chiave primaria non è presente durante un trasferimento di dati, il connettore Snowflake inserisce una nuova riga.

Quando selezioni la modalità di upsert, devi selezionare una colonna watermark e una chiave primaria:

  • Per consentire al connettore Snowflake di monitorare le modifiche nella tabella di origine, è necessaria una colonna filigrana.
    • Seleziona una colonna filigrana che si aggiorna ogni volta che una riga viene modificata. Ti consigliamo colonne simili a quelle UPDATED_AT o LAST_MODIFIED.
  • La chiave primaria può essere una o più colonne della tabella necessarie al connettore Snowflake per determinare se deve inserire o aggiornare una riga.

    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.

Per utilizzare la modalità di scrittura upsert con il trasferimento incrementale dei dati, devi definire le chiavi primarie nel file dello schema personalizzato.

Comportamento di importazione incrementale

Quando apporti modifiche allo schema della tabella nell'origine dati, i trasferimenti incrementali dei dati da queste tabelle vengono visualizzati in BigQuery nei seguenti modi:

Modifiche all'origine dati Comportamento di importazione incrementale
Aggiungere una nuova colonna Viene aggiunta una nuova colonna alla tabella BigQuery di destinazione. Tutti i record precedenti per questa colonna avranno valori null.
Eliminare una colonna La colonna eliminata rimane nella tabella BigQuery di destinazione. Le nuove voci di questa colonna eliminata vengono popolate con valori null.
Modificare il tipo di dati in una colonna Il connettore supporta solo le conversioni dei tipi di dati supportate dall'istruzione DDL ALTER COLUMN. Qualsiasi altra conversione del tipo di dati causa il mancato trasferimento dei dati.

In caso di problemi, ti consigliamo di creare una nuova configurazione del trasferimento.

Ridenominazione di una colonna La colonna originale rimane nella tabella BigQuery di destinazione così com'è, mentre alla tabella di destinazione viene aggiunta una nuova colonna con il nome aggiornato.

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.