Sincroniza datos de BigQuery con AlloyDB

En esta página, se muestra cómo sincronizar tablas de BigQuery en tu instancia de AlloyDB para PostgreSQL.

Si sincronizas datos analíticos de BigQuery en AlloyDB, puedes compilar sistemas operativos que se beneficien del acceso transaccional de baja latencia a tu data lake. A diferencia de un wrapper de datos externos (FDW) que consulta datos en su lugar, la tabla de sincronización mueve los datos al almacenamiento de AlloyDB para obtener el máximo rendimiento.

AlloyDB proporciona las siguientes formas de mover datos de BigQuery a tu instancia:

  • Sincronización única: Crea una copia independiente y grabable de tu tabla de BigQuery.

  • Sincronización periódica (duplicación): Crea una tabla local de solo lectura que se actualiza automáticamente según una programación, por ejemplo, cada 6 horas o diariamente.

Consideraciones operativas y de rendimiento

Cuando usas tablas de sincronización de BigQuery, ten en cuenta lo siguiente:

  • Uso de recursos: El movimiento de datos consume CPU y memoria. Para tablas muy grandes, considera programar sincronizaciones durante las horas de menor actividad para evitar afectar tu carga de trabajo transaccional principal.
  • Visibilidad de los datos: Durante una operación de reemplazo, se descarta la tabla de destino existente y se vuelve a crear por adelantado. Las consultas durante la importación ven una tabla vacía inicialmente, seguida de datos importados recientemente que aparecen de forma incremental a medida que se confirman las transacciones por lotes.

Antes de comenzar

  1. Familiarízate con la forma en que bigquery_fdw controla los tipos de datos y las asignaciones de columnas de BigQuery, ya que la extensión alloydb_sync usa bigquery_fdw para conectarse a BigQuery.
  2. 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.
  3. 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

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

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

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

  7. Habilita las API de Cloud necesarias para crear AlloyDB y conectarte a él.

    Habilitar las API

  8. Para confirmar el nombre del proyecto al que realizarás cambios, en el paso Confirmar proyecto, haz clic en Siguiente.

  9. 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 Cloud Resource Manager si planeas configurar la conectividad de red a AlloyDB con una red de VPC que reside en un proyecto diferente Google Cloud .

  10. Asegúrate de tener una tabla de BigQuery existente desde la que sincronizar datos. Para obtener más información, consulta Crea y usa tablas de BigQuery.

Roles obligatorios

Para otorgar acceso 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 cuenta de servicio, 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.
  • Usuario de trabajo de BigQuery (roles/bigquery.jobUser) o cualquier rol personalizado con permisos bigquery.jobs.create. Proporciona la capacidad de crear y ejecutar trabajos, incluidos los trabajos de consulta.

Configura la extensión

Antes de sincronizar tablas de BigQuery, habilita la extensión requerida y configura la conexión a BigQuery.

  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.
    2. Ejecuta el siguiente comando:

      CREATE EXTENSION IF NOT EXISTS alloydb_sync;
      
  2. Para permitir que AlloyDB se autentique con BigQuery, crea la asignación de usuarios.

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER IF NOT EXISTS BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    CREATE USER MAPPING IF NOT EXISTS FOR USER SERVER BIGQUERY_SERVER_NAME;
    

    Reemplaza lo siguiente:

    • USER: Un nombre de usuario de la base de datos o un usuario de IAM que accede a la tabla de BigQuery.
    • BIGQUERY_SERVER_NAME: Identificador único para el servidor de BigQuery. Defínelo una vez en una base de datos determinada. Puedes reemplazar BIGQUERY_SERVER_NAME por el nombre de tu servidor.

Sincroniza una tabla de BigQuery para la exportación única

Puedes sincronizar una tabla de BigQuery para la exportación única con psql.

Sincroniza una tabla de BigQuery una vez con psql

Para crear una copia editable de los datos de BigQuery, usa psql para ejecutar la alloydb_sync.import_bq_table función.

SELECT alloydb_sync.import_bq_table(
  'PROJECT_ID.DATASET_ID.TABLE_ID',
  'ALLOYDB_DESTINATION_TABLE_NAME',
  'ON_EXISTS',
  ARRAY['PRIMARY_KEY_COLUMN']
);

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto en el que reside el conjunto de datos de BigQuery.
  • DATASET_ID: El nombre del conjunto de datos de BigQuery para la tabla. Para las tablas de Iceberg con un nombre de 4 partes, este es el Catalog.Namespace.
  • TABLE_ID: El nombre de la tabla o vista de BigQuery.
  • ALLOYDB_DESTINATION_TABLE_NAME: El nombre de la tabla local en la base de datos de AlloyDB para crear y, luego, importar datos. Puedes incluir el nombre del esquema, por ejemplo, public.local_sales.
  • ON_EXISTS: La estrategia que se usará si la tabla de destino ya existe.
  • PRIMARY_KEY_COLUMN: Una lista opcional de nombres de columnas para usar como clave primaria.

Ejemplo

En el siguiente ejemplo, se muestra cómo sincronizar una tabla llamada transactions de un conjunto de datos de BigQuery en una tabla nueva de AlloyDB llamada public.local_sales:

SELECT alloydb_sync.import_bq_table(
    'my-gcp-project.sales_data.transactions',
    'public.local_sales',
    'replace'
);
Parámetro on_exists

El parámetro on_exists determina cómo la función controla la sincronización si la tabla de destino ya existe en AlloyDB:

  • error: La opción predeterminada. Detiene la sincronización si la tabla de destino ya existe.
  • skip: Omite la sincronización si la tabla de destino ya existe.
  • replace: Reemplaza la tabla local existente por datos nuevos de BigQuery.
Compatibilidad con claves primarias

Si proporcionas el parámetro opcional primary_key como un array de texto, AlloyDB crea la tabla con las columnas especificadas como clave primaria.

SELECT alloydb_sync.import_bq_table(
    'my-gcp-project.sales_data.transactions',
    'public.local_sales',
    ARRAY['transaction_id']
);

Sincroniza una tabla de BigQuery para la exportación periódica

Puedes sincronizar una tabla de BigQuery para la exportación periódica con psql.

Crea una sincronización periódica

Para mantener una tabla de solo lectura que permanezca sincronizada con los datos de BigQuery, usa psql para ejecutar la función alloydb_sync.create_bq_sync_table.

SELECT alloydb_sync.create_bq_sync_table(
    'PROJECT_ID.DATASET_ID.TABLE_ID',
    'ALLOYDB_DESTINATION_TABLE_NAME',
    'REFRESH_INTERVAL',
    'ON_EXISTS',
    ARRAY['PRIMARY_KEY_COLUMN']
);

Reemplaza lo siguiente:

  • PROJECT_ID.DATASET_ID.TABLE_ID: El nombre completamente calificado de la tabla o vista de BigQuery, incluido el ID del proyecto, el ID del conjunto de datos y el ID de la tabla, separados por puntos. Para las tablas de Iceberg con un nombre de 4 partes, el DATASET_ID se representa como Catalog.Namespace. Por ejemplo, my-gcp-project.sales_data.transactions.
  • ALLOYDB_DESTINATION_TABLE_NAME: El nombre de la tabla local en la base de datos de AlloyDB para crear y, luego, sincronizar datos.
  • REFRESH_INTERVAL: El intervalo en el que AlloyDB actualiza periódicamente los datos de BigQuery, por ejemplo, 12 hours.
  • ON_EXISTS: La estrategia que se usará si la tabla de destino ya existe.
  • PRIMARY_KEY_COLUMN: Una lista opcional de nombres de columnas para usar como clave primaria.

Ejemplo

En el siguiente ejemplo, se muestra cómo crear un duplicado del perfil del cliente que se actualiza cada 12 horas:

SELECT alloydb_sync.create_bq_sync_table(
    'my-gcp-project.crm_data.profiles',
    'public.customer_mirror',
    '12 hours',
    'replace'
);

Monitorea y administra trabajos

Después de iniciar una sincronización, puedes supervisar su progreso y administrar los trabajos.

Verifica el estado del trabajo

Las sincronizaciones grandes pueden tardar un tiempo. Puedes supervisar el progreso, incluidos los registros procesados y el tiempo estimado de finalización, consultando la vista job_status:

SELECT
    import_id,
    status,
    records_processed,
    total_records,
    error
FROM alloydb_sync.job_status;

Por ejemplo, para cancelar el trabajo, ejecuta el siguiente comando:

SELECT alloydb_sync.cancel_import_job('85bb5dfa-dfb9-4017-9153-738f55abe4b1');

Detén y borra un trabajo de sincronización

Para dejar de duplicar una tabla de BigQuery y borrar la tabla local, usa la función alloydb_sync.delete_bq_sync_table:

SELECT alloydb_sync.delete_bq_sync_table('public.customer_mirror');

Limitaciones

Se aplican las siguientes limitaciones cuando se sincronizan tablas de BigQuery:

  • Esta función solo es compatible con la versión 18 de PostgreSQL.
  • Si DROP la extensión alloydb_sync, debes reiniciar la instancia antes de volver a crear la extensión.
  • Las sincronizaciones se ejecutan dentro de una transacción. Si se interrumpe o falla el trabajo de importación, el sistema revierte los datos importados.
  • Si dos usuarios inician trabajos de sincronización al mismo tiempo con las mismas tablas de destino, las tablas podrían sobrescribirse entre sí.
  • Si se produce alguna interrupción durante la importación inicial en segundo plano para una tabla de sincronización recién registrada, la tabla permanece incompleta hasta el siguiente intervalo de actualización programado. Para resolver este problema, puedes borrar la tabla de sincronización con la función alloydb_sync.delete_bq_sync_table() y volver a crearla.
  • Los tipos complejos de BigQuery, como ARRAY, BYTES, VECTOR y GEOGRAPHY, no son compatibles con la sincronización. Para obtener una lista completa, consulta Tipos de datos y asignaciones de columnas de BigQuery compatibles.
  • No descartes una tabla replicada de forma manual. Usa la función de API alloydb_sync.delete_bq_sync_table() para descartar la tabla y las actualizaciones de forma segura.
  • Para descartar una base de datos que usa la extensión alloydb_sync, debes usar DROP DATABASE ... WITH (FORCE).
  • Si la base de datos de Postgres falla mientras se ejecuta una importación, es posible que los metadatos se queden en el estado RUNNING, lo que bloquea las importaciones futuras. Debes ejecutar UPDATE alloydb_sync.import_job_status SET status = 'FAILED' WHERE status = 'RUNNING'; de forma manual para desbloquearlo.

Precios

Cuando sincronizas datos de BigQuery a AlloyDB, se te factura a través los precios de procesamiento de capacidad de BigQuery.

Una vez que se exportan los datos, se te cobra por almacenarlos en AlloyDB. Para obtener más información, consulta los precios de AlloyDB para PostgreSQL.

¿Qué sigue?