Importa datos de BigQuery y Iceberg a AlloyDB para PostgreSQL

En esta página, se describe cómo usar las vistas de BigQuery para AlloyDB para importar datos de BigQuery, incluidas las tablas nativas, las tablas externas de BigLake y las tablas administradas de Apache Iceberg. Iceberg es un formato de tabla abierta para administrar y transferir datos.

En esta página, se supone que tienes un clúster de AlloyDB y una instancia principal, y que tienes un conjunto de datos y tablas de BigQuery. Para obtener más información, consulta Crea conjuntos de datos y Crea y usa tablas.

Antes de comenzar

  1. Solicita acceso a la función BigQueryViews para tu clú1ster y espera hasta que recibas la confirmación de habilitación antes de seguir las instrucciones de esta página.
  2. Familiarízate con los tipos de datos y las asignaciones de columnas de BigQuery compatibles.
  3. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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. Habilita las API de Cloud necesarias para crear AlloyDB para PostgreSQL y conectarte a él.

    Habilitar las API

  11. En el paso Confirmar proyecto, haz clic en Siguiente para confirmar el nombre del proyecto al que vas a realizar cambios.

  12. En el paso Habilitar APIs, haz clic en Habilitar para habilitar lo siguiente:

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

    Se requiere la API de Service Networking si planeas configurar la conectividad de red a AlloyDB con una red de VPC que reside en el mismo Google Cloud proyecto que AlloyDB.

    Se requieren la API de Compute Engine y la API de Resource Manager si planeas configurar la conectividad de red a AlloyDB con una red de VPC que reside en un proyecto diferente Google Cloud .

Roles obligatorios

Para otorgar acceso de lectura al conjunto de datos de BigQuery a la cuenta de servicio del clúster de AlloyDB, necesitas los siguientes permisos:

  • Visualizador de datos de BigQuery (roles/bigquery.dataViewer) o cualquier rol personalizado con permisos bigquery.tables.get y bigquery.tables.getData. Cuando se otorga en una tabla o vista, este rol proporciona permisos para leer datos y metadatos de la tabla o vista.
  • Usuario de sesión de lectura de BigQuery (roles/bigquery.readSessionUser) o cualquier rol personalizado con permisos bigquery.readsessions.create y bigquery.readsessions.getData. Proporciona la capacidad de crear y usar sesiones de lectura.

Otorga acceso de AlloyDB al conjunto de datos de BigQuery

Después de habilitar la función BigQuery Views en tu clúster de AlloyDB, otorga acceso a la cuenta de servicio del clúster de AlloyDB al conjunto de datos de BigQuery.

Para usar gcloud CLI, puedes instalar y, luego, inicializar Google Cloud CLI o usar Cloud Shell.

  1. Abre gcloud CLI. Si no tienes instalada la gcloud CLI, instálala y, luego, inicialízala o usa Cloud Shell.

  2. Ejecuta el gcloud beta alloydb clusters describe comando:

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    Reemplaza lo siguiente:

    El resultado contiene un campo serviceAccountEmail, que es la cuenta de servicio de este clúster.

  3. Otorga los permisos necesarios. Para obtener más información, consulta Controla el acceso a los recursos con la IAM.

    Si la cuenta de servicio del clúster no tiene los permisos necesarios, aparecerán los siguientes errores cuando se ejecute una consulta en la tabla de BigQuery:

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

Configura la extensión

  1. Crea la extensión.

    1. Para conectarte a la instancia de AlloyDB con el cliente psql , sigue las instrucciones que se indican en Conecta un cliente psql a una instancia. También puedes usar AlloyDB Studio. Para obtener más información, consulta Administra tus datos con la Google Cloud consola.
    2. Ejecuta el siguiente comando:

      CREATE EXTENSION bigquery_fdw;
      
  2. Crea un servidor externo para definir los parámetros de conexión del conjunto de datos de BigQuery remoto.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    Reemplaza lo siguiente:

    • BIGQUERY_SERVER_NAME: identificador único del servidor externo. Defínelo una vez en una base de datos determinada. Puedes reemplazar BIGQUERY_SERVER_NAME por el nombre de tu servidor.
  3. Para crear la asignación de usuario, ejecuta el comando CREATE USER MAPPING, que especifica las credenciales que se usarán cuando te conectes al servidor externo.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    Reemplaza lo siguiente:

    • USERNAME: un nombre de usuario de la base de datos o un usuario de IAM que accede a la tabla externa.
    • BIGQUERY_SERVER_NAME: identificador único del servidor externo que creaste.
  4. Define las tablas externas que corresponden a las tablas a las que deseas acceder en BigQuery con el comando CREATE FOREIGN TABLE. Este comando te permite definir la estructura de una tabla remota. La tabla externa puede tener todas las columnas de la tabla de origen en BigQuery o un subconjunto de ellas.

    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);
    

    Reemplaza lo siguiente:

    • TABLENAME: nombre de la tabla externa en la base de datos local.
    • COLUMNX_NAME: el nombre de la columna debe coincidir con el nombre de la columna en la fuente de BigQuery.
    • DATA_TYPE: el tipo de datos de la columna.
    • BIGQUERY_SERVER_NAME: identificador único del servidor externo que creaste.
    • BIGQUERY_PROJECT_ID: ID del proyecto en el que reside el conjunto de datos de BigQuery.
    • BIGQUERY_DATASET_NAME: nombre del conjunto de datos de BigQuery para la tabla.
    • BIGQUERY_TABLE_NAME: nombre de la tabla de BigQuery.

    Después de crear la tabla externa, puedes consultarla de la misma manera que consultas cualquier tabla en AlloyDB.

Importar datos

Para importar datos de BigQuery o datos de Iceberg de BigLake a AlloyDB, sigue estos pasos:

  1. Identifica una fuente de datos existente o crea una tabla nativa de BigQuery o tablas administradas de Iceberg nuevas.

  2. Usa psql para crear local_table ejecutando el siguiente comando:

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    Este comando crea una copia de la tabla de BigQuery en una tabla de AlloyDB local y nativa.
    Según el flujo de trabajo de tu aplicación, puedes configurar la extensión pg_cron de PostgreSQL para actualizar la tabla de AlloyDB en intervalos periódicos.

Configura una programación para importar datos a AlloyDB

Para configurar una programación para importar datos de BigQuery o datos de Iceberg de BigLake a AlloyDB, sigue estos pasos:

  1. Configura la extensión bigquery_fdw.
  2. Habilita la extensión pg_cron en la instancia de AlloyDB. Para obtener más información, consulta Extensiones de base de datos compatibles.
    1. Establece la marca alloydb.enable_pg_cron en on. Para obtener más información, consulta alloydb.enable_pg_cron.
    2. Establece la marca cron.database_name en el nombre de la base de datos en la que instalaste la extensión bigquery_fdw y en la que deseas ejecutar las consultas de SQL para la importación. Para obtener más información, consulta Marcas de base de datos compatibles.
  3. Para actualizar periódicamente una copia local de la tabla externa, ejecuta los siguientes comandos en la base de datos en la que instalaste la extensión 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;');
    

    Reemplaza lo siguiente:

    • JOB_NAME: el nombre del trabajo.
    • SCHEDULE: la programación del trabajo.

    Para obtener más información, consulta ¿Qué es pg_cron?.

¿Qué sigue?