Introduzione ai trasferimenti di dati PostgreSQL

Puoi caricare i dati da PostgreSQL a BigQuery utilizzando il connettore BigQuery Data Transfer Service per PostgreSQL. Il connettore supporta istanze PostgreSQL ospitate nel tuo ambiente on-premise, Cloud SQL e altri provider cloud pubblico come Amazon Web Services (AWS) e Microsoft Azure. Questo documento fornisce una panoramica delle opzioni di importazione dati per il trasferimento di PostgreSQL e informazioni sulla mappatura dei tipi di dati e sui prezzi.

Per scoprire come pianificare un trasferimento PostgreSQL, consulta Carica i dati PostgreSQL in BigQuery.

Opzioni di acquisizione dei dati

Le sezioni seguenti forniscono informazioni sulle opzioni di importazione dati quando configuri un trasferimento di dati PostgreSQL.

Configurazione TLS

Il connettore PostgreSQL supporta la configurazione per Transport Level Security (TLS) per criptare i trasferimenti di dati in BigQuery. Il connettore PostgreSQL supporta le seguenti configurazioni TLS:

  • La modalità Crittografa i dati e verifica la CA e il nome host. Questa modalità esegue una convalida completa del server utilizzando TLS tramite il protocollo TCPS. Crittografa tutti i dati in transito e verifica che il certificato del server di database sia firmato da un'autorità di certificazione (CA) attendibile. Questa modalità verifica anche che il nome host a cui ti connetti corrisponda esattamente al nome comune (CN) o a un nome alternativo del soggetto (SAN) nel certificato del server. Questa modalità impedisce agli autori degli attacchi di utilizzare un certificato valido per un dominio diverso per impersonare il tuo server di database.

    Se il nome host non corrisponde al CN o al SAN del certificato, la connessione non va a buon fine. Devi configurare una risoluzione DNS in modo che corrisponda al certificato o utilizzare una modalità di sicurezza diversa. Utilizza questa modalità per l'opzione più sicura per prevenire gli attacchi person-in-the-middle (PITM).

  • La modalità Crittografa i dati e verifica solo la CA. Questa modalità cripta tutti i dati utilizzando TLS tramite il protocollo TCPS e verifica che il certificato del server sia firmato da una CA considerata attendibile dal client. Tuttavia, questa modalità non verifica il nome host del server. Questa modalità si connette correttamente finché il certificato è valido e rilasciato da un'autorità di certificazione attendibile, indipendentemente dal fatto che il nome host nel certificato corrisponda al nome host a cui ti stai connettendo.

    Utilizza questa modalità se vuoi assicurarti di connetterti a un server il cui certificato è firmato da una CA attendibile, ma il nome host non è verificabile o non hai il controllo sulla configurazione del nome host.

  • La modalità Solo crittografia. Questa modalità cripta tutti i dati trasferiti tra il client e il server. Non esegue alcuna convalida di certificati o nomi host.

    Questa modalità fornisce un certo livello di sicurezza proteggendo i dati in transito, ma può essere vulnerabile agli attacchi PITM.

    Utilizza questa modalità se devi assicurarti che tutti i dati siano criptati, ma non puoi o non vuoi verificare l'identità del server. Ti consigliamo di utilizzare questa modalità quando lavori con VPC privati.

  • La modalità Nessuna crittografia o verifica. Questa modalità non cripta i dati e non esegue alcuna verifica del certificato o del nome host. Tutti i dati vengono inviati come testo normale.

    Sconsigliamo di utilizzare questa modalità in un ambiente in cui vengono gestiti dati sensibili. Consigliamo di utilizzare questa modalità solo a scopo di test su una rete isolata in cui la sicurezza non è un problema.

Certificato server attendibile (PEM)

Se utilizzi la modalità Crittografa i dati e verifica la CA e il nome host o la modalità Crittografa i dati e verifica la CA, puoi fornire anche uno o più certificati codificati in formato PEM. Questi certificati sono obbligatori in alcuni scenari in cui BigQuery Data Transfer Service deve verificare l'identità del server del database durante la connessione TLS:

  • Se utilizzi un certificato firmato da una CA privata all'interno della tua organizzazione o un certificato autofirmato, devi fornire la catena di certificati completa o il singolo certificato autofirmato. Questo è necessario per i certificati emessi dalle CA interne dei servizi di provider di cloud gestiti, come Amazon Relational Database Service (RDS).
  • Se il certificato del server di database è firmato da una CA pubblica (ad esempio, Let's Encrypt, DigiCert o GlobalSign), non devi fornire un certificato. I certificati radice di queste CA pubbliche sono preinstallati e considerati attendibili da BigQuery Data Transfer Service.

Puoi specificare i certificati con codifica PEM nel campo Certificato PEM attendibile della configurazione del trasferimento, con i seguenti requisiti:

  • Il certificato deve essere una catena di certificati validi con codifica PEM.
  • Il certificato deve essere completamente corretto. Eventuali certificati mancanti nella catena o contenuti errati causano l'errore della connessione TLS.
  • Per un singolo certificato, puoi fornire un singolo certificato autofirmato dal server del database.
  • Per una catena di certificati completa emessa da una CA privata, devi fornire la catena di attendibilità completa. Sono inclusi il certificato del server di database e tutti i certificati CA intermedi e radice.

Trasferimenti completi o incrementali

Puoi specificare come vengono caricati i dati in BigQuery selezionando la preferenza di scrittura Completa o Incrementale nella configurazione del trasferimento quando configuri un trasferimento PostgreSQL.

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

In alternativa, puoi configurare un trasferimento dei dati incrementale 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 Aggiungi o Esegui upsert per definire il modo in cui i dati vengono scritti in BigQuery durante un trasferimento di dati incrementale. Le sezioni seguenti descrivono le modalità di scrittura disponibili.

Modalità di scrittura Append

La modalità di scrittura Aggiungi 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 il connettore PostgreSQL è necessaria una colonna watermark per monitorare le modifiche nella tabella di origine.

Per i trasferimenti PostgreSQL, 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 PostgreSQL di determinare le modifiche necessarie per mantenere la tabella di destinazione aggiornata con la tabella di origine. Se la chiave primaria specificata è presente nella tabella BigQuery di destinazione durante un trasferimento di dati, il connettore PostgreSQL aggiorna la riga con i nuovi dati della tabella di origine. Se una chiave primaria non è presente durante un trasferimento di dati, il connettore PostgreSQL inserisce una nuova riga.

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

  • Per monitorare le modifiche nella tabella di origine, il connettore PostgreSQL richiede una colonna con watermark.
    • Seleziona una colonna filigrana che si aggiorna ogni volta che una riga viene modificata. Ti consigliamo colonne simili a UPDATED_AT o LAST_MODIFIED.
  • La chiave primaria può essere una o più colonne della tabella necessarie al connettore PostgreSQL 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 di utilizzare colonne che includono identificatori generati dal sistema, codici di riferimento univoci (ad esempio ID con incremento automatico) o ID di sequenza immutabili basati sul tempo.

    Per evitare potenziali perdite 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 scelta, ti consigliamo di utilizzare la modalità di scrittura Aggiungi.

Comportamento di importazione incrementale

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

Modifiche all'origine dati Comportamento di importazione incrementale
Aggiunta di una nuova colonna Viene aggiunta una nuova colonna alla tabella BigQuery di destinazione. Tutti i record precedenti per questa colonna avranno valori null.
Eliminazione di una colonna La colonna eliminata rimane nella tabella BigQuery di destinazione. Le nuove voci di questa colonna eliminata vengono compilate con valori null.
Modifica del tipo di dati di una colonna Il connettore supporta solo le conversioni del tipo 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 di trasferimento.

Rinomina 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.

Mappatura dei tipi di dati

La tabella seguente mappa i tipi di dati PostgreSQL ai tipi di dati BigQuery corrispondenti:

Tipo di dati PostgreSQL Tipo di dati BigQuery Tipo di dati BigQuery aggiornato
array STRING
bigint INTEGER
bigserial INTEGER
bit(n) STRING
bit varying(n) STRING
boolean BOOLEAN
box STRING
bytea BYTES
character STRING
character varying STRING
cidr STRING
circle STRING
circularstring STRING
compoundcurve STRING
curvepolygon STRING
date DATE
double precision FLOAT
enum STRING
geometrycollection STRING
inet STRING
integer INTEGER
interval STRING
json STRING JSON
jsonb STRING JSON
line STRING
linestring STRING
lseg STRING
macaddr STRING
macaddr8 STRING
money STRING
multicurve STRING
multilinestring STRING
multipoint STRING
multipolygon STRING
multisurface STRING
numeric(precision, scale)/decimal(precision, scale) NUMERIC
path STRING
point STRING
polygon STRING
polyhedralsurface STRING
range STRING
real FLOAT
serial INTEGER
smallint INTEGER
smallserial INTEGER
text STRING
time [ (p) ] [ without timezone ] TIMESTAMP
time [ (p) ] with time zone TIMESTAMP
tin STRING
timestamp [ (p) ] [ without timezone ] TIMESTAMP DATETIME
timestamp [ (p) ] with time zone TIMESTAMP
triangle STRING
tsquery STRING
tsvector STRING
uuid STRING
xml STRING

Prezzi

Per informazioni sui prezzi dei trasferimenti PostgreSQL, consulta Prezzi di Data Transfer Service.

Passaggi successivi