Caricare i dati PostgreSQL in BigQuery
Per pianificare trasferimenti di dati ricorrenti da PostgreSQL a BigQuery, puoi creare una configurazione di trasferimento per specificare gli oggetti dati da trasferire e la frequenza di pianificazione del trasferimento di dati. Dopo aver configurato la configurazione del trasferimento, il BigQuery Data Transfer Service trasferisce i dati più recenti in una tabella BigQuery in base alla pianificazione specificata.
Per scoprire di più sul funzionamento di un trasferimento PostgreSQL, consulta Introduzione ai trasferimenti di dati PostgreSQL.
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 da il 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 di dati alla volta. Quando è pianificata l'esecuzione di un secondo trasferimento di dati prima del completamento del primo, viene completato solo il primo trasferimento di dati, mentre tutti gli altri trasferimenti di dati che si sovrappongono al primo vengono ignorati.
Per evitare trasferimenti ignorati all'interno di una singola configurazione del trasferimento, ti consigliamo di aumentare la durata del tempo tra i trasferimenti di dati di grandi dimensioni configurando la frequenza di ripetizione.
Durante un trasferimento di dati, il connettore PostgreSQL identifica le colonne delle chiavi indicizzate e partizionate per trasferire i dati in batch paralleli. Per questo motivo, ti consigliamo di specificare le colonne chiave primaria o di utilizzare le colonne indicizzate nella tabella per migliorare il rendimento e ridurre la percentuale di errori nei trasferimenti di dati. Considera quanto segue:
- Se hai vincoli di chiave primaria o indicizzata, per la creazione di batch paralleli sono supportati solo i seguenti tipi di colonne:
INTEGERTINYINTSMALLINTFLOATREALDOUBLENUMERICBIGINTDECIMALDATE
- I trasferimenti di dati PostgreSQL che non utilizzano colonne di chiave primaria o indicizzate non possono supportare più di 2.000.000 di record per tabella.
- Se hai vincoli di chiave primaria o indicizzata, per la creazione di batch paralleli sono supportati solo i seguenti tipi di colonne:
Limitazioni del trasferimento incrementale
I trasferimenti incrementali PostgreSQL sono soggetti alle seguenti limitazioni:- Puoi scegliere solo le colonne
TIMESTAMPcome colonne watermark. - L'importazione incrementale è supportata solo per gli asset con colonne watermark valide.
- I valori in una colonna watermark devono aumentare in modo monotono.
- I trasferimenti incrementali non possono sincronizzare le operazioni di eliminazione nella tabella di origine.
- Una singola configurazione del trasferimento può supportare solo l'acquisizione incrementale o completa.
- Non puoi aggiornare gli oggetti nell'elenco
assetdopo la prima esecuzione di importazione incrementale. - Non puoi modificare la modalità di scrittura in una configurazione del trasferimento dopo la prima esecuzione di importazione incrementale.
- Non puoi modificare la colonna watermark o la chiave primaria dopo la prima esecuzione di importazione incrementale.
- La tabella BigQuery di destinazione è in cluster utilizzando la chiave primaria fornita ed è soggetta alle limitazioni delle tabelle in cluster.
Quando aggiorni per la prima volta una configurazione del trasferimento esistente alla modalità di importazione incrementale, il primo trasferimento di dati dopo l'aggiornamento trasferisce tutti i dati disponibili dall'origine dati. Tutti i trasferimenti di dati incrementali successivi trasferiranno solo le righe nuove e aggiornate dall'origine dati.
Ti consigliamo di creare indici nella colonna watermark. Questo connettore utilizza le colonne watermark per i filtri nei trasferimenti incrementali, pertanto l'indicizzazione di queste colonne può migliorare il rendimento.
Quando esegui un trasferimento incrementale, devi utilizzare la mappatura aggiornata dei tipi di dati.
Prima di iniziare
- Crea un utente nel database PostgreSQL.
- Verifica di aver completato tutte le azioni necessarie per abilitare BigQuery Data Transfer Service.
- Crea un set di dati BigQuery per archiviare i dati.
- Assicurati di disporre dei ruoli necessari per completare le attività descritte in questo documento.
Ruoli obbligatori
Se intendi configurare le notifiche di esecuzione del trasferimento per Pub/Sub, assicurati di disporre dell'autorizzazione Identity and Access Management (IAM) pubsub.topics.setIamPolicy. 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 di 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 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 saperne di più, consulta Concedere l'accesso 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:
- Se esegui il trasferimento da Cloud SQL, consulta Configurare l'accesso all'istanza Cloud SQL.
- Se esegui il trasferimento da AWS, consulta Configurare AWS-Google Cloud VPN e il collegamento di rete.
- Se esegui il trasferimento da Azure, consulta Configurare Azure-Google Cloud VPN e il collegamento di rete.
Configurare un trasferimento di dati PostgreSQL
Aggiungi i dati PostgreSQL a BigQuery configurando una configurazione del trasferimento utilizzando una delle seguenti opzioni:
Console
Vai alla pagina Trasferimenti di dati.
Fai clic su Crea trasferimento.
Nella sezione Tipo di origine, in Origine, seleziona PostgreSQL.
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.
- In 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 Attiva mappatura legacy, seleziona true (impostazione predefinita) per utilizzare la mappatura dei tipi di dati legacy. Seleziona false per utilizzare la mappatura aggiornata dei tipi di dati. Se stai eseguendo un trasferimento incrementale, questo valore deve essere false. Per saperne di più sugli aggiornamenti della mappatura dei tipi di dati , consulta 16 marzo 2027. server di database.
- Per Tipo di importazione, seleziona Completa o Incrementale.
- Se selezioni Incrementale (Anteprima), per Modalità di scrittura, seleziona Aggiungi o Esegui upsert. Per saperne di più sulle diverse modalità di scrittura, consulta Trasferimenti completi o incrementali.
Per Oggetti PostgreSQL da trasferire, fai clic su Sfoglia.
Seleziona gli oggetti da trasferire al set di dati di destinazione BigQuery. In questo campo puoi anche inserire manualmente gli oggetti da includere nel trasferimento di dati.
- Se hai selezionato Aggiungi come modalità di scrittura incrementale, devi selezionare una colonna come colonna watermark.
- Se hai selezionato Esegui upsert come modalità di scrittura incrementale, devi selezionare una colonna come colonna watermark, e poi una o più colonne come chiave primaria.
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.
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.
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.
(Facoltativo) Nella sezione Opzioni di notifica, segui questi passaggi:
- Per attivare le notifiche via email, fai clic sul pulsante di attivazione/disattivazione Notifiche email in modo da attivarlo. 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 in modo da attivarlo. Puoi selezionare il nome dell'argomento oppure fare clic su Crea un argomento per crearne uno.
Fai clic su Salva.
bq
Inserisci il bq mk comando
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 del tuo Google Cloud progetto.
Se non viene fornito il flag
--project_idper 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 di 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 di dati.
PARAMETERS: i parametri per la configurazione del trasferimento creata in formato JSON. Ad esempio:
--params='{"param":"param_value"}'. Di seguito sono riportati i parametri per un trasferimento PostgreSQL:connector.networkAttachment(facoltativo): il nome del collegamento 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_HOSTper crittografare i dati e verificare la CA e il nome hostENCRYPT_VERIFY_CAper crittografare i dati e verificare solo la CAENCRYPT_VERIFY_NONEsolo per la crittografia dei datiDISABLEper nessuna crittografia o verifica
connector.tls.trustedServerCertificate: (facoltativo) fornisci uno o più certificati con codifica PEM. Obbligatorio solo seconnector.tls.modeèENCRYPT_VERIFY_CA_AND_HOSToENCRYPT_VERIFY_CA.ingestionType: specificafulloincremental. I trasferimenti incrementali sono supportati in anteprima. Per saperne di più, consulta Trasferimenti completi o incrementali.writeMode: specificaWRITE_MODE_APPENDoWRITE_MODE_UPSERT.watermarkColumns: specifica le colonne della tabella come colonne watermark. Questo campo è obbligatorio per i trasferimenti incrementali.primaryKeys: specifica le colonne della tabella come chiavi primarie. Questo campo è obbligatorio per i trasferimenti incrementali.connector.legacyMapping: imposta sutrue(impostazione predefinita) per utilizzare la mappatura dei tipi di dati legacy. Imposta sufalseper utilizzare la mappatura aggiornata dei tipi di dati. Se stai eseguendo un trasferimento incrementale, questo valore deve esserefalse. Per saperne di più sugli aggiornamenti della mappatura dei tipi di dati , consulta 16 marzo 2027.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, "ingestionType":"incremental", "writeMode":"WRITE_MODE_APPEND", "watermarkColumns":["createdAt","createdAt"], "primaryKeys":[['dep_id'], ['report_by','report_title']], "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST", "connector.tls.trustedServerCertificate": "PEM-encoded certificate"}'
Quando specifichi più asset durante un trasferimento incrementale, i valori dei campi watermarkColumns e primaryKeys corrispondono alla posizione dei valori nel campo assets. Nell'esempio seguente, dep_id corrisponde alla tabella DB1/USER1/DEPARTMENT, mentre report_by e report_title corrispondono alla tabella DB1/USER1/EMPLOYEES.
"primaryKeys":[['dep_id'], ['report_by','report_title']], "assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
API
Utilizza il
projects.locations.transferConfigs.create metodo
e fornisci un'istanza della
TransferConfig risorsa.
Per eseguire manualmente un trasferimento di dati al di fuori della pianificazione regolare, puoi avviare un'esecuzione di backfill.
Risoluzione dei problemi
Se riscontri problemi durante la configurazione del trasferimento di dati, consulta Problemi di trasferimento PostgreSQL.
Trasferire i metadati
Puoi anche utilizzare il connettore PostgreSQL per trasferire i metadati a Knowledge Catalog. Per saperne di più, consulta Caricare i metadati PostgreSQL in Knowledge Catalog.Passaggi successivi
- Leggi una panoramica di BigQuery Data Transfer Service.
- Scopri come gestire i trasferimenti, inclusi come ottenere informazioni su una configurazione di trasferimento, elencare le configurazioni di trasferimento e visualizzare la cronologia delle esecuzioni di un trasferimento.
- Scopri come caricare i dati con le operazioni BigQuery Omni.