Consultas federadas de AlloyDB
Como analista de datos, puedes consultar datos de AlloyDB para PostgreSQL desde BigQuery mediante consultas federadas.
La federación de BigQuery con AlloyDB permite a BigQuery consultar datos alojados en AlloyDB en tiempo real sin tener que copiarlos ni moverlos.
Antes de empezar
- Asegúrate de que tu administrador de BigQuery haya creado una conexión de AlloyDB y la haya compartido contigo.
-
Para obtener los permisos que necesitas para consultar una instancia de AlloyDB, pide a tu administrador que te asigne el rol de gestión de identidades y accesos Usuario de conexión de BigQuery (
roles/bigquery.connectionUser
) en tu proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Consultar datos
Para enviar una consulta federada a AlloyDB desde una consulta de GoogleSQL, usa la función EXTERNAL_QUERY
.
Supongamos que almacena una tabla de clientes en BigQuery y una tabla de ventas en AlloyDB, y quiere combinar las dos tablas en una sola consulta. En el siguiente ejemplo se hace 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 tres partes:
Ejecuta 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 fecha del primer pedido de cada cliente mediante la funciónEXTERNAL_QUERY
.Une la tabla de resultados de la consulta externa con la tabla de clientes de BigQuery por
customer_id
.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;
Ver el esquema de una tabla de AlloyDB
Puedes usar la función EXTERNAL_QUERY
para consultar tablas information_schema
y acceder a metadatos de bases de datos. Por ejemplo, puedes enumerar todas las tablas de la base de datos o ver el esquema de la tabla. Para obtener más información, consulta las 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';");
Hacer 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 monitorizas los registros para comprobar el uso de las consultas, la siguiente anotación puede ayudarte a identificar las consultas procedentes de BigQuery.
Ve a la página Explorador de registros.
En la pestaña Consulta, introduce la siguiente consulta:
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"
Haz clic en Realizar una consulta.
Si hay registros disponibles para las consultas federadas de BigQuery, en Resultados de la consulta se mostrará una lista de registros similar a la siguiente.
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.
Solución de problemas
En esta sección se describen los posibles errores que pueden surgir al enviar una consulta federada a AlloyDB y se ofrecen posibles soluciones.
Problema: no se ha podido conectar al servidor de la base de datos y se ha producido el siguiente 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.
Solución: Asegúrate de haber usado credenciales válidas y de haber seguido todos los requisitos previos al crear la conexión con AlloyDB.
Comprueba si la cuenta de servicio que se crea automáticamente cuando se crea una conexión con AlloyDB tiene el rol de cliente de AlloyDB (roles/alloydb.client
).
Para obtener más información, consulta Conceder acceso a la cuenta de servicio.
Siguientes pasos
- Consulta información sobre las consultas federadas.
- Consulta información sobre la asignación de tipos de datos de PostgreSQL a BigQuery.
- Más información sobre los tipos de datos no admitidos