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 función nueva: 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 de BigQuery, 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.

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:

  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 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. 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

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

    API de conexión de BigQuery

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 consultas de Cloud SQL, consulta la sección Otorga permisos a otro usuario.

Otorga acceso de bigquery.admin

Para otorgar la función bigquery.admin, haz lo siguiente:

Console

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

    Abrir la página 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

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 o user.
  • 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 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

  1. Para crear un recurso de conexión, ve a la IU web de BigQuery en Cloud Console.

    Ir a Cloud Console

  2. En el menú  Agregar datos (Add data), selecciona Fuentes de datos externa (External data source).

    Crea un recurso de conexión.

  3. 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 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).

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 es CLOUD_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ámetros instanceID, database y type. Los parámetros friendly_name y description son opcionales.
  • CREDENTIALS: Son los parámetros username y password.
  • 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.

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 y EU, 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: Es posible que haya una pequeña demora antes de que aparezcan nuevas conexiones en la IU web de BigQuery. Cambia a un proyecto diferente y espera hasta 30 segundos. Luego, vuelve al 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.

Registros de auditoría

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 o us-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 o europe-west3, entre otros.

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 en us-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 Incompatible 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
Países Bajos europe-west4 europe-west4 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 compatible GEOMETRY en STRING.
  • 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 admitido money en STRING.

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ón US. La ubicación de procesamiento de consultas de BigQuery es US.
  • 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 lea la consulta. Para obtener más información, consulta Precios de consulta.

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 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.

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

El rango de NUMERIC en BigQuery es más pequeño (solo admite una precisión de 38 dígitos decimales y una escala de 9 dígitos decimales).
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. BYTE
MEDIUM_BLOB Es un BLOB con una longitud máxima de 16,777,215 caracteres. BYTE
LONG_BLOB Es un BLOB con una longitud máxima de 4,294,967,295 caracteres. BYTE
TINY_BLOB Un BLOB con una longitud máxima de 255 caracteres BYTE
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 GEOMETRY 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 El rango de NUMERIC en BigQuery es más pequeño (solo admite una precisión de 38 dígitos decimales y una escala de 9 dígitos decimales).
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