Data Transmission Service (DTS) le permite seleccionar un formato de almacenamiento cuando sincroniza o migra datos a una cola de mensajes, como Kafka o RocketMQ. Este tema describe los formatos de datos para ayudarle a analizar sintácticamente la información.
Formatos de almacenamiento de datos
DTS admite los siguientes tres formatos de almacenamiento para los datos que se escriben en una cola de mensajes:
DTS Avro: formato de serialización de datos que convierte las estructuras u objetos de datos en un formato fácil de almacenar o transmitir.
Shareplex Json: cuando el software de replicación de datos SharePlex lee datos de una base de datos de origen y los escribe en una cola de mensajes, estos se almacenan en formato Shareplex Json.
Canal Json: Canal analiza sintácticamente los registros incrementales de una base de datos y transmite los datos incrementales a una cola de mensajes. Los datos se almacenan en formato Canal Json.
DTS Avro
Debe analizar sintácticamente los datos con base en la definición del esquema DTS Avro. Para obtener más información, consulte Definición del esquema DTS Avro y Ejemplo de deserialización DTS Avro.
En el formato DTS Avro, las instrucciones DDL son de tipo String.
Shareplex Json
Descripción de parámetros
|
Parámetro |
Descripción |
|
|
Hora en la que se confirmó la transacción en la base de datos. El formato es yyyy-MM-ddTHH:mm:ssZ (UTC). |
|
|
Identificador del usuario que confirmó la transacción. |
|
|
Tipo de operación de datos. Los valores válidos incluyen INSERT, UPDATE, DELETE, TRUNCATE, DROP COLUMN, UPDATE BEFORE y UPDATE AFTER. |
|
|
Número de cambio del sistema (SCN). Identifica la versión de una transacción confirmada en un momento específico dentro de la base de datos. A cada transacción confirmada se le asigna un SCN único. |
|
|
Valor de dirección relativamente único que se utiliza para localizar un registro en la base de datos. |
|
|
Identificador de la transacción. |
|
|
Número ordinal de la operación dentro de la transacción. El valor comienza en 1. |
|
|
Número total de operaciones en la transacción. |
|
|
Nombre de la tabla. |
|
|
Índice de la operación dentro de la transacción. El formato es |
|
|
Hora en la que se confirmó la transacción en la base de datos de destino. |
Ejemplos
Insertar datos
{
"meta": {
"time": "2017-06-16T14:24:34",
"userid": 84,
"op": "ins",
"scn": "14589063118712",
"rowid": "AAATGpAAIAAItcIAAA",
"trans": "7.0.411499",
"seq": 1,
"size": 11,
"table": "CL_BIZ1.MIO_LOG",
"idx": "1/11",
"posttime": "2017-06-16T14:33:52"
},
"data": {
"MIO_LOG_ID": "32539737"
}
}
Actualizar datos
{
"meta": {
"time": "2017-06-16T15:38:13",
"userid": 84,
"op": "upd",
"table": "CL_BIZ1.MIO_LOG"
….
},
"data": {
"CNTR_NO": "1171201606"
},
"key": {
"MIO_LOG_ID": "32537893",
"PLNMIO_REC_ID": "31557806",
"POL_CODE": null,
"CNTR_TYPE": null,
"CNTR_NO": "1171201606syui26"
}
}
Eliminar datos
{
"meta": {
"time": "2017-06-16T15:51:35",
"userid": 84,
"op": "del",
},
"data": {
"MIO_LOG_ID": "32539739",
"PLNMIO_REC_ID": "31557806",
"POL_CODE": null,
"CNTR_TYPE": null,
"CG_NO": null
}
}
Canal Json
Si habilita Split message delivery after partition key update, Kafka entrega un mensaje DELETE y un mensaje INSERT cuando se modifica una clave de partición. Kafka selecciona la partición de cada mensaje según el valor de su respectiva clave de partición.
Ejemplo: la clave de partición id tiene un valor de 1. El mensaje se entrega a partition-1. A continuación se describen las diferencias antes y después de habilitar Split message delivery after partition key update.
Habilitado: cuando ejecuta el comando
UPDATE SET id = 2 WHERE id = 1en la base de datos de origen, se entrega un mensajeDELETEconid=1apartition-1, y un mensajeINSERTconid=2apartition-2.Deshabilitado: solo se entrega un mensaje
UPDATEapartition-1. La operaciónUPDATEselecciona la partición de entrega con base en el valor anterior al cambio.
Descripción de métricas
|
Parámetro |
Descripción |
|
|
Nombre de la base de datos. |
|
|
Hora en la que se ejecutó la operación en la base de datos de origen. Es una marca de tiempo UNIX de 13 dígitos en milisegundos. Nota
|
|
|
Número de serie de la operación. Nota
Se genera a partir de la marca de tiempo y un desplazamiento interno de DTS. Le ayuda a determinar el orden de los registros. |
|
|
Indica si la operación es de tipo DDL.
|
|
|
Tipo de datos del campo. Nota
No se admiten los parámetros de tipos de datos, como la precisión. |
|
|
Datos anteriores o posteriores al cambio. Nota
Para las instancias de sincronización o migración creadas antes del 20 de marzo de 2022, el valor de old corresponde a los datos posteriores al cambio, mientras que el valor de |
|
|
Nombre de la clave principal. |
|
|
Instrucción SQL. |
|
|
Tipo de campo transformado. El valor es igual al de dataTypeNumber. Para obtener más información, consulte Mapping between field types and dataTypeNumber values. |
|
|
Nombre de la tabla. |
|
|
Hora en la que la operación comenzó a escribir datos en la base de datos de destino. Es una marca de tiempo UNIX de 13 dígitos en milisegundos. Nota
Puede usar un motor de búsqueda para encontrar una herramienta de conversión de marcas de tiempo UNIX. |
|
|
Tipo de operación, como DELETE, UPDATE o INSERT. Nota
Para las tareas de sincronización o migración de datos completos, el valor se fija en INIT. |
|
|
Identificador global de transacciones (GTID). Un GTID es único a nivel global. Cada transacción corresponde a un GTID. Nota
DTS no admite la sincronización del campo GTID. El valor de este campo es NULL de forma predeterminada. |
Ejemplos
Actualizar datos
Para las instancias de sincronización o migración creadas antes del 20 de marzo de 2022, cuando una instrucción DELETE de una tabla de origen se sincroniza o migra a Kafka, el campo old contiene los datos y el campo data es nulo. Para alinearse con la comunidad de código abierto, en las instancias creadas o reiniciadas a partir del 20 de marzo de 2022, el campo data contiene los datos y el campo old es nulo.
Instancias de sincronización o migración creadas antes del 20 de marzo de 2022
{
"old": [
{
"shipping_type": "aaa"
}
],
"database": "dbname",
"es": 1600161894000,
"id": 58,
"isDdl": false,
"mysqlType": {
"id": "bigint",
"shipping_type": "varchar"
},
"pkNames": [
"id"
],
"sql": "",
"sqlType": {
"id": -5,
"shipping_type": 12
},
"table": "tablename",
"ts": 1600161894771,
"type": "DELETE"
}
Instancias de sincronización o migración creadas o reiniciadas a partir del 20 de marzo de 2022
{
"data": [
{
"id": "500000287",
"shipping_type": null
}
],
"database": "dbname",
"es": 1600161894000,
"id": 58,
"isDdl": false,
"mysqlType": {
"id": "bigint",
"shipping_type": "varchar"
},
"pkNames": [
"id"
],
"sql": "",
"sqlType": {
"id": -5,
"shipping_type": 12
},
"table": "tablename",
"ts": 1600161894771,
"type": "DELETE"
}
Operación DDL
{
"database":"dbname", // The name of the database for synchronization or migration.
"es":1600161894000, // The time when the source data was written to the binary log.
"id":58, // The offset in the DTS cache.
"isDdl":true, // Specifies whether to synchronize or migrate DDL statements.
"sql":"eg:createxxx", // The DDL statement from the binary log.
"table":"tablename", // The name of the table for synchronization or migration.
"ts":1600161894771, // The time when DTS wrote the data to the destination.
"type":"DDL"
}