Consultas federadas de AlloyDB

Las consultas federadas en BigQuery te permiten consultar datos almacenados en AlloyDB para PostgreSQL en tiempo real sin copiarlos ni moverlos. Puedes usar la función EXTERNAL_QUERY para enviar consultas en SQL a AlloyDB y unir los resultados con tus tablas de BigQuery.

Antes de comenzar

Consulta los datos

Para enviar una consulta federada a AlloyDB desde una consulta de GoogleSQL, usa la función EXTERNAL_QUERY.

Supongamos que almacenas una tabla de clientes en BigQuery y una tabla de ventas en AlloyDB y deseas unir las dos tablas en una sola consulta. En el siguiente ejemplo, se realiza una consulta federada a una tabla de AlloyDB llamada orders y se unen los resultados con una tabla de BigQuery llamada mydataset.customers

La consulta de ejemplo incluye 3 partes:

  1. La ejecución de la consulta externa SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id en la base de datos de AlloyDB para obtener la primera fecha del pedido de cada cliente a través de la función EXTERNAL_QUERY

  2. La unión de la tabla de resultados de la consulta externa con la tabla de clientes en BigQuery según customer_id

  3. Selecciona la información del cliente y la fecha del primer pedido en el conjunto de resultados final

SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
  'us.connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

Visualiza un esquema de tabla de AlloyDB

Puedes usar la función EXTERNAL_QUERY para consultar las tablas information_schema para acceder a los metadatos de la base de datos. Por ejemplo, puedes enumerar todas las tablas en la base de datos o ver el esquema de la tabla. Para obtener más información, consulta Tablas information_schema de PostgreSQL.

-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.columns where table_name='x';");

Realiza un seguimiento de las consultas federadas de BigQuery

Cuando ejecutas una consulta federada en AlloyDB, BigQuery anota la consulta con un comentario similar al siguiente:

/* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID. */

Si supervisas los registros para el uso de consultas, la siguiente anotación puede ayudarte a identificar las consultas que provienen de BigQuery.

  1. Ir a la página Explorador de registros.

    Ir al Explorador de registros.

  2. En la pestaña Consulta, ingresa la siguiente consulta:

    resource.type="alloydb.googleapis.com/Instance"
    textPayload=~"Federated query from BigQuery"
    
  3. Haz clic en Ejecutar consulta.

    Si hay registros disponibles para las consultas federadas de BigQuery, aparecerá una lista de registros similares a los siguientes en los resultados de la consulta:

    YYYY-MM-DD hh:mm:ss.millis UTC [3210064]: [4-1]
    db=DATABASE, user=USER_ACCOUNT
    STATEMENT: SELECT 1 FROM (SELECT FROM company_name_table) t;
    /* Federated query from BigQuery.
    Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID
    */
    
    YYYY-MM-DD hh:mm:ss.millis UTC [3210532]: [2-1]
    db=DATABASE, user=USER_ACCOUNT
    STATEMENT: SELECT "company_id", "company type_id" FROM
    (SELECT FROM company_name_table) t;
    /* Federated query from BigQuery.
    Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID
    */
    

    Para obtener más información sobre Cloud Logging, consulta Cloud Logging.

Soluciona problemas

En esta sección, se describen posibles errores que puedes encontrar cuando envías una consulta federada a AlloyDB y se proporcionan posibles soluciones de problemas.

Problema: No se pudo establecer una conexión con el servidor de la base de datos con este error: Invalid table-valued function EXTERNAL_QUERY Connect to PostgreSQL server failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request.

Resolución: Asegúrate de haber usado credenciales válidas y seguido de todos los requisitos previos mientras creaste la conexión a AlloyDB. Verifica si la cuenta de servicio que se crea automáticamente cuando se crea una conexión a AlloyDB tiene el rol de cliente de AlloyDB (roles/alloydb.client). Para obtener más información, consulta Otorga acceso a la cuenta de servicio.

¿Qué sigue?