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
- Elige un proyecto de Google Cloud que incluya la instancia de Cloud SQL que deseas consultar.
- Un usuario
bigquery.admin
crea un recurso de conexión en BigQuery. - El usuario administrador otorga permiso para usar el recurso de conexión al usuario B.
- Si el administrador y el usuario B son la misma persona, no hay necesidad de otorgar el permiso.
- El usuario B escribe una consulta en BigQuery con la función
EXTERNAL_QUERY()
nueva.
Sintaxis de consultas federadas
La consulta federada presenta una función nueva: EXTERNAL_QUERY
.
Sintaxis
SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query[, options]);
connection_id (string): El nombre del recurso de conexión de base de datos que creas en Cloud Console, la herramienta de línea de comandos de
bq
o la API de BigQuery.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.
opciones (string): una string opcional de un mapa de formato JSON con pares clave-valor de nombre y valor de opción (ambos distinguen entre mayúsculas y minúsculas).
Opciones de ejemplo
{"default_type_for_decimal_columns":"numeric"}
Opciones compatibles:
Nombre de la opción Descripción "default_type_for_decimal_columns" Puede ser "float64", "numeric", "bignumeric" o "string". Con esta opción, el tipo decimal de MySQL o el tipo numérico de PostgreSQL se mapeará al tipo de BigQuery proporcionado. Cuando no se proporciona esta opción, el tipo decimal de MySQL o el tipo numérico de PostgreSQL se asignará al tipo NUMERIC de BigQuery.
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 datos 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. Por el momento, estos datos no están disponibles en BigQuery, pero sí lo están 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:
- 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 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
- 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
. En el siguiente ejemplo de consulta, las filas se ordenan por ID de cliente en Cloud SQL, pero BigQuery no generará las filas de resultados en ese orden.
SELECT * FROM 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 API de conexión de BigQuery en la biblioteca de API.
- En el menú desplegable, selecciona el proyecto que contenga la 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 habilitas la API de conexión de BigQuery, se crea de forma automática una cuenta de servicio administrada por la administración de identidades y accesos (IAM) de Google Cloud 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 de tener la función de IAM predefinida
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 las consultas de Cloud SQL, consulta Cómo compartir un recurso de conexión.
Otorga acceso de bigquery.admin
Para otorgar la función bigquery.admin
, haz lo siguiente:
Console
Abre la página de IAM en Cloud Console.
Haz clic en Seleccionar un proyecto.
Selecciona un proyecto y haz clic en Abrir.
Haz clic en Agregar para agregar miembros nuevos al proyecto y configura sus permisos.
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).
gcloud
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 vinculación única a la política de IAM del proyecto, escribe el siguiente comando. Para agregar un usuario, proporciona la marca --member
con el formato user:user@example.com
. Para agregar un grupo, proporciona 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
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- group/user es
group
ouser
. - address es la dirección de correo electrónico del usuario o del 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 Funciones y permisos predefinidos.
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 y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.
Crea un recurso de conexión
Console
Para crear un recurso de conexión, ve a la página de BigQuery en Cloud Console.
En el menú
Agregar datos (Add data), selecciona Fuentes de datos externa (External data source).En el panel Fuentes de datos externa, ingresa la siguiente información:
- En Tipo de conexión (Connection type), selecciona MySQL o Postgres.
- 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 la conexión (Connection location), selecciona una ubicación (o región) de BigQuery que sea compatible con la región de tu instancia de Cloud SQL.
- 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 ayude a identificar 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 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).
Haz clic en Crear conexión (Create connection).
bq
Ingresa el comando bq mk
y proporciona la marca de conexión --connection
. También se requieren las siguientes marcas:
--connection_type
--connection_type
siempre esCLOUD_SQL
--properties
--connection_credential
--project_id
--location
Un nombre para la conexión. Ingresa un nombre para identificar la conexión que contenga solo letras, números y guiones bajos.
bq mk --connection --connection_type='CLOUD_SQL' --properties=PROPERTIES --connection_credential=CREDENTIALS --project_id=PROJECT_ID --location=LOCATION new_connection
Reemplaza lo siguiente:
PROPERTIES
: Son 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 proporcionar los parámetrosinstanceID
,database
ytype
. Los parámetrosfriendly_name
ydescription
son opcionales.CREDENTIALS
: Son los parámetrosusername
ypassword
.PROJECT_ID
: Es el ID de tu proyecto.LOCATION
: Es la región en la que se encuentra tu instancia de Cloud SQL.
Por ejemplo, con el siguiente comando, se crea un recurso de conexión nuevo llamado my_new_connection (nombre descriptivo: “Mi conexión nueva”) 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
Dentro de la API de conexión de BigQuery, puedes invocar CreateConnection
dentro de ConnectionService
para crear una instancia de conexión. Consulta la página de la biblioteca cliente para obtener más detalles.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Soluciona problemas
En esta sección, se proporciona ayuda para solucionar los problemas que puedes encontrar cuando configuras una conexión nueva. No se abarcan todos los problemas o mensajes de error posibles.
Cuando diagnosticas problemas generales de conexión, debes verificar lo siguiente:
- Completaste todos los pasos de la sección Antes de comenzar.
- Las propiedades de configuración de la conexión son correctas.
- Tienes los permisos adecuados para crear una conexión.
Si tus propiedades de conexión son correctas y se otorgan los permisos adecuados, consulta las siguientes soluciones para problemas 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 el conjunto de datos de BigQuery debe estar en una ubicación multirregional, como
US
yEU
, en la misma área geográfica compatible con la región de Cloud SQL. Consulta Regiones compatibles para obtener más información sobre las regiones y la compatibilidad de regiones. - Problema: La conexión recién creada no aparece en el proyecto.
- Resolución: Puede haber un ligero retraso antes de que aparezcan conexiones nuevas en Cloud Console. Cambia a un proyecto diferente y espera hasta 30 segundos. Luego, vuelve a activar o desactivar el proyecto. Debería aparecer la nueva conexión.
- 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 a Cloud SQL de forma externa, mostrar los datos en una tabla temporal de BigQuery, asignar los datos a un tipo de datos de BigQuery y ejecutar la consulta en BigQuery. Aunque el rendimiento de las consultas no es tan alto, no es necesario volver a copiar, mover ni almacenar los datos.
- Problema: Formato del nombre de la conexión
- Resolución: El nombre de la conexión debe incluir el ID de proyecto, de ubicación y de conexión. El ID de conexión debe cumplir con este patrón:
project_id.location_id.connection_id
, por ejemplo,federation-test.us.my_new_connection
Administra recursos de conexión
Para obtener información sobre cómo ver, enumerar, compartir, actualizar y borrar recursos de conexión, consulta Trabaja con conexiones.
Audit Logging
Para obtener información sobre el registro de auditoría de los recursos de conexión, consulta Descripción general de los registros de auditoría de BigQuery.
Regiones admitidas
Las consultas federadas de Cloud SQL solo se admiten en regiones compatibles con Cloud SQL y BigQuery.
Tipos de regiones o ubicaciones
Hay dos tipos de ubicaciones:
Una región es un lugar geográfico específico, como Londres.
Una multirregión es un área geográfica grande, como Estados Unidos, que contiene dos o más lugares geográficos.
Puedes crear una conexión y ejecutar una consulta federada entre regiones de acuerdo con las siguientes reglas.
Multirregiones
Una multirregión de BigQuery puede consultar cualquier región de Cloud SQL en la misma área geográfica grande (EE.UU., UE), por ejemplo:
- La multirregión US de BigQuery puede realizar consultas en cualquier región individual de Cloud SQL en el área geográfica de EE.UU., como
us-central1
,us-east4
ous-west2
, entre otros. - La multirregión EU de BigQuery puede realizar consultas en cualquier región individual de Cloud SQL en Estados miembros de la Unión Europea, como
europe-north1
oeurope-west3
, entre otros. - La conexión que se usa en la consulta debe residir en la misma ubicación que la
ubicación de la búsqueda. Por ejemplo, las consultas que se ejecutan desde la multirregión
US
deben hacer referencia a una conexión ubicada en la multirregiónUS
.
La ubicación de procesamiento de consultas es la ubicación multirregional, ya sea US
o EU
.
Para obtener más información sobre regiones y multirregiones, consulta la página Ubicaciones de conjuntos de datos.
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 individual
us-east4
de BigQuery solo puede consultar Cloud SQL enus-east4
.
En este ejemplo, la ubicación de procesamiento de consultas es la región individual de BigQuery.
Consulta la siguiente tabla para obtener un mapa detallado sobre las regiones que son compatibles con cada producto.
Ubicaciones regionales
Descripción de la región | Región de Cloud SQL | Región de BigQuery compatible | Multirregión de BigQuery compatible | |
---|---|---|---|---|
América | ||||
Iowa | us-central |
No compatible: esta región de la instancia de Cloud SQL es V1. Las consultas federadas solo admiten instancias V2 de Cloud SQL. |
||
Iowa | us-central1 |
us-central1 |
US |
|
Las Vegas | us-west4 |
us-west4 |
US |
|
Los Ángeles | us-west2 |
us-west2 |
US |
|
Montreal | northamerica-northeast1 |
northamerica-northeast1 |
US |
|
Virginia del Norte | us-east4 |
us-east4 |
US |
|
Oregón | us-west1 |
us-west1 |
US |
|
Salt Lake City | us-west3 |
us-west3 |
US |
|
São Paulo | southamerica-east1 |
southamerica-east1 |
||
Carolina del Sur | us-east1 |
us-east1 |
US |
|
Europa | ||||
Bélgica | europe-west1 |
europe-west1 |
EU |
|
Finlandia | europe-north1 |
europe-north1 |
EU |
|
Fráncfort | europe-west3 |
europe-west3 |
EU |
|
Londres | europe-west2 |
europe-west2 |
EU |
|
Netherlands | europe-west4 |
europe-west4 |
EU |
|
Varsovia | europe-central2 |
europe-central2 |
EU |
|
Zúrich | europe-west6 |
europe-west6 |
EU |
|
Asia-Pacífico | ||||
Hong Kong | asia-east2 |
asia-east2 |
||
Yakarta | asia-southeast2 |
asia-southeast2 |
||
Bombay | asia-south1 |
asia-south1 |
||
Osaka | asia-northeast2 |
asia-northeast2 |
||
Seúl | asia-northeast3 |
asia-northeast3 |
||
Singapur | asia-southeast1 |
asia-southeast1 |
||
Sídney | australia-southeast1 |
australia-southeast1 |
||
Taiwán | asia-east1 |
asia-east1 |
||
Tokio | asia-northeast1 |
asia-northeast1 |
Ubicaciones multirregionales
Las ubicaciones multirregionales no están disponibles para las instancias de Cloud SQL. Las multirregiones de Cloud SQL no se pueden usar para consultas federadas.
Los datos que están ubicados en la multirregión EU
no se almacenan en los centros de datos de europe-west2
(Londres) ni de europe-west6
(Zúrich).
Limitaciones
Instancias limitadas de Cloud SQL
Las consultas federadas solo son compatibles con la instancia V2 de Cloud SQL con IP pública (en lugar de IP privada).
Rendimiento
Es probable que las consultas federadas no sean tan rápidas como las consultas solo 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.
Las consultas externas son de solo lectura
La consulta externa que se ejecutará en la base de datos de origen debe ser de solo lectura. Por lo tanto, las declaraciones DML o DDL no son compatibles.
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 MySQL o PostgreSQL compatible 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 compatible en STRING.
- Por ejemplo:
SELECT ST_AsText(ST_GeomFromText('POINT(1 1)'));
; este comando convierte el tipo de datos no compatibleGEOMETRY
enSTRING
.
- Mensaje de error:
El tipo de datos de PostgreSQL no es compatible
- 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.
- Por ejemplo:
SELECT CAST('12.34'::float8::numeric::money AS varchar(30));
; este comando convierte el tipo de datos no admitidomoney
enSTRING
.
- Mensaje de error:
Cuotas y límites
- Consulta federada entre regiones: Si la ubicación de procesamiento de consultas de BigQuery y la ubicación de la instancia de Cloud SQL son diferentes, es una consulta entre regiones. Puedes ejecutar hasta 1 TB en consultas entre regiones por proyecto al día.
- Este es un ejemplo de una consulta entre regiones:
- La instancia de Cloud SQL está en
us-west1
, mientras que la conexión de BigQuery se basa en la multirregiónUS
. La ubicación de procesamiento de consultas de BigQuery esUS
.
- La instancia de Cloud SQL está en
- Este es un ejemplo de una consulta entre regiones:
- 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: por el momento, este campo no es compatible con consultas federadas. Por ahora, no es posible calcular los bytes facturados antes de la ejecución efectiva de las consultas federadas.
- Se aplican cuotas y limitaciones de Cloud SQL MySQL y PostgreSQL.
- Número de conexiones: una consulta federada puede tener como máximo 10 conexiones únicas.
Precios
Cuando realices una consulta sobre Cloud SQL desde BigQuery, se te cobrará por la cantidad de bytes que se muestren a partir de la consulta externa. Para obtener más información, consulta los precios de análisis a pedido.
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 listas de todas las tablas en la base de datos o el esquema de la 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 | Es el nombre del recurso de conexión con el formato project_id.location_id.connection_id |
location |
string | Es la 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 mapea a de EE.UU. de BigQuery, y europe-west1 de Cloud SQL se mapea a la UE de BigQuery. |
friendlyName |
string | Es un nombre visible fácil de usar para la conexión. |
description |
string | Es la descripción de la conexión. |
cloudSql.type |
string | Puede ser “POSTGRES” o “MYSQL”. |
cloudSql.instanceId |
string | Es el nombre de la instancia de Cloud SQL, por lo general, con el siguiente formato:Project-id:location-id:instance-id Puedes encontrar el ID de la instancia en la página de detalles Instancias de Cloud SQL. |
cloudSql.database |
string | Es 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. Los siguientes mapas de tipos de datos son de MySQL a BigQuery y de PostgreSQL a BigQuery.
Debes saber la siguiente información sobre el mapa:
- 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
ytime
. - PostgreSQL admite muchos tipos de datos no estándar que no son compatibles con BigQuery, por ejemplo,
money
,path
,uuid
yboxer
, entre otros. - Los tipos de datos numéricos en MySQL y PostgreSQL se asignarán al
valor de
NUMERIC
de BigQuery de forma predeterminada. El rango de valoresNUMERIC
de BigQuery es más pequeño que el de MySQL y PostgreSQL. También se puede asignar aBIGNUMERIC
,FLOAT64
, oSTRING
con “default_type_for_decimal_columns” en opciones de EXTERNAL_QUERY.
Manejo de errores
Si tu consulta externa contiene un tipo de datos que BigQuery no admite, la consulta fallará de inmediato. Puedes convertir el tipo de datos incompatible en un tipo de datos de MySQL o PostgreSQL diferente que sí sea compatible. Para obtener más información acerca de cómo realizar la conversión, consulta Tipos de datos incompatibles en Soluciona problemas.
Mapa 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) | Es un decimal representado por (M,D) en el que M es la cantidad total de dígitos y D es la cantidad de decimales. M <= 65 |
NUMERIC, BIGNUMERIC, FLOAT64, or STRING |
DECIMAL (M,D) se asignará a NUMERIC de forma predeterminada o se puede asignar a BIGNUMERIC, FLOAT64, o a STRING con default_type_for_decimal_columns. |
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 en MySQL se recupera como zona horaria UTC sin importar desde dónde llames 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 | ||
Caracteres y strings | |||
ENUM | Es un objeto de string con un valor elegido de una lista de valores permitidos. | STRING | |
CHAR (M) | Es una string de longitud fija de entre 1 y 255 caracteres. | STRING | |
VARCHAR (M) | Es una string de longitud variable entre 1 y 255 caracteres. | STRING | |
TEXT | Es un campo con una longitud máxima de 65,535 caracteres. | STRING | |
TINYTEXT | Es una columna TEXT con una longitud máxima de 255 caracteres. | STRING | |
MEDIUMTEXT | Es una columna TEXT con una longitud máxima de 16,777,215 caracteres. | STRING | |
LONGTEXT | Es una columna TEXT con una longitud máxima de 4,294,967,295 caracteres. | STRING | |
Binario | |||
BLOB | Es un objeto binario grande con una longitud máxima de 65,535 caracteres. | BYTES | |
MEDIUM_BLOB | Es un BLOB con una longitud máxima de 16,777,215 caracteres. | BYTES | |
LONG_BLOB | Es un BLOB con una longitud máxima de 4,294,967,295 caracteres. | BYTES | |
TINY_BLOB | Un BLOB con una longitud máxima de 255 caracteres | BYTES | |
BINARY | Una string binaria de longitud fija de entre 1 y 255 caracteres | BYTES | |
VARBINARY | Una string binaria de longitud variable entre 1 y 255 caracteres | BYTES | |
Otro | |||
SET | Cuando declares la columna SET, define con anterioridad algunos valores. Luego, usa INSERT para agregar cualquier conjunto de valores predefinidos a esta columna. | STRING |
|
GEOMETRY | GEOGRAPHY | AÚN COMPATIBLE | |
BIT | INT64 | AÚN COMPATIBLE |
Asignación de tipos de PostgreSQL a BigQuery
Nombre | Descripción | Tipo de BigQuery | Diferencias entre los tipos |
---|---|---|---|
Número entero | |||
smallint | 2 bytes, de -32,768 a +32,767. | INT64 | |
smallserial | Consulta smallint. | INT64 | |
integer | 4 bytes, de -2,147,483,648 a +2,147,483,647. | INT64 | |
serial | Consulta integer. | INT64 | |
bigint | 8 bytes, de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807. | INT64 | |
bigserial | Consulta bigint. | INT64 | |
Numérico exacto | |||
numeric [ (p, s) ] | Precisión hasta 1,000. | NUMERIC, BIGNUMERIC, FLOAT64, or STRING | numeric [ (p, s) ] se asignará a NUMERIC de forma predeterminada o se puede asignar a BIGNUMERIC, FLOAT64 o STRING con default_type_for_decimal_columns. |
Decimal [ (p, s) ] | Consulta numeric. | NUMERIC | Consulta numeric. |
money | 8 bytes, 2 dígitos de escala, de -92,233,720,368,547,758.08 a +92,233,720,368,547,758.07. | INCOMPATIBLE | |
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 | Es la fecha de calendario (año, mes, día). | DATE | |
time [ (p) ] [ without time zone ] | Es la hora del día (sin zona horaria). | TIME | |
time [ (p) ] with time zone | Es la hora del día con la zona horaria incluida. | INCOMPATIBLE | |
timestamp [ (p) ] [ without time zone ] | Es la fecha y la hora (sin zona horaria). | DATETIME | |
timestamp [ (p) ] with time zone | Es la fecha y la hora con la zona horaria incluida. | TIMESTAMP | TIMESTAMP en PostgreSQL se recupera como zona horaria UTC sin importar desde dónde llames a BigQuery. |
interval | Es un intervalo de tiempo. | INCOMPATIBLE | |
Caracteres y strings | |||
character [ (n) ] | Es una string de caracteres de longitud fija. | STRING | |
character varying [ (n) ] | Es una string de caracteres de longitud variable. | STRING | |
text | Es una string de caracteres de longitud variable. | STRING | |
Binario | |||
bytea | Son datos binarios (“arreglo de bytes”). | BYTES | |
bit [ (n) ] | Es una string de bits de longitud fija. | BYTES | |
bit varying [ (n) ] | Es una string de bits de longitud variable. | BYTES | |
Otro | |||
boolean | Es un valor booleano lógico (verdadero o falso). | BOOL | |
inet | Es la dirección de host IPv4 o IPv6. | INCOMPATIBLE | |
path | Es la ruta geométrica en un plano. | INCOMPATIBLE | |
pg_lsn | Es el número de secuencia de registro de PostgreSQL. | INCOMPATIBLE | |
point | Es un punto geométrico en un plano. | INCOMPATIBLE | |
polygon | Es una ruta geométrica cerrada en un plano. | INCOMPATIBLE | |
tsquery | Es una consulta de búsqueda de texto. | INCOMPATIBLE | |
tsvector | Es un documento de búsqueda de texto. | INCOMPATIBLE | |
txid_snapshot | Es una instantánea del ID de transacción a nivel de usuario. | INCOMPATIBLE | |
uuid | Es un identificador único universal. | INCOMPATIBLE | |
xml | Son datos XML. | STRING | |
box | Es un cuadro rectangular en un plano. | INCOMPATIBLE | |
cidr | Es la dirección de red IPv4 o IPv6. | INCOMPATIBLE | |
circle | Es un círculo en un plano. | INCOMPATIBLE | |
interval [ fields ] [ (p) ] | Es un intervalo de tiempo. | INCOMPATIBLE | |
json | Son datos JSON textuales. | STRING | |
jsonb | Son datos JSON binarios descompuestos. | INCOMPATIBLE | |
line | Es una línea infinita en un plano. | INCOMPATIBLE | |
lseg | Es un segmento de línea en un plano. | INCOMPATIBLE | |
macaddr | Es una dirección MAC (Control de acceso a medios) | INCOMPATIBLE | |
macaddr8 | Es una dirección MAC (Control de acceso a medios) en formato EUI-64. | INCOMPATIBLE |