Consultas federadas de Cloud SQL

En esta página, se describe cómo consultar datos en BigQuery y Cloud SQL con una consulta federada.

Descripción general

A menudo, los datos se encuentran dispersos en muchos lugares. Es posible que almacenes una tabla de clientes en BigQuery y una tabla de ventas en Cloud SQL y desees unir ambas en una sola consulta.

La federación de Cloud SQL en BigQuery permite que BigQuery consulte datos que se encuentran en Cloud SQL en tiempo real sin copiarlos ni moverlos. Admite instancias de MySQL (2.ª generación) y PostgreSQL en Cloud SQL.

Después de la configuración inicial única, puedes escribir una consulta con la nueva función SQL EXTERNAL_QUERY ().

Flujo de trabajo

Sintaxis de consultas federadas

La consulta federada presenta una nueva función: EXTERNAL_QUERY.

Sintaxis

SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
  • connection_id (string): es el nombre del recurso de conexión de base de datos que debes crear en la IU web, CLI o API.

    ID de conexión de ejemplo bigquery-federation-test.us.test-mysql

  • external_database_query (string): es una consulta de solo lectura en el dialecto SQL de la base de datos externa (MySQL o PostgreSQL). La consulta se ejecuta en la base de datos externa en Cloud SQL.

Descripción

EXTERNAL_QUERY ejecuta la consulta en Cloud SQL y muestra los resultados como una tabla temporal. El tipo de datos de la base de datos de origen (MySQL o PostgreSQL) se convierte al tipo de datos de BigQuery en la tabla de resultados temporal con la siguiente asignación de tipo de datos. Por lo general, la función EXTERNAL_QUERY se usa en una cláusula FROM. Esta función solo está disponible en SQL estándar de BigQuery.

Tipo de contenido que se muestra

Una tabla de BigQuery.

Consulta de ejemplo

Supongamos que necesitas que se incluya la fecha del primer pedido de cada uno de tus clientes en el informe que detallamos en la descripción general. Estos datos no están en BigQuery en este momento, pero están disponibles en tu base de datos operativa PostgreSQL en Cloud SQL. En el siguiente ejemplo de consulta federada, se logra este objetivo.

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  '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;

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 operativa PostgreSQL para obtener la primera fecha de 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. La selección de la información del cliente y la fecha del primer pedido

El orden no se conserva

EXTERNAL_QUERY() no respetará el orden del resultado de la consulta externa, incluso si esta incluye ORDER BY. La siguiente consulta de ejemplo ordena las filas por ID de cliente en Cloud SQL, pero BigQuery no generará las filas de resultados en ese orden.

SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

Antes de comenzar

Habilita el servicio de conexión de BigQuery

  • Abre la página de la API de conexión de BigQuery en la biblioteca de API.
  • En el menú desplegable, selecciona el proyecto que contenga tu instancia de Cloud SQL.
  • Haz clic en el botón HABILITAR.

Cuenta de servicio

BigQuery usa una cuenta de servicio para conectarse a tu instancia de Cloud SQL. Cuando habilites la API de conexión de BigQuery, se creará una cuenta de servicio de IAM administrada por GCP de forma automática en tu nombre. La cuenta de servicio tiene las siguientes funciones:

Función Descripción
cloudsql.client Conectarse a una instancia de Cloud SQL
logging.logWriter Escribir en el registro en la nube
metrics.metricWriter Escribir en la supervisión en la nube

Permisos

  • Para crear y mantener un recurso de conexión, el usuario debe tener la función predefinida de IAM bigquery.admin.

  • La función bigquery.admin incluye los siguientes permisos del servicio de conexión de BigQuery:

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete

Si deseas otorgar permisos a otro usuario a fin de que pueda usar el recurso de conexión para consultas de Cloud SQL, consulta la sección sobre cómo otorgar permisos a otro usuario.

Otorga acceso de bigquery.admin

Para otorgar la función bigquery.admin, sigue estos pasos:

Console

  1. Abre la página de Cloud IAM en GCP Console.

    Abrir la página de IAM.

  2. Haz clic en Seleccionar un proyecto.

  3. Selecciona un proyecto y haz clic en Abrir.

  4. Haz clic en Agregar para agregar miembros nuevos al proyecto y configura sus permisos.

  5. En el cuadro de diálogo Agregar miembros (Add members), haz lo siguiente:

    • En Miembros (Members), ingresa la dirección de correo electrónico del usuario o grupo.
    • En el menú desplegable Seleccionar una función, haz clic en BigQuery > Administrador de BigQuery (BigQuery > BigQuery Admin).
    • Haz clic en Agregar (Add).

      Otorgar función de administrador

CLI

Puedes usar la herramienta de línea de comandos de gcloud para otorgar la función bigquery.admin a un usuario o grupo.

Para agregar una sola vinculación a la política de Cloud IAM de tu proyecto, escribe el siguiente comando. Para agregar un usuario, suministra la marca --member con el formato user:user@example.com. Para agregar un grupo, suministra la marca --member con el formato group:group@example.com.

gcloud projects add-iam-policy-binding project_id \
--member group/user:address \
--role roles/bigquery.admin

Donde:

  • project_id es el ID del proyecto.
  • group/user es group o user.
  • address es la dirección de correo electrónico del usuario o grupo.

Por ejemplo:

gcloud projects add-iam-policy-binding myproject \
--member group:group@example.com \
--role roles/bigquery.admin

El comando genera la política actualizada:

    bindings:
    - members:
      - group:group@example.com
        role: roles/bigquery.admin
    

Para obtener más información sobre las funciones de Cloud IAM en BigQuery, consulta los permisos y funciones predefinidas.

IP pública

La federación de Cloud SQL en BigQuery solo admite instancias de Cloud SQL con conectividad de IP pública. Configura la conectividad de IP pública para tu instancia de Cloud SQL.

Configura conexiones de base de datos de Cloud SQL

Para evitar escribir las credenciales de la base de datos como texto sin formato en una consulta federada, primero debes crear un recurso de conexión de base de datos por cada base de datos en BigQuery y, luego, hacer referencia al recurso de conexión en tu consulta federada.

El recurso de conexión tiene un conjunto de permisos de IAM que puedes otorgar a otros usuarios. El recurso de conexión está encriptado y almacenado de forma segura en el servicio de conexión de BigQuery y solo puede usarse para consultas federadas.

Para obtener más información sobre las funciones de Cloud IAM y los permisos en BigQuery, consulta los permisos y funciones predefinidas.

Crea un recurso de conexión

Console

  1. Para crear un recurso de conexión, dirígete a la IU web de BigQuery en GCP Console.

    Ir a GCP Console

  2. En +AGREGAR DATOS (+ADD DATA), selecciona Crear conexión (Create connection) en el menú.

    Crear recurso de conexión

  3. En el panel Crear conexión (Create connection), haz lo siguiente:

    • En Tipo de conexión (Connection type), selecciona MySQL o PostgresSQL.
    • En ID de conexión (Connection ID), ingresa un identificador para el recurso de conexión. Se permiten letras, números y guiones bajos.
    • En Ubicación de conexión (Connection location), selecciona la ubicación de la instancia de Cloud SQL, con las siguientes excepciones: para las instancias de Cloud SQL en las regiones us-central1 y europe-west1, debes seleccionar las ubicaciones US y EU de forma respectiva.
    • En Nombre descriptivo (Friendly name), ingresa un nombre fácil de usar para la conexión, como My connection resource, (opcional). El nombre descriptivo puede ser cualquier valor que te permita identificar con facilidad el recurso de conexión si necesitas modificarlo más adelante.
    • En Descripción (Description), ingresa una descripción para este recurso de conexión (opcional).
    • En ID de la instancia de Cloud SQL (Cloud SQL instance ID), ingresa el nombre completo de la instancia de Cloud SQL, por lo general, con el formato project-id:location-id:instance-id. Puedes encontrar el ID de la instancia en la página de detalles de la instancia de Cloud SQL que deseas consultar.
    • En Nombre de la base de datos (Database name), ingresa el nombre de la base de datos.
    • En Nombre de usuario (Username), ingresa el nombre de usuario para la base de datos.
    • En Contraseña (Password), ingresa la contraseña para la base de datos.

      • Marca Mostrar contraseña (Show password) para revelar la contraseña (opcional).

      Recurso de conexión nuevo

  4. Haz clic en Crear conexión (Create connection).

LÍNEA DE COMANDOS

Ingresa el comando bq mk y suministra la marca de conexión --connection. También se requieren las siguientes marcas:

  • --connection_type
  • --properties
  • --connection_credential
  • --project_id
  • --location
  • (nombre de la conexión)

    bq mk --connection --connection_type='CLOUD_SQL' --properties=[PROPERTIES] --connection_credential=[CREDENTIALS] --project_id=[PROJECT_ID] --location=[LOCATION] new_connection
    

Donde:

  • --connection_type siempre es CLOUD_SQL.
  • --properties contiene los parámetros para la conexión creada en formato JSON. Por ejemplo: --properties='{"param":"param_value"}'. Para crear un recurso de conexión, debes suministrar los parámetros instanceID, database y type. Los parámetros `friendly_name y description son opcionales.
  • --connection_credential debe contener los parámetros username y password.
  • --project_id es el ID del proyecto.
  • --location es la región en la que se encuentra tu instancia de Cloud SQL.
  • Ingresa un nombre para identificar la conexión que contenga solo letras, números y guiones bajos.

Por ejemplo, el siguiente comando crea un recurso de conexión nuevo llamado my_new_connection (nombre descriptivo: “My new connection”) en un proyecto con el ID federation-test.

bq mk --connection --connection_type='CLOUD_SQL' --properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' --connection_credential='{"username":"myusername", "password":"mypassword"}' --project_id=federation-test --location=us my_new_connection

API

Usa el método projects.locations.transferConfigs.create y suministra una instancia del recurso TransferConfig.

Visualiza los recursos de conexión

Console

  1. Para ver el estado de tus recursos de conexión, dirígete a la IU web de BigQuery.

    Ir a la IU web de BigQuery

  2. Los recursos de conexión se enumerarán en el nivel superior de tu proyecto, en un grupo llamado Conexiones externas (External connections).

  3. Haz clic en una conexión para ver información sobre ese recurso de conexión, como connection ID y Cloud SQL instance ID.

    Ver recursos de conexión

LÍNEA DE COMANDOS

Ingresa el comando bq show y suministra la marca de conexión --connection. Se requiere el connection_id con calificación completa.

    bq show --connection project:location.connection_id

Por ejemplo, el siguiente comando crea un recurso de conexión llamado nuevo my_new_connection en un proyecto con el ID federation-test ubicado en la región us.

    bq show --connection federation-test:us.my_new_connection

API

Usa el método projects.locations.connections.list y suministra una instancia del recurso list. Consulta la sección de referencia de la API de REST.

Otorga permisos a otro usuario

A fin de que otro usuario use el recurso de conexión para consultas federadas de Cloud SQL, el usuario bigquery.admin debe otorgarle la siguiente función en IAM: BigQuery Connection User. Esta función de IAM incluye los siguientes permisos:

  • bigquery.connections.get
  • bigquery.connections.list
  • bigquery.connections.use
  • bigquery.connections.getIamPolicy

El usuario bigquery.admin también puede otorgar a otros usuarios una función llamada BigQuery Connection Admin, que incluye los mismos permisos que BigQuery Connection User y permisos adicionales para crear, actualizar y borrar conexiones existentes, además de establecer la política de IAM sobre las conexiones.

  • bigquery.connections.create
  • bigquery.connections.update
  • bigquery.connections.setIamPolicy
  • bigquery.connections.delete

Precios

Cuando realices una consulta sobre Cloud SQL desde BigQuery, se te cobrará por la cantidad de bytes que lea la consulta. Para obtener más información, consulta Precios de consultas. No hay cuotas ni cargos adicionales para las consultas federadas de Cloud SQL durante el período Beta.

Referencia

Visualiza un esquema de tabla de Cloud SQL

Puedes usar la función EXTERNAL_QUERY() para consultar tablas information_schema a fin de acceder a los metadatos de la base de datos, como la lista de todas las tablas en la base de datos o el esquema de tabla. Las siguientes consultas de ejemplo de information_schema funcionan en MySQL y PostgreSQL. Puedes obtener más información sobre las tablas information_schema de MySQL y las tablas information_schema de PostgreSQL.

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

Detalles del recurso de conexión

Nombre de la propiedad Valor Descripción
name string Nombre del recurso de conexión con el formato project_id.location_id.connection_id
location string Ubicación de la conexión, que es la misma que la ubicación de la instancia de Cloud SQL, con las siguientes excepciones: us-central1 de Cloud SQL se asigna a US de BigQuery, mientras que europe-west1 de Cloud SQL se asigna a EU de BigQuery
friendlyName string Un nombre visible fácil de usar para la conexión
description string Descripción de la conexión
cloudSql.type string Puede ser “POSTGRES” o “MYSQL”
cloudSql.instanceId string Nombre de la instancia de Cloud SQL, por lo general, en el formato siguiente:

Project-id:location-id:instance-id

Puedes encontrar el ID de la instancia en la página de detalles de la instancia de Cloud SQL
cloudSql.database string La base de datos de Cloud SQL a la que deseas conectarte

Detalles del recurso de credencial de conexión

Nombre de la propiedad Valor Descripción
username string Nombre de usuario de la base de datos
password string Contraseña de la base de datos

Asignaciones de tipos de datos

Cuando ejecutas una consulta federada de Cloud SQL, los datos de Cloud SQL (en los tipos de datos de MySQL o PostgreSQL) se convierten en tipos de SQL estándar de BigQuery. A continuación, se muestran las asignaciones de tipos de datos de MySQL a BigQuery y PostgreSQL a BigQuery.

Debes saber la siguiente información sobre la asignación:

  • La mayoría de los tipos de datos de MySQL pueden coincidir con el mismo tipo de datos de BigQuery, con algunas excepciones, como decimal, timestamp y time.
  • PostgreSQL admite muchos tipos de datos no estándar que no son compatibles con BigQuery, por ejemplo, money, path, uuid y boxer, entre otros.
  • El rango de valores numéricos de BigQuery es más pequeño que el de MySQL y PostgreSQL.

Soluciona errores

Si tu consulta externa contiene un tipo de datos que no es compatible con BigQuery, fallará de inmediato. Puedes convertir el tipo de datos no admitido en un tipo de datos de MySQL o PostgreSQL diferente que sea compatible. Consulta los tipos de datos no compatibles en la solución de problemas para obtener más información sobre cómo convertir tipos.

Asignación de tipos de MySQL a BigQuery

Tipo de MySQL Descripción en MySQL Tipo de BigQuery Diferencias entre los tipos
Número entero
INT 4 bytes, 2^32 - 1 INT64
TINYINT 1 byte, 2^8 - 1 INT64
SMALLINT 2 bytes, 2^16 - 1 INT64
MEDIUMINT 3 bytes, 2^24 - 1 INT64
BIGINT 8 bytes, 2^64 - 1 INT64
UNSIGNED BIGINT 8 bytes, 2^64 - 1 NUMERIC
Numérico exacto
DECIMAL (M, D) Un decimal se representa mediante (M,D) en el que M es la cantidad total de dígitos y D es la cantidad de decimales. M <= 65 NUMERIC

El rango de NUMERIC en BigQuery es más pequeño (solo admite una precisión de 38 dígitos decimales y 9 dígitos decimales de escala).
Numérico aproximado
FLOAT (M,D) 4 bytes, M <= 23 FLOAT64
DOUBLE (M,D) 8 bytes, M <= 53 FLOAT64
Fecha y hora
TIMESTAMP De '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC TIMESTAMP TIMESTAMP de MySQL se recupera como zona horaria UTC sin importar desde dónde llame el usuario a BigQuery.
DATETIME De '1000-01-01 00:00:00' a '9999-12-31 23:59:59' DATETIME
DATE De '1000-01-01' a '9999-12-31' DATE
TIME Hora en formato 'HH:MM:SS'
De '-838:59:59' a '838:59:59'
TIME
El intervalo de TIME en BigQuery es menor, de 00:00:00 a 23:59:59.
YEAR INT64
Carácter y strings
ENUM objeto de string con un valor elegido de una lista de valores permitidos STRING
CHAR (M) Una string de longitud fija de entre 1 y 255 caracteres STRING
VARCHAR (M) Una string de longitud variable de entre 1 y 255 caracteres STRING
TEXT Un campo con una longitud máxima de 65535 caracteres STRING
TINYTEXT Columna TEXT con una longitud máxima de 255 caracteres STRING
MEDIUMTEXT Columna TEXT con una longitud máxima de 16777215 caracteres STRING
LONGTEXT Columna TEXT con una longitud máxima de 4294967295 caracteres STRING
Binario
BLOB Un objeto binario grande con una longitud máxima de 65535 caracteres BYTE
MEDIUM_BLOB Un BLOB con una longitud máxima de 16777215 caracteres BYTE
LONG_BLOB Un BLOB con una longitud máxima de 4294967295 caracteres BYTE
TINY_BLOB Un BLOB con una longitud máxima de 255 caracteres BYTE
Otro
SET Cuando se declara la columna SET, se deben predefinir algunos valores. Luego, se debe usar INSERT en cualquier conjunto de valores predefinidos para esta columna. STRING
GEOMETRY GEOMETRY AÚN NO SE ADMITE
BIT INT64 AÚN NO SE ADMITE

Asignación de tipos de PostgresSQL a BigQuery

Nombre Descripción Tipo de BigQuery Diferencias entre los tipos
Número entero
smallint 2 bytes, de -32768 a +32767 INT64
smallserial Ver smallint INT64
integer 4 bytes, de -2147483648 a +2147483647 INT64
serial Ver integer INT64
bigint 8 bytes, de -9223372036854775808 a 9223372036854775807 INT64
bigserial Ver bigint INT64
Numérico exacto
numeric [ (p, s) ] Precisión hasta 1,000. NUMERIC El rango de NUMERIC en BigQuery es más pequeño (solo admite una precisión de 38 dígitos decimales y 9 dígitos decimales de escala).
Decimal [ (p, s) ] Ver numeric NUMERIC Ver numeric
money 8 bytes, 2 dígitos de escala, de -92233720368547758.08 a +92233720368547758.07 NO ADMITIDO
Numérico aproximado
real 4 bytes, número de punto flotante de precisión simple FLOAT64
double precision 8 bytes, número de punto flotante de precisión doble FLOAT64
Fecha y hora
date Fecha de calendario (año, mes, día) DATE
time [ (p) ] [ without time zone ] Hora del día (sin zona horaria) TIME
time [ (p) ] with time zone Hora del día con la zona horaria incluida NO ADMITIDO
timestamp [ (p) ] [ without time zone ] Fecha y hora (sin zona horaria) DATETIME
timestamp [ (p) ] with time zone Fecha y hora con la zona horaria incluida TIMESTAMP TIMESTAMP de PostgreSQL se recupera como zona horaria UTC sin importar desde dónde llame el usuario a BigQuery.
interval Un intervalo de tiempo NO ADMITIDO
Carácter y strings
character [ (n) ] String de caracteres de longitud fija STRING
character varying [ (n) ] String de caracteres de longitud variable STRING
text String de caracteres de longitud variable STRING
Binario
bytea Datos binarios (“arreglo de bytes”) BYTES
bit [ (n) ] String de bits de longitud fija BYTES
bit varying [ (n) ] String de bits de longitud variable BYTES
Otro
boolean Lógica booleana (verdadero o falso) BOOL
inet Dirección de host IPv4 o IPv6 NO ADMITIDO
path Ruta geométrica en un plano NO ADMITIDO
pg_lsn Número de secuencia de registro de PostgreSQL NO ADMITIDO
point Punto geométrico en un plano NO ADMITIDO
polygon Ruta geométrica cerrada en un plano NO ADMITIDO
tsquery Consulta de búsqueda de texto NO ADMITIDO
tsvector Documento de búsqueda de texto NO ADMITIDO
txid_snapshot Instantánea del ID de transacción a nivel de usuario NO ADMITIDO
uuid Identificador único universal NO ADMITIDO
xml Datos XML STRING
box Cuadro rectangular en un plano NO ADMITIDO
cidr Dirección de red IPv4 o IPv6 NO ADMITIDO
circle Círculo en un plano NO ADMITIDO
interval [ fields ] [ (p) ] Intervalo de tiempo NO ADMITIDO
json Datos JSON textuales STRING
jsonb Datos JSON binarios descompuestos NO ADMITIDO
line Línea infinita en un plano NO ADMITIDO
lseg Segmento de línea en un plano NO ADMITIDO
macaddr Dirección MAC (Control de acceso a medios) NO ADMITIDO
macaddr8 Dirección MAC (Control de acceso a medios) en formato EUI-64 NO ADMITIDO

Problemas conocidos y limitaciones

Regiones

Las consultas federadas de Cloud SQL solo se admiten en regiones compatibles con Cloud SQL y BigQuery. (La federación de consultas se admite en todas las regiones de BigQuery, pero no en todas las regiones de Cloud SQL).

Puedes ejecutar una consulta federada entre regiones de acuerdo con las siguientes reglas.

Multirregiones

Una multirregión de BigQuery puede realizar consultas en cualquier región de Cloud SQL en la misma ubicación (US, EU). Por ejemplo:

  • La multirregión US de BigQuery puede realizar consultas en las regiones us-central1, us-east4, us-west2 y demás de Cloud SQL.
  • La multirregión de BigQuery EU puede realizar consultas en las regiones europe-north1, europe-west2 y demás de Cloud SQL.

Regiones individuales

Una región individual de BigQuery solo puede realizar consultas en Cloud SQL en la misma región. Por ejemplo:

  • La región us-east4 de BigQuery solo puede realizar consultas en us-east4 de Cloud SQL.

Aunque BigQuery y Cloud SQL están disponibles en las mismas regiones individuales que esta versión Beta, algunas regiones no son compatibles. Consulta la siguiente tabla para obtener una asignación detallada.

Región de Cloud SQL Región o multirregión de BigQuery
northamerica-northeast1 US o Northamerica-northeast1
us-central NO ADMITIDO: esta región de la instancia de Cloud SQL es V1.
Las consultas federadas solo son compatibles con la instancia V2.
us-central1 US
us-east1 NO ADMITIDO
us-east4 US o us-east4
us-west1 NO ADMITIDO
us-west2 US o us-west2
southamerica-east1 southamerica-east1
europe-north1 EU o europe-north1
europe-west1 EU
europe-west2 EU o europe-west2
europe-west3 NO ADMITIDO
europe-west4 NO ADMITIDO
europe-west6 EU o europe-west6
asia-east1 asia-east1
asia-east2 asia-east2
asia-northeast1 asia-northeast1
asia-south1 asia-south1
asia-southeast1 asia-southeast1
australia-southeast1 australia-southeast1

Cuotas y otros límites

  • Rendimiento: una consulta federada no suele ser tan rápida como las consultas al almacenamiento de BigQuery. BigQuery debe esperar a que la base de datos de origen ejecute la consulta externa y mueva de forma temporal los datos de Cloud SQL a BigQuery. Por lo general, las bases de datos de origen como MySQL o PostgreSQL no están optimizadas para consultas analíticas complejas.
  • Cuota: los usuarios deben controlar la cuota de consultas en Cloud SQL. No hay una configuración de cuota adicional para las consultas federadas. Para lograr el aislamiento de la carga de trabajo, se recomienda consultar solo una réplica de lectura de la base de datos.
  • Cantidad máxima de bytes facturados permitidos: este campo no es compatible con consultas federadas en este momento. Por ahora, no es posible calcular los bytes facturados antes de la ejecución efectiva de las consultas federadas.
  • Instancias limitadas de Cloud SQL: las consultas federadas solo son compatibles con la instancia de Cloud SQL v2 con IP pública (en lugar de IP privada).
  • Sujeta a las cuotas y limitaciones de PostgreSQL y MySQL en Cloud SQL.
  • Número de conexiones: una consulta federada puede tener como máximo 10 conexiones únicas.

Soluciona problemas

En esta sección, se proporciona ayuda para solucionar los problemas más comunes que se encuentran durante la configuración de una conexión. En esta sección, no se abarcan todos los problemas o mensajes de error posibles.

Problemas generales

Cuando diagnosticas problemas generales de transferencia, debes verificar lo siguiente:

  • Deben completarse todos los pasos en la sección “Antes de comenzar” de la página de documentación para tu conexión.
  • Las propiedades de configuración de la conexión deben ser correctas.

Si tu configuración de conexión es correcta y se otorgan los permisos adecuados, revisa la siguiente información para encontrar soluciones a los problemas más comunes.

Problema: BigQuery y Cloud SQL no están en la misma ubicación.
Resolución: las consultas federadas de Cloud SQL solo se admiten en regiones compatibles con Cloud SQL y BigQuery. El conjunto de datos de BigQuery y la instancia de Cloud SQL deben estar en la misma región o la misma ubicación si el conjunto de datos se encuentra en una ubicación multirregión, como US y EU. Consulta los problemas y limitaciones conocidos para obtener más información sobre las regiones.
Problema: el rendimiento es más lento de lo que debería.
Resolución: el rendimiento de las consultas federadas no es tan alto como el de las consultas sobre datos almacenados en BigQuery, porque la consulta federada tiene que realizar una consulta externa a Cloud SQL, mostrar los datos en una tabla temporal de BigQuery, asignar los datos a los tipos de datos de BigQuery y ejecutar la consulta en BigQuery. La ventaja es que, aunque la consulta no tiene un rendimiento tan alto, no es necesario volver a copiar, mover o almacenar los datos.
Problema: ¿qué formato debe tener el nombre de la conexión?
Resolución: el nombre de la conexión debe incluir proyecto, ubicación y connection_id. Debe cumplir con este patrón: project_id.location_id.connection_id Por ejemplo: federation-test.us.my_new_connection.

Tipos de datos no admitidos

Si tu consulta externa contiene un tipo de datos que no es compatible con BigQuery, fallará de inmediato. Puedes convertir el tipo de datos no admitido en un tipo de datos compatible de MySQL o PostgreSQL diferente.

  • Tipo de datos MySQL no admitido

    • Mensaje de error: Invalid table-valued function external_query Found unsupported MySQL type in BigQuery. at [1:15]
    • Tipo no admitido: GEOMETRY, BIT
    • Resolución: convierte el tipo de datos no admitido en STRING
    • Ejemplo: SELECT ST_AsText(ST_GeomFromText('POINT(1 1)'));. Este comando convierte el tipo de datos no admitido GEOMETRY en STRING
  • Tipo de datos PostgresSQL no admitido

    • Mensaje de error: Invalid table-valued function external_query Postgres type (OID = 790) is not supported now at [1:15]
    • Tipo no admitido: money, time with time zone, inet, path, pg_lsn, point, polygon, tsquery, tsvector, txid_snapshot, uuid, box, cidr, circle, interval, jsonb, line, lseg, macaddr, macaddr8
    • Resolución: convierte el tipo de datos no admitido en STRING
    • Ejemplo: SELECT CAST('12.34'::float8::numeric::money AS varchar(30));. Este comando convierte el tipo de datos no admitido money en string
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.