Importare dati BigQuery e Iceberg in AlloyDB per PostgreSQL

Questa pagina descrive come utilizzare le viste BigQuery per AlloyDB per importare dati da BigQuery, incluse tabelle native, tabelle esterne BigLake e tabelle gestite Apache Iceberg. Iceberg è un formato di tabella aperto per la gestione e lo scambio di dati.

Questa pagina presuppone che tu disponga di un cluster AlloyDB e di un'istanza principale e di un set di dati e tabelle BigQuery. Per saperne di più, vedi Creare set di dati e Creare e utilizzare tabelle.

Prima di iniziare

  1. Richiedi l'accesso alla funzionalità BigQueryViews per il tuo cluster e attendi di ricevere la conferma dell'attivazione prima di seguire le istruzioni riportate in questa pagina.
  2. Familiarizza con i tipi di dati BigQuery e i mapping delle colonne supportati.
  3. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  10. Abilita le API Cloud necessarie per creare e connetterti ad AlloyDB per PostgreSQL.

    Abilita le API

  11. Nel passaggio Conferma progetto, fai clic su Avanti per confermare il nome del progetto a cui apporterai le modifiche.

  12. Nel passaggio Abilita API, fai clic su Abilita per abilitare quanto segue:

    • API AlloyDB
    • API Compute Engine
    • API Cloud Resource Manager
    • API Service Networking
    • API BigQuery Storage

    L'API Service Networking è necessaria se prevedi di configurare la connettività di rete ad AlloyDB utilizzando una rete VPC che si trova nello stesso progetto Google Cloud di AlloyDB.

    L'API Compute Engine e l'API Cloud Resource Manager sono necessarie se prevedi di configurare la connettività di rete ad AlloyDB utilizzando una rete VPC che si trova in un progetto Google Cloud diverso.

Ruoli obbligatori

Per concedere l'accesso in lettura al set di dati BigQuery all'account di servizio del cluster AlloyDB, devi disporre delle seguenti autorizzazioni:

  • Visualizzatore dati BigQuery (roles/bigquery.dataViewer) o qualsiasi ruolo personalizzato con le autorizzazioni bigquery.tables.get e bigquery.tables.getData. Se concesso per una tabella o una vista, questo ruolo fornisce le autorizzazioni per leggere i dati e i metadati della tabella o della vista.
  • Utente sessione di lettura BigQuery (roles/bigquery.readSessionUser) o qualsiasi ruolo personalizzato con le autorizzazioni bigquery.readsessions.create e bigquery.readsessions.getData. Fornisce la possibilità di creare e utilizzare sessioni di lettura.

Concedi l'accesso ad AlloyDB al set di dati BigQuery

Dopo aver attivato la funzionalità BigQuery Views sul cluster AlloyDB, concedi all'account di servizio del cluster AlloyDB l'accesso al set di dati BigQuery.

Per utilizzare gcloud CLI, puoi installare e inizializzare Google Cloud CLI oppure puoi utilizzare Cloud Shell.

  1. Apri gcloud CLI. Se non hai installato gcloud CLI, installala e inizializzala o utilizza Cloud Shell.

  2. Esegui il comando gcloud beta alloydb clusters describe:

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    Sostituisci quanto segue:

    • CLUSTER: l'ID cluster AlloyDB.
    • REGION: la posizione del cluster AlloyDB, ad esempio asia-east1, us-east1. Consulta l'elenco completo delle regioni in Gestire le posizioni delle istanze.

    L'output contiene un campo serviceAccountEmail, che è l'account di servizio per questo cluster.

  3. Concedi le autorizzazioni richieste. Per saperne di più, consulta Controllare l'accesso alle risorse con IAM.

    Se il account di servizio del cluster non dispone delle autorizzazioni richieste, vengono visualizzati i seguenti errori quando viene eseguita una query sulla tabella BigQuery:

    • The user does not have bigquery.readsessions.create permissions
    • Permission bigquery.tables.get denied on table
    • Permission bigquery.tables.getData denied on table

Configurare l'estensione

  1. Crea l'estensione.

    1. Connettiti all'istanza AlloyDB utilizzando il client psql seguendo le istruzioni riportate in Connettere un client psql a un'istanza. In alternativa, puoi utilizzare AlloyDB Studio. Per ulteriori informazioni, consulta Gestisci i tuoi dati utilizzando la console Google Cloud .
    2. Esegui questo comando:

      CREATE EXTENSION bigquery_fdw;
      
  2. Crea un server esterno per definire i parametri di connessione per il set di dati BigQuery remoto.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    Sostituisci quanto segue:

    • BIGQUERY_SERVER_NAME: identificatore univoco per il server esterno. Definisci questa impostazione una sola volta in un determinato database. Puoi sostituire BIGQUERY_SERVER_NAME con il nome del tuo server.
  3. Crea la mappatura utente eseguendo il comando CREATE USER MAPPING, che specifica le credenziali da utilizzare quando ti connetti al server esterno.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    Sostituisci quanto segue:

    • USERNAME: un nome utente del database o un utente IAM che accede alla tabella esterna.
    • BIGQUERY_SERVER_NAME: identificatore univoco per il server esterno che hai creato.
  4. Definisci le tabelle esterne che corrispondono alle tabelle a cui vuoi accedere in BigQuery utilizzando il comando CREATE FOREIGN TABLE. Questo comando consente di definire la struttura di una tabella remota. La tabella esterna può contenere tutte o un sottoinsieme delle colonne della tabella di origine in BigQuery.

    CREATE FOREIGN TABLE TABLENAME (
    COLUMNX_NAME DATA_TYPE,
    COLUMNX_NAME DATA_TYPE,
    ...
    ) SERVER  BIGQUERY_SERVER_NAME OPTIONS (project BIGQUERY_PROJECT_ID, dataset  BIGQUERY_DATASET_NAME, table  BIGQUERY_TABLE_NAME);
    

    Sostituisci quanto segue:

    • TABLENAME: il nome della tabella esterna nel database locale.
    • COLUMNX_NAME: il nome della colonna deve corrispondere a quello dell'origine BigQuery.
    • DATA_TYPE: il tipo di dati della colonna.
    • BIGQUERY_SERVER_NAME: identificatore univoco per il server esterno che hai creato.
    • BIGQUERY_PROJECT_ID: l'ID del progetto in cui si trova il set di dati BigQuery.
    • BIGQUERY_DATASET_NAME: nome del set di dati BigQuery per la tabella.
    • BIGQUERY_TABLE_NAME: nome della tabella BigQuery.

    Una volta creata la tabella esterna, puoi eseguire query su questa tabella nello stesso modo in cui esegui query su qualsiasi tabella in AlloyDB.

Importa dati

Per importare dati BigQuery o BigLake Iceberg in AlloyDB:

  1. Identifica un'origine dati esistente o crea una tabella BigQuery nativa o una nuova tabella Iceberg gestita.

  2. Utilizza psql per creare local_table eseguendo il seguente comando:

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    Questo comando crea una copia della tabella BigQuery in una tabella AlloyDB locale nativa.
    A seconda del flusso di lavoro dell'applicazione, puoi configurare l'estensione PostgreSQL pg_cron per aggiornare la tabella AlloyDB a intervalli periodici.

Configura una pianificazione per importare i dati in AlloyDB

Per configurare una pianificazione per importare i dati BigQuery o BigLake Iceberg in AlloyDB:

  1. Configura l'estensione bigquery_fdw.
  2. Attiva l'estensione pg_cron sull'istanza AlloyDB. Per ulteriori informazioni, vedi Estensioni di database supportate.
    1. Imposta il flag alloydb.enable_pg_cron su on. Per saperne di più, consulta alloydb.enable_pg_cron.
    2. Imposta il flag cron.database_name sul nome del database in cui hai installato l'estensione bigquery_fdw e in cui vuoi eseguire le query SQL per l'importazione. Per ulteriori informazioni, vedi Flag di database supportati.
  3. Per aggiornare periodicamente una copia locale della tabella esterna, esegui i seguenti comandi nel database in cui hai installato l'estensione bigquery_fdw:

    CREATE EXTENSION pg_cron;
    SELECT cron.schedule(JOB_NAME, SCHEDULE, 'CREATE TABLE IF NOT EXISTS local_table_copy AS (SELECT * FROM foreign_table); DROP TABLE IF EXISTS local_table; ALTER TABLE local_table_copy RENAME TO local_table;');
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome del job.
    • SCHEDULE: la pianificazione del job.

    Per saperne di più, vedi Che cos'è pg_cron?.

Passaggi successivi