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:
      • INTEGER
      • TINYINT
      • SMALLINT
      • FLOAT
      • REAL
      • DOUBLE
      • NUMERIC
      • BIGINT
      • DECIMAL
      • DATE
    • 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.

Limitazioni del trasferimento incrementale

I trasferimenti incrementali PostgreSQL sono soggetti alle seguenti limitazioni:

  • Puoi scegliere solo le colonne TIMESTAMP come 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 asset dopo 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

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:

Configurare un trasferimento di dati PostgreSQL

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

Console

  1. Vai alla pagina Trasferimenti di dati.

    Vai a Trasferimenti di dati

  2. Fai clic su Crea trasferimento.

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

  4. 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.
    • 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.
  5. 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.

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

  8. (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.
  9. 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_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 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_HOST per crittografare i dati e verificare la CA e il nome host
      • ENCRYPT_VERIFY_CA per crittografare 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 con codifica PEM. Obbligatorio solo se connector.tls.mode è ENCRYPT_VERIFY_CA_AND_HOST o ENCRYPT_VERIFY_CA.
    • ingestionType: specifica full o incremental. I trasferimenti incrementali sono supportati in anteprima. Per saperne di più, consulta Trasferimenti completi o incrementali.
    • writeMode: specifica WRITE_MODE_APPEND o WRITE_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 su true (impostazione predefinita) per utilizzare la mappatura dei tipi di dati legacy. Imposta su 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.
    • 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.

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.

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