En esta página, se describe cómo configurar tu destino de BigQuery para transmitir datos desde una base de datos de origen con Datastream.
Configura los conjuntos de datos de destino
Cuando configuras conjuntos de datos para el destino de BigQuery, puedes seleccionar una de las siguientes opciones:
Dataset for each schema: El conjunto de datos se selecciona o crea en la ubicación de BigQuery especificada, según el nombre del esquema de la fuente. Como resultado, para cada esquema en la fuente, Datastream crea automáticamente un conjunto de datos en BigQuery.
Por ejemplo, si tienes una fuente de MySQL y esta fuente tiene una base de datos
mydb
y una tablaemployees
dentro de la base de datos, Datastream crea el conjunto de datosmydb
y la tablaemployees
en BigQuery.Si seleccionas esta opción, Datastream creará conjuntos de datos en el proyecto que contiene la transmisión. Aunque no es necesario que crees los conjuntos de datos en la misma región que tu transmisión, te recomendamos que mantengas todos los recursos de la transmisión, así como los conjuntos de datos, en la misma región para optimizar el costo y el rendimiento.
Un solo conjunto de datos para todos los esquemas: Puedes seleccionar un conjunto de datos de BigQuery para la transmisión. Datastream transmite todos los datos a este conjunto de datos. Para el conjunto de datos que selecciones, Datastream crea todas las tablas como
<schema>_<table>
.Por ejemplo, si tienes una fuente de MySQL y esta fuente tiene una base de datos
mydb
y una tablaemployees
dentro de la base de datos, Datastream crea la tablamydb_employees
en el conjunto de datos que selecciones.
Comportamiento de escritura
El tamaño máximo del evento cuando transmites datos a BigQuery es de 20 MB.
Cuando configures tu flujo, podrás seleccionar la forma en que Datastream escribe tus datos de cambio en BigQuery. Para obtener más información, consulta Cómo configurar el modo de escritura.
Cómo configurar el modo de escritura
Existen dos modos que puedes usar para definir cómo deseas que se escriban tus datos en BigQuery:
- Combinar: Este es el modo de escritura predeterminado. Cuando se selecciona esta opción, BigQuery refleja la forma en que se almacenan tus datos en la base de datos de origen. Esto significa que Datastream escribe todos los cambios en tus datos en BigQuery, y BigQuery luego consolida los cambios con los datos existentes, lo que crea tablas finales que son réplicas de las tablas de origen. Con el modo Merge, no se mantiene ningún registro histórico de los eventos de cambio. Por ejemplo, si insertas y, luego, actualizas una fila, BigQuery solo conserva los datos actualizados. Si luego borras la fila de la tabla de origen, BigQuery ya no conservará ningún registro de esa fila.
- Solo agregar: El modo de escritura de solo agregar te permite agregar datos a BigQuery como un flujo de cambios (eventos
INSERT
,UPDATE-INSERT
,UPDATE-DELETE
yDELETE
). Usa este modo cuando necesites conservar el estado histórico de tus datos. Para comprender mejor el modo de escritura de solo anexar, considera las siguientes situaciones:- Carga inicial de datos históricos: Después de la carga inicial de datos históricos, todos los eventos se escriben en BigQuery como eventos de tipo
INSERT
, con la misma marca de tiempo, el mismo identificador único universal (UUID) y el mismo número de secuencia de cambios. - Actualización de clave primaria: Cuando cambia una clave primaria, se escriben dos filas en BigQuery:
- Una fila
UPDATE-DELETE
con la clave primaria original - Una fila
UPDATE-INSERT
con la nueva clave primaria
- Una fila
- Actualización de fila: Cuando actualizas una fila, se escribe una sola fila
UPDATE-INSERT
en BigQuery. - Borrado de filas: Cuando borras una fila, se escribe una sola fila de
DELETE
en BigQuery.
- Carga inicial de datos históricos: Después de la carga inicial de datos históricos, todos los eventos se escriben en BigQuery como eventos de tipo
Metadatos de tabla
Datastream agrega una columna STRUCT
llamada datastream_metadata
a cada tabla que se escribe en el destino de BigQuery.
Modo de escritura de combinación
Si una tabla tiene una clave primaria en la fuente, la columna contiene los siguientes campos:
UUID
: Este campo tiene el tipo de datosSTRING
.SOURCE_TIMESTAMP
: Este campo tiene el tipo de datosINTEGER
.
Si una tabla no tiene una clave primaria, la columna contiene un campo adicional: IS_DELETED
. Este campo tiene el tipo de datos BOOLEAN
y muestra si los datos que Datastream transmite a la destinación están asociados con una operación DELETE
en la fuente. Las tablas sin claves primarias son de solo anexar.
Modo de escritura de solo agregado
La columna datastream_metadata
contiene los mismos campos para las tablas con y sin claves primarias:
UUID
: Este campo tiene el tipo de datosSTRING
.SOURCE_TIMESTAMP
: Este campo tiene el tipo de datosINTEGER
.CHANGE_SEQUENCE_NUMBER
: Este campo tiene el tipo de datosSTRING
. Es un número de secuencia interno que Datastream usa para cada evento de cambio.CHANGE_TYPE
: Este campo tiene el tipo de datosSTRING
. Indica el tipo de evento de cambio:INSERT
,UPDATE-INSERT
,UPDATE-DELETE
oDELETE
.SORT_KEYS
: Este campo contiene un array de valores deSTRING
. Puedes usar los valores para ordenar los eventos de cambio.
Usa tablas de BigQuery con la opción max_staleness
Como parte de la transferencia casi en tiempo real, Datastream usa la compatibilidad integrada de BigQuery para las operaciones de upsert, como la actualización, la inserción y el borrado de datos. Las operaciones de upsert te permiten actualizar de forma dinámica el destino de BigQuery a medida que se agregan, modifican o borran filas. Datastream transmite estas operaciones de upsert a la tabla de destino con la API de Storage Write de BigQuery.
Especifica el límite de inactividad de los datos
BigQuery aplica las modificaciones de la fuente en segundo plano de manera continua o en el tiempo de ejecución de la consulta, de acuerdo con el límite de inactividad de los datos configurado. Cuando Datastream crea una tabla nueva en BigQuery, la opción max_staleness
de la tabla se establece según el valor actual del límite de inactividad de los datos para la transmisión.
Para obtener más información sobre el uso de tablas de BigQuery con la opción max_staleness
, consulta Antigüedad de la tabla.
Controla los costos de BigQuery
Los costos de BigQuery se cobran por separado de los de Datastream. Para obtener información sobre cómo controlar los costos de BigQuery, consulta Precios de los CDC de BigQuery.
Tipos de datos de mapas
En la siguiente tabla, se enumeran las conversiones de tipos de datos de las bases de datos de origen admitidas al destino de BigQuery.
Base de datos de origen | Tipo de datos fuente | Tipo de datos de BigQuery |
---|---|---|
MySQL | BIGINT(size) |
INT64 |
MySQL | BIGINT (unsigned) |
DECIMAL |
MySQL | BINARY(size) |
STRING (hex encoded) |
MySQL | BIT(size) |
INT64 |
MySQL | BLOB(size) |
STRING (hex encoded) |
MySQL | BOOL |
INT64 |
MySQL | CHAR(size) |
STRING |
MySQL | DATE |
DATE |
MySQL | DATETIME(fsp) |
DATETIME |
MySQL | DECIMAL(precision, scale) |
Si el valor de precisión es <=38 y el valor de escala es <=9, entonces NUMERIC . De lo contrario, BIGNUMERIC |
MySQL | DOUBLE(size, d) |
FLOAT64 |
MySQL | ENUM(val1, val2, val3, ...) |
STRING |
MySQL | FLOAT(precision) |
FLOAT64 |
MySQL | FLOAT(size, d) |
FLOAT64 |
MySQL | INTEGER(size) |
INT64 |
MySQL | INTEGER (unsigned) |
INT64 |
MySQL |
|
JSON
|
MySQL | LONGBLOB |
STRING (hex encoded) |
MySQL | LONGTEXT |
STRING |
MySQL | MEDIUMBLOB |
STRING (hex encoded) |
MySQL | MEDIUMINT(size) |
INT64 |
MySQL | MEDIUMTEXT |
STRING |
MySQL | SET(val1, val2, val3, ...) |
STRING |
MySQL | SMALLINT(size) |
INT64 |
MySQL | TEXT(size) |
STRING |
MySQL | TIME(fsp) |
INTERVAL |
MySQL | TIMESTAMP(fsp) |
TIMESTAMP |
MySQL | TINYBLOB |
STRING (hex encoded) |
MySQL | TINYINT(size) |
INT64 |
MySQL | TINYTEXT |
STRING |
MySQL | VARBINARY(size) |
STRING (hex encoded) |
MySQL | VARCHAR |
STRING |
MySQL | YEAR |
INT64 |
Oracle | ANYDATA |
UNSUPPORTED |
Oracle | BFILE |
STRING |
Oracle | BINARY DOUBLE |
FLOAT64 |
Oracle | BINARY FLOAT |
FLOAT64 |
Oracle | BLOB |
BYTES |
Oracle | CHAR |
STRING |
Oracle | CLOB |
STRING |
Oracle | DATE |
DATETIME
|
Oracle | DOUBLE PRECISION |
FLOAT64 |
Oracle | FLOAT(p) |
FLOAT64 |
Oracle | INTERVAL DAY TO SECOND |
UNSUPPORTED |
Oracle | INTERVAL YEAR TO MONTH |
UNSUPPORTED |
Oracle | LONG /LONG RAW |
STRING |
Oracle | NCHAR |
STRING |
Oracle | NCLOB |
STRING |
Oracle | NUMBER(precision, scale>0) |
Si 0<p=<78, se asigna a tipos decimales con parámetros. Si p>=79, asigna STRING . |
Oracle | NVARCHAR2 |
STRING |
Oracle | RAW |
STRING |
Oracle | ROWID |
STRING |
Oracle | SDO_GEOMETRY |
UNSUPPORTED |
Oracle | SMALLINT |
INT64 |
Oracle | TIMESTAMP |
TIMESTAMP
|
Oracle | TIMESTAMP WITH TIME ZONE |
TIMESTAMP
|
Oracle | UDT (user-defined type) |
UNSUPPORTED |
Oracle | UROWID |
STRING |
Oracle | VARCHAR |
STRING |
Oracle | VARCHAR2 |
STRING |
Oracle | XMLTYPE |
UNSUPPORTED |
PostgreSQL | ARRAY |
JSON
|
PostgreSQL | BIGINT |
INT64 |
PostgreSQL | BIT |
BYTES |
PostgreSQL | BIT_VARYING |
BYTES |
PostgreSQL | BOOLEAN |
BOOLEAN |
PostgreSQL | BOX |
UNSUPPORTED |
PostgreSQL | BYTEA |
BYTES |
PostgreSQL | CHARACTER |
STRING |
PostgreSQL | CHARACTER_VARYING |
STRING |
PostgreSQL | CIDR |
STRING |
PostgreSQL | CIRCLE |
UNSUPPORTED |
PostgreSQL | DATE |
DATE |
PostgreSQL | DOUBLE_PRECISION |
FLOAT64 |
PostgreSQL | ENUM |
STRING |
PostgreSQL | INET |
STRING |
PostgreSQL | INTEGER |
INT64 |
PostgreSQL | INTERVAL |
INTERVAL |
PostgreSQL | JSON |
JSON |
PostgreSQL | JSONB |
JSON |
PostgreSQL | LINE |
UNSUPPORTED |
PostgreSQL | LSEG |
UNSUPPORTED |
PostgreSQL | MACADDR |
STRING |
PostgreSQL | MONEY |
FLOAT64 |
PostgreSQL | NUMERIC |
Si precisión = -1 , entonces STRING (los tipos NUMERIC de BigQuery requieren una precisión fija). De lo contrario, BIGNUMERIC /NUMERIC . Para obtener más información, consulta la sección Números de precisión arbitraria en la documentación de PostgreSQL. |
PostgreSQL | OID |
INT64 |
PostgreSQL | PATH |
UNSUPPORTED |
PostgreSQL | POINT |
UNSUPPORTED |
PostgreSQL | POLYGON |
UNSUPPORTED |
PostgreSQL | REAL |
FLOAT64 |
PostgreSQL | SMALLINT |
INT64 |
PostgreSQL | SMALLSERIAL |
INT64 |
PostgreSQL | SERIAL |
INT64 |
PostgreSQL | TEXT |
STRING |
PostgreSQL | TIME |
TIME |
PostgreSQL | TIMESTAMP |
TIMESTAMP |
PostgreSQL | TIMESTAMP_WITH_TIMEZONE |
TIMESTAMP |
PostgreSQL | TIME_WITH_TIMEZONE |
TIME |
PostgreSQL | TSQUERY |
STRING |
PostgreSQL | TSVECTOR |
STRING |
PostgreSQL | TXID_SNAPSHOT |
STRING |
PostgreSQL | UUID |
STRING |
PostgreSQL | XML |
STRING |
SQL Server | BIGINT |
INT64 |
SQL Server | BINARY |
BYTES |
SQL Server | BIT |
BOOL |
SQL Server | CHAR |
STRING |
SQL Server | DATE |
DATE |
SQL Server | DATETIME2 |
DATETIME |
SQL Server | DATETIME |
DATETIME |
SQL Server | DATETIMEOFFSET |
TIMESTAMP |
SQL Server | DECIMAL |
BIGNUMERIC |
SQL Server | FLOAT |
FLOAT64 |
SQL Server | IMAGE |
BYTES |
SQL Server | INT |
INT64 |
SQL Server | MONEY |
BIGNUMERIC |
SQL Server | NCHAR |
STRING |
SQL Server | NTEXT |
STRING |
SQL Server | NUMERIC |
BIGNUMERIC |
SQL Server | NVARCHAR |
STRING |
SQL Server | NVARCHAR(MAX) |
STRING |
SQL Server | REAL |
FLOAT64 |
SQL Server | SMALLDATETIME |
DATETIME |
SQL Server | SMALLINT |
INT64 |
SQL Server | SMALLMONEY |
NUMERIC |
SQL Server | TEXT |
STRING |
SQL Server | TIME |
TIME |
SQL Server | TIMESTAMP /ROWVERSION |
BYTES |
SQL Server | TINYINT |
INT64 |
SQL Server | UNIQUEIDENTIFIER |
STRING |
SQL Server | VARBINARY |
BYTES |
SQL Server | VARBINARY(MAX) |
BYTES |
SQL Server | VARCHAR |
STRING |
SQL Server | VARCHAR(MAX) |
STRING |
SQL Server | XML |
STRING |
Salesforce | BOOLEAN |
BOOLEAN |
Salesforce | BYTE |
BYTES |
Salesforce | DATE |
DATE |
Salesforce | DATETIME |
DATETIME |
Salesforce | DOUBLE |
BIGNUMERIC |
Salesforce | INT |
INT64 |
Salesforce | STRING |
STRING |
Salesforce | TIME |
TIME |
Salesforce | ANYTYPE (puede ser STRING , DATE , NUMBER o BOOLEAN ) |
STRING |
Salesforce | COMBOBOX |
STRING |
Salesforce | CURRENCY |
FLOAT64
La longitud máxima permitida es de 18 dígitos. |
Salesforce | DATACATEGORYGROUPREFERENCE |
STRING |
Salesforce | EMAIL |
STRING |
Salesforce | ENCRYPTEDSTRING |
STRING |
Salesforce | ID |
STRING |
Salesforce | JUNCTIONIDLIST |
STRING |
Salesforce | MASTERRECORD |
STRING |
Salesforce | MULTIPICKLIST |
STRING |
Salesforce | PERCENT |
FLOAT64
La longitud máxima permitida es de 18 dígitos. |
Salesforce | PHONE |
STRING |
Salesforce | PICKLIST |
STRING |
Salesforce | REFERENCE |
STRING |
Salesforce | TEXTAREA |
STRING
La longitud máxima permitida es de 255 caracteres. |
Salesforce | URL |
STRING |
Tipos de datos de MongoDB
Los documentos JSON binarios (BSON) de MongoDB se escriben en BigQuery en el formato de modo estricto de JSON extendido de MongoDB (v1). En la tabla, se muestra cómo se representan los tipos de datos en BigQuery, junto con valores de ejemplo.
Tipo de datos fuente | Valor de ejemplo | Valor de tipo JSON de BigQuery |
---|---|---|
DOUBLE |
3.1415926535
|
3.1415926535 |
STRING | "Hello, MongoDB!" | "Hello, MongoDB!" |
ARRAY |
| ["item1",123,true,{"subItem":"object in array"}] |
BINARY DATA |
new BinData(0, "SGVsbG8gQmluYXJ5IERhdGE=") |
{"$binary":"SGVsbG8gQmluYXJ5IERhdGE=","$type":"00"} |
BOOLEAN | true | true |
DATE |
2024-12-25T10:30:00.000+00:00
|
{"$date": 1735122600000}
|
NULL | null | null |
REGEX | /^mongo(db)?$/i | {"$options":"i","$regex":"^mongo(db)?$"} |
JAVASCRIPT | function() {return this.stringField.length;} | {"$code":"function() {\n return this.stringField.length;\n }"} |
DECIMAL128 | NumberDecimal("1234567890.1234567890") | {"$numberDecimal":"1234567890.1234567890"} |
OBJECTID | ObjectId('673c5d8dbfe2e51808cc2c3d') | {"$oid": "673c5d8dbfe2e51808cc2c3d"} |
LONG | 3567587327 | {"$numberLong": "3567587327"} |
INT32 | 42 | 42 |
INT64 | 1864712049423024127 | {"$numberLong": "1864712049423024127"} |
TIMESTAMP | new Timestamp(1747888877, 1) | {"$timestamp":{"i":1,"t":1747888877}} |
Cómo consultar un array de PostgreSQL como un tipo de datos de array de BigQuery
Si prefieres consultar un array de PostgreSQL como un tipo de datos ARRAY
de BigQuery, puedes convertir los valores de JSON
en un array de BigQuery con la función JSON_VALUE_ARRAY
de BigQuery:
SELECT ARRAY(SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)AS array_col
Reemplaza lo siguiente:
TYPE: Es el tipo de BigQuery que coincide con el tipo de elemento del array de origen de PostgreSQL. Por ejemplo, si el tipo de fuente es un array de valores
BIGINT
, reemplaza TYPE porINT64
.Para obtener más información sobre cómo asignar los tipos de datos, consulta Cómo asignar tipos de datos.
BQ_COLUMN_NAME: Es el nombre de la columna pertinente en la tabla de BigQuery.
Existen 2 excepciones a la forma en que conviertes los valores:
Para los arrays de valores
BIT
,BIT_VARYING
oBYTEA
en la columna de origen, ejecuta la siguiente consulta:SELECT ARRAY(SELECT FROM_BASE64(element) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_bytes Para los arrays de valores
JSON
oJSONB
en la columna de origen, usa la funciónJSON_QUERY_ARRAY
:SELECT ARRAY(SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_jsons
Limitaciones conocidas
Entre las limitaciones conocidas para usar BigQuery como destino, se incluyen las siguientes:
- Solo puedes replicar datos en un conjunto de datos de BigQuery que resida en el mismo proyecto Google Cloud que la transmisión de Datastream.
- De forma predeterminada, Datastream no admite agregar una clave primaria a una tabla que ya se replicó en BigQuery sin una clave primaria, ni quitar una clave primaria de una tabla que se replicó en BigQuery con una clave primaria. Si necesitas realizar estos cambios, comunícate con el equipo de asistencia de Google. Para obtener información sobre cómo cambiar la definición de la clave primaria de una tabla de origen que ya tiene una clave primaria, consulta Diagnostica problemas.
Las claves principales en BigQuery deben ser de los siguientes tipos de datos:
DATE
BOOL
GEOGRAPHY
INT64
NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
DATETIME
Datastream no replica las tablas que contienen claves primarias de tipos de datos no admitidos.
BigQuery no admite nombres de tablas con caracteres
.
,$
,/
,@
ni+
. Datastream reemplaza esos caracteres por guiones bajos cuando crea tablas de destino.Por ejemplo,
table.name
en la base de datos de origen se convierte entable_name
en BigQuery.Para obtener más información sobre los nombres de las tablas en BigQuery, consulta Nombres de tablas.
BigQuery no admite más de cuatro columnas de agrupamiento en clústeres. Cuando se replica una tabla con más de cuatro columnas de clave primaria, Datastream usa cuatro columnas de clave primaria como columnas de agrupamiento en clústeres.
Datastream asigna literales de fecha y hora fuera del rango, como los tipos de fecha infinita de PostgreSQL, a los siguientes valores:
DATE
positivo al valor de9999-12-31
DATE
negativo al valor de0001-01-01
TIMESTAMP
positivo al valor de9999-12-31 23:59:59.999000 UTC
TIMESTAMP
negativo al valor de0001-01-01 00:00:00 UTC
BigQuery no admite tablas de transmisión que tengan claves primarias de tipos de datos
FLOAT
oREAL
. Estas tablas no se replican. Para obtener más información sobre los tipos y los rangos de fechas de BigQuery, consulta Tipos de datos.Si tu fuente es Salesforce, no se admite la opción de configuración Dataset for each schema.
¿Qué sigue?
- Aprende a replicar datos de una base de datos de origen en conjuntos de datos de BigQuery con Datastream.