Consultas federadas de AlloyDB
Como analista de datos, puedes consultar datos en AlloyDB para PostgreSQL desde BigQuery a través de consultas federadas.
La federación de AlloyDB de BigQuery permite que BigQuery consulte datos que se encuentran en AlloyDB en tiempo real sin copiarlos ni moverlos.
Antes de comenzar
- Asegúrate de que el 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, pídele a tu administrador que te otorgue el rol de IAM usuario de conexión de BigQuery (
roles/bigquery.connectionUser
) en tu proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
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:
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ónEXTERNAL_QUERY
La unión de la tabla de resultados de la consulta externa con la tabla de clientes en BigQuery según
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;
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.
Ir a la página Explorador de registros.
En la pestaña Consulta, ingresa la siguiente consulta:
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"
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?
- Obtén más información sobre consultas federadas.
- Obtén más información sobre la asignación de tipos de datos de PostgreSQL a BigQuery.
- Obtén más información sobre los tipos de datos no compatibles.