Eventos y emisiones

La jerarquía de datos de Datastream es la siguiente:

  • Un flujo, que se compone de una fuente de datos y un destino.
  • Un objeto, que es una parte de un flujo, como una tabla de una base de datos específica.
  • Un evento, que es un cambio único generado por un objeto específico, como una inserción en una base de datos.

Los flujos, los objetos y los eventos tienen datos y metadatos asociados. Estos datos y metadatos se pueden usar con diferentes fines.

Acerca de los eventos

Cada evento consta de tres tipos de datos:

  • Datos de evento: representan el cambio en los datos en sí del objeto procedente de la fuente del flujo. Cada evento contiene la totalidad de la fila que ha cambiado.
  • Metadatos genéricos: estos metadatos aparecen en todos los eventos generados por Datastream y se usan para acciones como eliminar datos duplicados en el destino.
  • Metadatos específicos de la fuente: estos metadatos aparecen en todos los eventos generados por una fuente de flujo específica. Estos metadatos varían en función de la fuente.

Datos del evento

Los datos de eventos son la carga útil de cada cambio de un objeto determinado que procede de una fuente de flujo.

Los eventos están en formato Avro o JSON.

Cuando se trabaja con el formato Avro, en cada columna, el evento contiene el índice y el valor de la columna. Mediante el índice de columna, se pueden obtener el nombre de la columna y el tipo unificado del esquema en el encabezado Avro.

Cuando se trabaja con el formato JSON, por cada columna, el evento contiene el nombre y el valor de la columna.

Los metadatos de eventos se pueden usar para recoger información sobre el origen del evento, así como para eliminar datos duplicados en el destino y ordenar los eventos por el consumidor de nivel inferior.

En las siguientes tablas se enumeran y describen los campos y los tipos de datos de los metadatos de eventos genéricos y específicos de la fuente.

Metadatos genéricos

Estos metadatos son coherentes en todos los tipos de flujos.

Campo Tipo Avro Tipo JSON Descripción
stream_name cadena cadena Nombre único del flujo, tal como se definió en el momento de la creación.
read_method cadena cadena

Indica si los datos se leyeron de la fuente mediante un método de captura de datos de cambios (CDC), como parte de una reposición histórica o como parte de una tarea de suplementación que se crea cuando se revierte una transacción durante la replicación de CDC.

Estos son algunos de los posibles valores:

  • oracle-cdc-logminer
  • oracle-backfill
  • oracle-supplementation
  • mysql-cdc-binlog
  • mysql-backfill-incremental
  • mysql-backfill-fulldump
  • postgres-cdc-wal
  • postgresql-backfill
  • salesforce-cdc
  • salesforce-backfill
object cadena cadena Nombre que se usa para agrupar diferentes tipos de eventos. Normalmente, es el nombre de la tabla o del objeto de la fuente.
schema_key cadena cadena Identificador único del esquema unificado del evento.
uuid cadena cadena Identificador único del evento generado por Datastream.
read_timestamp timestamp-millis cadena Marca de tiempo (UTC) en la que Datastream leyó el registro (marca de tiempo de la época en milisegundos).
source_timestamp timestamp-millis cadena Marca de tiempo (UTC) en la que se modificó el registro en la fuente (marca de tiempo de la época en milisegundos).
sort_keys {"type": "array", "items": ["string", "long"]} array Es una matriz de valores que se puede usar para ordenar los eventos según el orden en el que se han producido.

Metadatos específicos de la fuente

Estos metadatos están asociados a eventos de CDC y de relleno de una base de datos de origen. Para ver estos metadatos, seleccione una fuente en el menú desplegable que aparece a continuación.

Fuente Campo Tipo Avro Tipo JSON Descripción
MySQL log_file cadena cadena El archivo de registro del que Datastream extrae eventos en la replicación de CDC.
MySQL log_position long long La posición (desplazamiento) del registro en el registro binario de MySQL.
MySQL primary_keys matriz de cadena matriz de cadena Lista de uno o varios nombres de columna que componen la clave principal de la tabla. Si la tabla no tiene una clave principal, este campo estará vacío.
MySQL is_deleted booleano booleano
  • Un valor true indica que la fila se ha eliminado en la fuente.
  • El valor false significa que la fila no se ha eliminado.
MySQL database cadena cadena Es la base de datos asociada al evento.
MySQL table cadena cadena Es la tabla asociada al evento.
MySQL change_type cadena cadena

El tipo de cambio (INSERT, UPDATE-INSERT, UPDATE-DELETE y DELETE) que representa el evento.

Oracle log_file cadena cadena El archivo de registro del que Datastream extrae eventos en la replicación de CDC.
Oracle scn long long Posición del registro (desplazamiento) en el registro de transacciones de Oracle.
Oracle row_id cadena cadena row_id de Oracle.
Oracle is_deleted booleano booleano
  • Un valor true indica que la fila se ha eliminado en la fuente.
  • El valor false significa que la fila no se ha eliminado.
Oracle database cadena cadena Es la base de datos asociada al evento.
Oracle schema cadena cadena El esquema asociado a la tabla del evento.
Oracle table cadena cadena Es la tabla asociada al evento.
Oracle change_type cadena cadena

El tipo de cambio (INSERT, UPDATE-INSERT, UPDATE-DELETE y DELETE) que representa el evento.

Oracle tx_id cadena cadena El ID de transacción al que pertenece el evento.
Oracle rs_id cadena cadena El ID del conjunto de registros. La combinación de rs_id y ssn identifica de forma única una fila de V$LOGMNR_CONTENTS. rs_id identifica de forma única el registro de rehacer que ha generado la fila.
Oracle ssn long long Número de secuencia de SQL. Este número se usa con rs_id e identifica de forma única una fila de V$LOGMNR_CONTENTS.
PostgreSQL schema cadena cadena El esquema asociado a la tabla del evento.
PostgreSQL table cadena cadena Es la tabla asociada al evento.
PostgreSQL is_deleted booleano booleano
  • Un valor true indica que la fila se ha eliminado en la fuente.
  • El valor false significa que la fila no se ha eliminado.
PostgreSQL change_type cadena cadena El tipo de cambio (INSERT, UPDATE o DELETE) que representa el evento.
PostgreSQL tx_id cadena cadena El ID de transacción al que pertenece el evento.
PostgreSQL lsn cadena cadena Número de secuencia del registro de la entrada actual.
PostgreSQL primary_keys matriz de cadena matriz de cadena Lista de uno o varios nombres de columna que componen la clave principal de la tabla. Si la tabla no tiene una clave principal, este campo estará vacío.
SQL Server table cadena cadena Es la tabla asociada al evento.
SQL Server database long long Es la base de datos asociada al evento.
SQL Server schema matriz de cadena matriz de cadena El esquema asociado a la tabla del evento.
SQL Server is_deleted booleano booleano
  • Un valor true indica que la fila se ha eliminado en la fuente.
  • El valor false significa que la fila no se ha eliminado.
SQL Server lsn cadena cadena Número de secuencia del registro del evento.
SQL Server tx_id cadena cadena El ID de transacción al que pertenece el evento.
SQL Server physical_location matriz de enteros matriz de enteros Ubicación física del registro de registro, descrita por tres números enteros: ID de archivo, ID de página e ID de ranura del registro.
SQL Server replication_index matriz de cadena matriz de cadena Lista de nombres de columna de un índice que puede identificar de forma única una fila de la tabla.
SQL Server change_type cadena cadena

El tipo de cambio (INSERT, UPDATE o DELETE) que representa el evento.

Salesforce object_name cadena cadena

Nombre del objeto de Salesforce asociado al evento.

Salesforce domain cadena cadena

Nombre del dominio asociado al evento.

Salesforce is_deleted booleano booleano
  • Un valor true indica que la fila se ha eliminado en la fuente.
  • El valor false significa que la fila no se ha eliminado.
Salesforce change_type cadena cadena

El tipo de cambio (INSERT, UPDATE o DELETE) que representa el evento.

Salesforce primary_keys matriz de cadena matriz de cadena Lista de nombres de columnas que componen la clave principal de la tabla. Si la tabla no tiene una clave principal, este campo estará vacío.
MongoDB database cadena cadena Es la base de datos asociada al evento.
MongoDB collection cadena cadena Es la colección asociada al evento. Las colecciones son análogas a las tablas de las bases de datos relacionales.
MongoDB change_type cadena cadena El tipo de cambio (CREATE, UPDATE y DELETE) que representa el evento.
MongoDB is_deleted booleano booleano
  • Un valor true indica que la fila se ha eliminado en la fuente.
  • El valor false significa que la fila no se ha eliminado.
MongoDB primary_keys matriz de cadena matriz de cadena El campo _id, que actúa como clave principal de cada documento de una colección.

Ejemplo de un flujo de eventos

En este diagrama de flujo se muestran los eventos generados por tres operaciones consecutivas: INSERT, UPDATE y DELETE, en una sola fila de una tabla SAMPLE de una base de datos de origen.

HORA THIS_IS_MY_PK (int) FIELD1 (nchar que admite valores nulos) FIELD2 (nchar non-null)>
0 1231535353 foo TLV
1 1231535353 NULL TLV

INSERTAR (T0)

La carga útil del mensaje consta de la totalidad de la nueva fila.

{
  "stream_name": "projects/myProj/locations/myLoc/streams/Oracle-to-Source",
  "read_method": "oracle-cdc-logminer",
  "object": "SAMPLE.TBL",
  "uuid": "d7989206-380f-0e81-8056-240501101100",
  "read_timestamp": "2019-11-07T07:37:16.808Z",
  "source_timestamp": "2019-11-07T02:15:39",  
  "source_metadata": {
    "log_file": ""
    "scn": 15869116216871,
    "row_id": "AAAPwRAALAAMzMBABD",
    "is_deleted": false,
    "database": "DB1",
    "schema": "ROOT",
    "table": "SAMPLE"
    "change_type": "INSERT",
    "tx_id": 
    "rs_id": "0x0073c9.000a4e4c.01d0",
    "ssn": 67,
  },
  "payload": {
    "THIS_IS_MY_PK": "1231535353",
    "FIELD1": "foo",
    "FIELD2": "TLV",
  }
}

ACTUALIZACIÓN (T1)

La carga útil del mensaje consta de la totalidad de la nueva fila. No incluye los valores anteriores.

{
  "stream_name": "projects/myProj/locations/myLoc/streams/Oracle-to-Source",
  "read_method": "oracle-cdc-logminer",
  "object": "SAMPLE.TBL",
  "uuid": "e6067366-1efc-0a10-a084-0d8701101101",
  "read_timestamp": "2019-11-07T07:37:18.808Z",
  "source_timestamp": "2019-11-07T02:17:39",  
  "source_metadata": {
    "log_file": 
    "scn": 15869150473224,
    "row_id": "AAAGYPAATAAPIC5AAB",
    "is_deleted": false,
    "database":
    "schema": "ROOT",
    "table": "SAMPLE"
    "change_type": "UPDATE",
    "tx_id":
    "rs_id": "0x006cf4.00056b26.0010",
    "ssn": 0,
  },
  "payload": {
    "THIS_IS_MY_PK": "1231535353",
    "FIELD1": null,
    "FIELD2": "TLV",
  }
}

ELIMINAR (T2)

La carga útil del mensaje consta de la totalidad de la nueva fila.

{
  "stream_name": "projects/myProj/locations/myLoc/streams/Oracle-to-Source",
  "read_method": "oracle-cdc-logminer",
  "object": "SAMPLE.TBL",
  "uuid": "c504f4bc-0ffc-4a1a-84df-6aba382fa651",
  "read_timestamp": "2019-11-07T07:37:20.808Z",
  "source_timestamp": "2019-11-07T02:19:39",
  "source_metadata": {
    "log_file": 
    "scn": 158691504732555,
    "row_id": "AAAGYPAATAAPIC5AAC",
    "is_deleted": true,
    "database":
    "schema": "ROOT",
    "table": "SAMPLE"
    "change_type": "DELETE",
    "tx_id":
    "rs_id": "0x006cf4.00056b26.0011",
    "ssn": 0,
  },
  "payload": {
    "THIS_IS_MY_PK": "1231535353",
    "FIELD1": null,
    "FIELD2": "TLV",
  }
}

Orden y coherencia

En esta sección se explica cómo gestiona Datastream el orden y la coherencia.

y pedidos

Datastream no garantiza el orden, pero cada evento contiene la fila completa de datos y la marca de tiempo de cuándo se escribieron los datos en la fuente. En BigQuery, los eventos desordenados se combinan automáticamente en la secuencia correcta. BigQuery usa los metadatos de eventos y un número de secuencia de cambios (CSN) interno para aplicar los eventos a la tabla en el orden correcto. En Cloud Storage, los eventos del mismo momento pueden abarcar más de un archivo.

Los eventos que se generan de forma desordenada se producen por diseño cuando se rellenan los eventos de la primera carga de datos que se crea cuando se inicia el flujo.

El orden se puede inferir en función de la fuente.

Fuente Descripción
MySQL

Los eventos que forman parte del relleno inicial tienen el campo read_method que empieza por mysql-backfill. El orden en el que se reciben los eventos en el relleno no implica nada, ya que se pueden consumir en cualquier orden.

Los eventos que forman parte de la replicación en curso tienen el campo read_method definido como mysql-cdc-binlog.

El orden se puede deducir de la combinación del campo log_file y el campo log_position que está desplazado del archivo de registro. Esta combinación proporciona un número único que aumenta de forma incremental y que identifica el orden de las operaciones en la base de datos.

Oracle

Los eventos que forman parte del relleno inicial tienen el campo read_method que empieza por oracle-backfill. El orden en el que se reciben los eventos en el relleno no implica nada, ya que se pueden consumir en cualquier orden.

Los eventos que forman parte de la replicación en curso tienen el campo read_method definido como oracle-cdc-logminer.

El orden se puede inferir a partir de la combinación del campo rs_id (el ID del conjunto de registros) y el campo ssn (un número de secuencia SQL). Esta combinación proporciona un número único que aumenta de forma incremental y que identifica el orden de las operaciones en la base de datos.

PostgreSQL

Los eventos que forman parte del relleno inicial tienen el campo read_method que empieza por postgresql-backfill. El orden en el que se reciben los eventos en el relleno no implica nada, ya que se pueden consumir en cualquier orden.

Los eventos que forman parte de la replicación en curso tienen el campo read_method definido como postgres-cdc-wal.

El orden se puede deducir de la combinación del campo source_timestamp y el campo lsn (número de secuencia del registro). Esta combinación proporciona un número único que aumenta de forma incremental y que identifica el orden de las operaciones en la base de datos.

SQL Server

Los eventos que forman parte del relleno inicial tienen el campo read_method que empieza por sqlserver-backfill. El orden en el que se reciben los eventos en el relleno no implica nada, ya que se pueden consumir en cualquier orden.

Los eventos que forman parte de la replicación en curso tienen el campo read_method definido como sqlserver-cdc.

El orden se puede deducir de la combinación del campo source_timestamp y el campo lsn (número de secuencia del registro). Esta combinación proporciona un número único que aumenta de forma incremental y que identifica el orden de las operaciones en la base de datos.

Salesforce (vista previa)

El orden se puede determinar usando el source_timestamp del registro como clave de ordenación. La marca de tiempo de Salesforce tiene una resolución de un segundo, pero no puede haber dos eventos de cambio para el mismo registro en el mismo segundo.

MongoDB (vista previa)

El orden se puede determinar mediante el campo ts del registro de operaciones o el campo clusterTime del flujo de cambios del registro. Los campos son únicos para cada registro.

Coherencia

Datastream se asegura de que los datos de la base de datos de origen se envíen al destino al menos una vez. No te perderás ningún evento, pero es posible que haya eventos duplicados en el flujo. El periodo de los eventos duplicados debe ser de unos minutos, y el identificador único universal (UUID) del evento en los metadatos del evento se puede usar para detectar duplicados.

Cuando los archivos de registro de la base de datos contienen transacciones no confirmadas, si se revierte alguna transacción, la base de datos lo refleja en los archivos de registro como operaciones de lenguaje de manipulación de datos (DML) "inversas". Por ejemplo, una operación INSERT revertida tendrá una operación DELETE correspondiente. Datastream lee estas operaciones de los archivos de registro.

Acerca de los flujos

Cada flujo tiene metadatos que describen tanto el flujo como la fuente de la que extrae los datos. Estos metadatos incluyen información como el nombre del flujo y los perfiles de conexión de origen y destino.

Para ver la definición completa del objeto Stream, consulta la documentación de la referencia de la API.

Estado del flujo

Una emisión puede tener uno de los siguientes estados:

  • Not started
  • Starting
  • Running
  • Draining
  • Paused
  • Failed
  • Failed permanently

Puedes usar los registros para consultar información adicional sobre el estado, como las tablas que se están rellenando o el número de filas procesadas. También puedes usar la API FetchStreamErrors para obtener errores.

Metadatos de objetos disponibles mediante la API Discover

La API Discover devuelve objetos que representan la estructura de los objetos definidos en la fuente o el destino de datos representados por el perfil de conexión. Cada objeto tiene metadatos sobre el propio objeto, así como sobre cada campo de datos que extrae. Estos metadatos están disponibles a través de la API Discover.

Siguientes pasos