Caricare dati PostgreSQL in BigQuery

Puoi caricare i dati da PostgreSQL a BigQuery utilizzando il connettore BigQuery Data Transfer Service per PostgreSQL. Il connettore supporta le istanze PostgreSQL ospitate nel tuo ambiente on-premise, Cloud SQL e altri providecloud pubblicoci come Amazon Web Services (AWS) e Microsoft Azure. Con BigQuery Data Transfer Service, puoi pianificare job di trasferimento ricorrenti che aggiungono i dati più recenti da PostgreSQL a BigQuery.

Limitazioni

I trasferimenti di dati PostgreSQL sono soggetti alle seguenti limitazioni:

  • Il numero massimo di esecuzioni di trasferimento simultanee a un singolo database PostgreSQL è determinato dal numero massimo di connessioni simultanee supportate dal database PostgreSQL. Il numero di job di trasferimento simultanei deve essere limitato a un valore inferiore al numero massimo di connessioni simultanee supportate dal database PostgreSQL.
  • Una singola configurazione di trasferimento può supportare una sola esecuzione di trasferimento dei dati in un determinato momento. Nel caso in cui sia pianificato l'esecuzione di un secondo trasferimento di dati prima del completamento del primo, solo il primo trasferimento di dati viene completato, mentre gli altri trasferimenti di dati che si sovrappongono al primo vengono ignorati.
    • Per evitare trasferimenti ignorati all'interno di una singola configurazione di trasferimento, ti consigliamo di aumentare la durata di tempo tra i trasferimenti di grandi quantità di dati configurando la Frequenza di ripetizione.

Opzioni di importazione 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 della sicurezza a livello di trasporto (TLS) per criptare i trasferimenti di dati in BigQuery. Il connettore PostgreSQL supporta le seguenti configurazioni TLS:

  • Cripta i dati e verifica la CA e il nome host: questa modalità esegue una convalida completa del server utilizzando TLS sul protocollo TCPS. Cripta 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) del certificato del server. Questa modalità impedisce agli autori di 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 man-in-the-middle (MITM).
  • Cripta i dati e verifica solo la CA: questa modalità cripta tutti i dati utilizzando TLS sul protocollo TCPS e verifica che il certificato del server sia firmato da una CA di cui il client si fida. Tuttavia, questa modalità non verifica il nome host del server. Questa modalità si connette correttamente purché il certificato sia 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.
  • 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à offre 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.
  • Nessuna crittografia o verifica: questa modalità non cripta alcun dato e non esegue alcuna verifica di certificati o nomi host. Tutti i dati vengono inviati come testo normale.
    • Non consigliamo di utilizzare questa modalità in un ambiente in cui vengono gestiti dati sensibili.
    • Consigliamo di utilizzare questa modalità solo per scopi di test su una rete isolata in cui la sicurezza non è un problema.

Certificato del server attendibile (PEM)

Se utilizzi la modalità Cripta i dati e verifica CA e nome host o la modalità Cripta i dati e verifica CA, puoi anche fornire uno o più certificati codificati in formato PEM. Questi certificati sono necessari in alcuni scenari in cui BigQuery Data Transfer Service deve verificare l'identità del server di 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 da CA interne di 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 per queste CA pubbliche sono preinstallati e considerati attendibili da BigQuery Data Transfer Service.

Puoi fornire certificati con codifica PEM nel campo Certificato PEM attendibile quando crei una configurazione di trasferimento PostgreSQL, con i seguenti requisiti:

  • Il certificato deve essere una catena di certificati con codifica PEM valida.
  • Il certificato deve essere completamente corretto. Eventuali certificati mancanti nella catena o contenuti errati causano l'interruzione della connessione TLS.
  • Per un singolo certificato, puoi fornire un certificato autofirmato singolo dal server di 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.

Prima di iniziare

Ruoli obbligatori

Se intendi configurare le notifiche di esecuzione del trasferimento per Pub/Sub, assicurati di disporre dell'autorizzazione pubsub.topics.setIamPolicy Identity and Access Management (IAM). Le autorizzazioni Pub/Sub non sono necessarie se configuri solo le notifiche via email. Per saperne di più, consulta Notifiche di esecuzione di BigQuery Data Transfer Service.

Per ottenere le autorizzazioni necessarie per creare un trasferimento di dati BigQuery Data Transfer Service, chiedi all'amministratore di concederti il ruolo IAM Amministratore BigQuery (roles/bigquery.admin) nel tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare un trasferimento di dati BigQuery Data Transfer Service. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare un trasferimento di dati di BigQuery Data Transfer Service sono necessarie le seguenti autorizzazioni:

  • Autorizzazioni BigQuery Data Transfer Service:
    • bigquery.transfers.update
    • bigquery.transfers.get
  • Autorizzazioni BigQuery:
    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy
    • bigquery.jobs.create

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Per maggiori informazioni, vedi Concedere l'accesso a bigquery.admin.

Connessioni di rete

Se non è disponibile un indirizzo IP pubblico per la connessione al database PostgreSQL, devi configurare un collegamento di rete.

Per istruzioni dettagliate sulla configurazione di rete richiesta, consulta i seguenti documenti:

Configura un trasferimento di dati PostgreSQL

Aggiungi i dati PostgreSQL a BigQuery configurando un trasferimento utilizzando una delle seguenti opzioni:

Console

  1. Vai alla pagina Trasferimenti di dati.

    Vai a Trasferimenti dati

  2. Fai clic su Crea trasferimento.

  3. Nella sezione Tipo di origine, per Origine, seleziona PostgreSQL.

  4. Nella sezione Nome configurazione di trasferimento, per Nome visualizzato, inserisci un nome per il trasferimento. Il nome del trasferimento può essere qualsiasi valore che ti consenta di identificare il trasferimento se devi modificarlo in un secondo momento.

  5. Nella sezione Opzioni di pianificazione, segui questi passaggi:

    • Seleziona una frequenza di ripetizione. Se selezioni l'opzione Ore, Giorni (impostazione predefinita), Settimane o Mesi, devi anche specificare una frequenza. Puoi anche selezionare l'opzione Personalizzata per creare una frequenza di ripetizione più specifica. Se selezioni l'opzione On demand, questo trasferimento di dati viene eseguito solo quando attivi manualmente il trasferimento.
    • Se applicabile, seleziona l'opzione Inizia ora o Inizia all'ora impostata e fornisci una data di inizio e un'ora di esecuzione.
  6. Nella sezione Impostazioni destinazione, per Set di dati, seleziona il set di dati che hai creato per archiviare i dati oppure fai clic su Crea nuovo set di dati e creane uno da utilizzare come set di dati di destinazione.

  7. Nella sezione Dettagli origine dati, segui questi passaggi:

    • Per Collegamento di rete, seleziona un collegamento di rete esistente o fai clic su Crea collegamento di rete. Per saperne di più, consulta la sezione Connessioni di rete di questo documento.
    • In Host, inserisci il nome host o l'indirizzo IP del server di database PostgreSQL.
    • In Numero porta, inserisci il numero di porta del server di database PostgreSQL.
    • In Nome database, inserisci il nome del database PostgreSQL.
    • Per Nome utente, inserisci il nome utente dell'utente PostgreSQL che avvia la connessione al database PostgreSQL.
    • In Password, inserisci la password dell'utente PostgreSQL che avvia la connessione al database PostgreSQL.
    • Per Modalità TLS, seleziona un'opzione dal menu. Per scoprire di più sulle modalità TLS, consulta Configurazione TLS.
    • Per Certificato PEM attendibile, inserisci il certificato pubblico dell'autorità di certificazione (CA) che ha emesso il certificato TLS del server di database. Per scoprire di più, vedi Certificato del server attendibile (PEM).
    • Per Oggetti PostgreSQL da trasferire, esegui una delle seguenti operazioni:

      • Fai clic su Sfoglia per selezionare le tabelle PostgreSQL necessarie per il trasferimento, quindi fai clic su Seleziona.
      • Inserisci manualmente i nomi delle tabelle negli oggetti PostgreSQL da trasferire.
  8. (Facoltativo) Nella sezione Opzioni di notifica, segui questi passaggi:

    • Per attivare le notifiche via email, fai clic sul pulsante di attivazione/disattivazione Notifiche via email. Quando attivi questa opzione, l'amministratore del trasferimento riceve una notifica via email quando l'esecuzione di un trasferimento non riesce.
    • Per configurare le notifiche di esecuzione di Pub/Sub per il trasferimento, fai clic sul pulsante di attivazione/disattivazione Notifiche Pub/Sub per attivarlo. Puoi selezionare il nome del tuo argomento o fare clic su Crea un argomento per crearne uno.
  9. Fai clic su Salva.

bq

Inserisci il comando bq mk e fornisci il flag di creazione del trasferimento --transfer_config:

bq mk
    --transfer_config
    --project_id=PROJECT_ID
    --data_source=DATA_SOURCE
    --display_name=DISPLAY_NAME
    --target_dataset=DATASET
    --params='PARAMETERS'

Sostituisci quanto segue:

  • PROJECT_ID (facoltativo): l'ID progetto Google Cloud . Se non viene fornito il flag --project_id per specificare un progetto particolare, viene utilizzato il progetto predefinito.
  • DATA_SOURCE: l'origine dati, ovvero postgresql.
  • DISPLAY_NAME: il nome visualizzato per la configurazione del trasferimento dei dati. Il nome del trasferimento può essere qualsiasi valore che ti consenta di identificare il trasferimento se devi modificarlo in un secondo momento.
  • DATASET: il set di dati di destinazione per la configurazione del trasferimento dei dati.
  • PARAMETERS: i parametri per la configurazione del trasferimento creato in formato JSON. Ad esempio: --params='{"param":"param_value"}'. Di seguito sono riportati i parametri per un trasferimento PostgreSQL:

    • connector.networkAttachment (facoltativo): il nome dell'allegato di rete a cui connettersi al database PostgreSQL.
    • connector.database: il nome del database PostgreSQL.
    • connector.endpoint.host: il nome host o l'indirizzo IP del database.
    • connector.endpoint.port: il numero di porta del database.
    • connector.authentication.username: il nome utente dell'utente del database.
    • connector.authentication.password: la password dell'utente del database.
    • connector.tls.mode: specifica una configurazione TLS da utilizzare con questo trasferimento:
      • ENCRYPT_VERIFY_CA_AND_HOST per criptare i dati e verificare la CA e il nome host
      • ENCRYPT_VERIFY_CA per criptare i dati e verificare solo la CA
      • ENCRYPT_VERIFY_NONE solo per la crittografia dei dati
      • DISABLE per nessuna crittografia o verifica
    • connector.tls.trustedServerCertificate: (facoltativo) fornisci uno o più certificati codificati PEM. Obbligatorio solo se connector.tls.mode è ENCRYPT_VERIFY_CA_AND_HOST o ENCRYPT_VERIFY_CA.
    • assets: un elenco dei nomi delle tabelle PostgreSQL da trasferire dal database PostgreSQL nell'ambito del trasferimento.

Ad esempio, il seguente comando crea un trasferimento PostgreSQL denominato My Transfer:

bq mk
    --transfer_config
    --target_dataset=mydataset
    --data_source=postgresql
    --display_name='My Transfer'
    --params='{"assets":["DB1/PUBLIC/DEPARTMENT","DB1/PUBLIC/EMPLOYEES"],
        "connector.authentication.username": "User1",
        "connector.authentication.password":"ABC12345",
        "connector.database":"DB1",
        "connector.endpoint.host":"192.168.0.1",
        "connector.endpoint.port":5432,
        "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST",
        "connector.tls.trustedServerCertificate": "PEM-encoded certificate"}'

API

Utilizza il metodo projects.locations.transferConfigs.create e fornisci un'istanza della risorsa TransferConfig.

Quando salvi la configurazione del trasferimento, il connettore PostgreSQL attiva automaticamente un'esecuzione del trasferimento in base all'opzione di pianificazione. A ogni esecuzione del trasferimento, il connettore PostgreSQL trasferisce tutti i dati disponibili da PostgreSQL a BigQuery.

Per eseguire manualmente un trasferimento di dati al di fuori della pianificazione regolare, puoi avviare un'esecuzione di backfill.

Mappatura dei tipi di dati

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

Tipo di dati PostgreSQL Tipo di dati BigQuery
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 JSON
jsonb 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
timestamp [ (p) ] with time zone TIMESTAMP
triangle STRING
tsquery STRING
tsvector STRING
uuid STRING
xml STRING

Risoluzione dei problemi

Se riscontri problemi durante la configurazione del trasferimento dei dati, consulta Problemi di trasferimento di PostgreSQL.

Passaggi successivi