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:
Conjunto de datos para cada esquema: 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.
Si seleccionas esta opción, Datastream creará conjuntos de datos en el proyecto que contiene la transmisión.
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 creará el conjunto de datosmydb
y la tablaemployees
en BigQuery.Conjunto de datos único para todos los esquemas: Puedes seleccionar un conjunto de datos de BigQuery para el flujo. Datastream transmite todos los datos a este conjunto de datos. Para el conjunto de datos que seleccionas, 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 creará la tablamydb_employees
en el conjunto de datos que selecciones.
Comportamiento de escritura
Datastream adjunta una columna STRUCT
llamada datastream_metadata
a cada tabla que se escribe en el destino de BigQuery.
Si una tabla tiene una clave primaria en la fuente, la columna contendrá 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 también indica si los datos que Datastream transmite al destino están asociados con una operación DELETE
en el origen. Las tablas sin claves primarias solo permiten anexar.
El tamaño máximo del evento cuando transmites datos a BigQuery es de 20 MB.
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 inserción y actualización, como actualizar, insertar y borrar datos. Las operaciones de inserción y actualización 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 inserción y actualización a la tabla de destino mediante la API de Storage Write de BigQuery.
Especifica el límite de inactividad de los datos
BigQuery aplica modificaciones de fuente en segundo plano de forma 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 configura de acuerdo con 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 las tablas de BigQuery con la opción max_staleness
, consulta Inactividad de la tabla.
Controla los costos de BigQuery
Los costos de BigQuery se cobran por separado de Datastream. Si quieres aprender a controlar los costos de BigQuery, consulta los precios de CDC de BigQuery.
Tipos de datos de mapa
En la siguiente tabla, se enumeran las conversiones de tipos de datos de las bases de datos de origen compatibles al destino de BigQuery.
Base de datos de origen | Tipo de datos fuente | Tipo de datos de BigQuery |
---|---|---|
MySQL | BIGINT (unsigned) |
NUMERIC |
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 la 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 |
|
JSON
Se admiten los tipos de datos BOOLEAN , NUMBER , OBJECT , STRING , ARRAY y NULL . |
MySQL | LONGBLOB |
STRING (hex encoded) |
MySQL | LONGTEXT |
STRING (hex encoded) |
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 es 0<p=<78, se asigna a tipos decimales parametrizados. Si p>=79, asignar a 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 la precisión es -1 , entonces STRING (los tipos NUMERIC de BigQuery requieren una precisión fija). En caso contrario, es BIGNUMERIC /NUMERIC . Para obtener más información, consulta la sección Números de precisión arbitrarios 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 |
Consulta un array de PostgreSQL como un tipo de datos de array de BigQuery
Si prefieres consultar un arreglo de PostgreSQL como un tipo de datos ARRAY
de BigQuery, puedes convertir los valores JSON
en un arreglo 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 en el arreglo fuente 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 relevante en la tabla de BigQuery.
Hay 2 excepciones a la forma en que conviertes los valores:
Para los arreglos de los 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
Estas son algunas de las limitaciones conocidas para usar BigQuery como destino:
- Solo puedes replicar datos en un conjunto de datos de BigQuery que resida en el mismo proyecto de Google Cloud que la transmisión de Datastream.
Si una tabla de la base de datos de origen tiene una clave primaria (por ejemplo, el ID de usuario) y, luego, se produce un cambio en la tabla para que la clave primaria sea diferente (por ejemplo, la clave primaria ahora es el ID de usuario y la fecha), Datastream no puede transmitir este cambio al destino.
Para que Datastream transmita la tabla al destino con la clave primaria modificada, completa los siguientes pasos:
- Cambia la clave primaria de la tabla de base de datos de origen.
- Verifica la métrica de latencia total de la transmisión y espera, al menos, el mismo tiempo que la latencia actual para asegurarte de que los eventos en tránsito se escriban en el destino. Esto permite que todos los eventos con la clave primaria original se transmitan de forma correcta.
- Pausa la transmisión.
- Suelta la tabla en el destino.
- Reanuda la transmisión.
- Activa el reabastecimiento en la tabla.
Las claves primarias 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 compatibles.
BigQuery no admite nombres de tablas con caracteres
.
,$
,/
,@
o+
. Datastream reemplaza esos caracteres con 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 tablas en BigQuery, consulta Nombres de tablas.
- BigQuery no admite más de cuatro columnas de agrupamiento en clústeres. Cuando replicas 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 de rango, como los tipos de fecha infinita de PostgreSQL, a los siguientes valores:
DATE
positivo para el valor de9999-12-31
DATE
negativo para el valor de0001-01-01
TIMESTAMP
positivo para el valor de9999-12-31 23:59:59.999000 UTC
TIMESTAMP
negativo para el valor de0001-01-01 00:00:00 UTC
- BigQuery no admite tablas de transmisión que tienen claves primarias de tipos de datos
FLOAT
oREAL
. Esas tablas no se replican.
Para obtener más información sobre los tipos de fechas y los períodos de BigQuery, consulta Tipos de datos.