Carica i dati PostgreSQL in BigQuery
Per pianificare trasferimenti di dati ricorrenti da PostgreSQL a BigQuery, puoi creare una configurazione di trasferimento per specificare quali oggetti di dati trasferire e la frequenza con cui pianificare il trasferimento di dati. Dopo aver configurato il trasferimento, il BigQuery Data Transfer Service trasferisce i dati più recenti in una tabella BigQuery in base alla pianificazione specificata.
Per informazioni generali sui trasferimenti PostgreSQL, incluse le opzioni di configurazione, 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 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 del trasferimento dei dati in un determinato momento. Quando viene pianificato l'esecuzione di un secondo trasferimento di dati prima del completamento del primo, viene completato solo il primo trasferimento di dati, 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.
Durante un trasferimento di dati, il connettore PostgreSQL identifica le colonne chiave indicizzate e partizionate per trasferire i dati in batch paralleli. Per questo motivo, ti consigliamo di specificare le colonne della chiave primaria o di utilizzare colonne indicizzate nella tabella per migliorare il rendimento e ridurre il tasso di errore nei trasferimenti di dati. Considera quanto segue:
- Se hai vincoli di indice o di chiave primaria, per la creazione di batch paralleli sono supportati solo i seguenti tipi di colonne:
INTEGERTINYINTSMALLINTFLOATREALDOUBLENUMERICBIGINTDECIMALDATE
- I trasferimenti di dati PostgreSQL che non utilizzano chiave primaria o colonne indicizzate non possono supportare più di 2.000.000 di record per tabella.
- Se hai vincoli di indice o di chiave primaria, per la creazione di batch paralleli sono supportati solo i seguenti tipi di colonne:
Limitazioni del trasferimento incrementale
I trasferimenti PostgreSQL incrementali sono soggetti alle seguenti limitazioni:- Puoi scegliere solo
TIMESTAMPcolonne come colonne filigrana. - L'importazione incrementale è supportata solo per gli asset con colonne della filigrana valide.
- I valori in una colonna filigrana devono aumentare in modo monotono.
- I trasferimenti incrementali non possono sincronizzare le operazioni di eliminazione nella tabella di origine.
- Una singola configurazione di trasferimento può supportare solo l'importazione incrementale o completa.
- Non puoi aggiornare gli oggetti nell'elenco
assetdopo la prima esecuzione dell'importazione incrementale. - Non puoi modificare la modalità di scrittura in una configurazione di trasferimento dopo la prima esecuzione dell'importazione incrementale.
- Non puoi modificare la colonna della filigrana o la chiave primaria dopo la prima esecuzione dell'importazione incrementale.
- La tabella BigQuery di destinazione è in cluster utilizzando la chiave primaria fornita ed è soggetta alle limitazioni delle tabelle in cluster.
Quando aggiorni una configurazione di trasferimento esistente alla modalità di importazione incrementale per la prima volta, il primo trasferimento di dati dopo l'aggiornamento trasferisce tutti i dati disponibili dall'origine dati. I trasferimenti incrementali successivi dei dati trasferiranno solo le righe nuove e aggiornate dall'origine dati.
Ti consigliamo di creare indici nella colonna della filigrana. Questo connettore utilizza le colonne filigrana 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 attivare 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 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 saperne di più, 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:
- Se esegui il trasferimento da Cloud SQL, consulta Configurare l'accesso all'istanza Cloud SQL.
- Se esegui il trasferimento da AWS, consulta Configurare la VPN AWS-Google Cloud e l'allegato di rete.
- Se esegui il trasferimento da Azure, vedi Configurare la VPN e l'allegato di rete Azure-Google Cloud .
Configura un trasferimento di dati PostgreSQL
Aggiungi i dati PostgreSQL a BigQuery configurando un trasferimento utilizzando una delle seguenti opzioni:
Console
Vai alla pagina Trasferimenti di dati.
Fai clic su Crea trasferimento.
Nella sezione Tipo di origine, per 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.
- 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 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, vedi 16 marzo 2027. 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 via email per 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 per attivarlo. Puoi selezionare il nome del tuo argomento o fare clic su Crea un argomento per crearne uno.
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:
- (Facoltativo) PROJECT_ID: l'ID progetto Google Cloud .
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 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_HOSTper criptare i dati e verificare la CA e il nome hostENCRYPT_VERIFY_CAper criptare 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 codificati PEM. Obbligatorio solo seconnector.tls.modeèENCRYPT_VERIFY_CA_AND_HOSToENCRYPT_VERIFY_CA.ingestionType: specificafulloincremental. I trasferimenti incrementali sono supportati in anteprima. Per ulteriori informazioni, vedi Trasferimenti completi o incrementali.writeMode: specificaWRITE_MODE_APPENDoWRITE_MODE_UPSERT.watermarkColumns: specifica le colonne della tabella come colonne filigrana. 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: impostato 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, vedi 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 corrisponde alla tabella DB1/USER1/EMPLOYEES.
"primaryKeys":[['dep_id'], ['report_by','report_title']], "assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
API
Utilizza il
metodo projects.locations.transferConfigs.create
e fornisci un'istanza della
risorsa TransferConfig.
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 dei dati, consulta Problemi di trasferimento di PostgreSQL.
Trasferire i metadati
Puoi anche utilizzare il connettore PostgreSQL per trasferire i metadati a Knowledge Catalog. Per ulteriori informazioni, consulta Caricare i metadati PostgreSQL in Knowledge Catalog.Passaggi successivi
- Leggi una panoramica di BigQuery Data Transfer Service.
- Scopri di più su come gestire i trasferimenti, ad esempio come ottenere informazioni su una configurazione di trasferimento, elencare le configurazioni di trasferimento e visualizzare la cronologia di esecuzione di un trasferimento.
- Scopri come caricare dati con le operazioni BigQuery Omni.