A hierarquia de dados no Datastream é:
- Uma stream, que é composta por uma origem de dados e um destino.
- Um objeto, que é uma parte de uma stream, como uma tabela de uma base de dados específica.
- Um evento, que é uma única alteração gerada por um objeto específico, como uma inserção na base de dados.
As streams, os objetos e os eventos têm dados e metadados associados. Estes dados e metadados podem ser usados para diferentes fins.
Acerca dos eventos
Cada evento consiste em três tipos de dados:
- Dados de eventos: representam a alteração aos dados propriamente ditos do objeto proveniente da origem da stream. Cada evento contém a totalidade da linha que foi alterada.
- Metadados genéricos: estes metadados aparecem em todos os eventos gerados pelo fluxo de dados, que são usados para ações, como remover dados duplicados no destino.
- Metadados específicos da origem: estes metadados aparecem em todos os eventos gerados por uma origem de stream específica. Estes metadados variam consoante a origem.
Dados do evento
Os dados de eventos são o payload de cada alteração de um determinado objeto proveniente de uma origem de stream.
Os eventos estão no formato Avro ou JSON.
Quando trabalha com o formato Avro, para cada coluna, o evento contém o índice e o valor da coluna. Usando o índice da coluna, o nome da coluna e o tipo unificado podem ser obtidos a partir do esquema no cabeçalho Avro.
Quando trabalha com o formato JSON, para cada coluna, o evento contém o nome e o valor da coluna.
Os metadados de eventos podem ser usados para recolher informações sobre a origem do evento, bem como para remover dados duplicados no destino e ordenar eventos pelo consumidor a jusante.
As tabelas seguintes listam e descrevem os campos e os tipos de dados para metadados de eventos genéricos e específicos da origem.
Metadados genéricos
Estes metadados são consistentes em streams de todos os tipos.
Campo | Tipo Avro | Tipo JSON | Descrição |
---|---|---|---|
stream_name |
de string | de string | O nome exclusivo da stream, conforme definido no momento da criação. |
read_method |
de string | de string | Indica se os dados foram lidos da origem através de um método de captura de dados de alterações (CDC), como parte do preenchimento histórico, ou como parte de uma tarefa de suplementação criada quando uma transação é revertida durante a replicação de CDC. Os valores possíveis incluem:
|
object |
de string | de string | O nome usado para agrupar diferentes tipos de eventos, normalmente o nome da tabela ou do objeto na origem. |
schema_key |
de string | de string | O identificador exclusivo do esquema unificado do evento. |
uuid |
de string | de string | Um identificador exclusivo do evento gerado pela stream de dados. |
read_timestamp |
timestamp-millis | de string | A data/hora (UTC) em que o registo foi lido pelo Datastream (a data/hora da época em milissegundos). |
source_timestamp |
timestamp-millis | de string | A data/hora (UTC) em que o registo foi alterado na origem (a data/hora de época em milissegundos). |
sort_keys |
{"type": "array", "items": ["string", "long"]} |
matriz | Uma matriz de valores que podem ser usados para ordenar eventos pela ordem em que ocorreram. |
Metadados específicos da origem
Estes metadados estão associados a eventos de CDC e preenchimento a partir de uma base de dados de origem. Para ver estes metadados, selecione uma origem no menu pendente que se segue.
Origem | Campo | Tipo Avro | Tipo JSON | Descrição |
---|---|---|---|---|
MySQL | log_file |
de string | de string | O ficheiro de registo a partir do qual o fluxo de dados extrai eventos na replicação de CDC. |
MySQL | log_position |
longo | longo | A posição do registo (desvio) no registo binário do MySQL. |
MySQL | primary_keys |
matriz de strings | matriz de strings | A lista de (um ou mais) nomes de colunas que compõem a chave principal das tabelas. Se a tabela não tiver uma chave primária, este campo está vazio. |
MySQL | is_deleted |
booleano | booleano |
|
MySQL | database |
de string | de string | A base de dados associada ao evento. |
MySQL | table |
de string | de string | A tabela associada ao evento. |
MySQL | change_type |
de string | de string | O tipo de alteração ( |
Oracle | log_file |
de string | de string | O ficheiro de registo a partir do qual o fluxo de dados extrai eventos na replicação de CDC. |
Oracle | scn |
longo | longo | A posição do registo (desvio) no registo de transações da Oracle. |
Oracle | row_id |
de string | de string | O row_id da Oracle. |
Oracle | is_deleted |
booleano | booleano |
|
Oracle | database |
de string | de string | A base de dados associada ao evento. |
Oracle | schema |
de string | de string | O esquema associado à tabela do evento. |
Oracle | table |
de string | de string | A tabela associada ao evento. |
Oracle | change_type |
de string | de string | O tipo de alteração ( |
Oracle | tx_id |
de string | de string | O ID da transação à qual o evento pertence. |
Oracle | rs_id |
de string | de string | O ID do conjunto de registos. A combinação de rs_id e ssn identifica de forma exclusiva uma linha em V$LOGMNR_CONTENTS . rs_id identifica de forma exclusiva o registo de refazer que gerou a linha. |
Oracle | ssn |
longo | longo | Um número de sequência SQL. Este número é usado com rs_id e identifica de forma exclusiva uma linha em V$LOGMNR_CONTENTS . |
PostgreSQL | schema |
de string | de string | O esquema associado à tabela do evento. |
PostgreSQL | table |
de string | de string | A tabela associada ao evento. |
PostgreSQL | is_deleted |
booleano | booleano |
|
PostgreSQL | change_type |
de string | de string | O tipo de alteração (INSERT , UPDATE , DELETE ) que o evento representa.
|
PostgreSQL | tx_id |
de string | de string | O ID da transação à qual o evento pertence. |
PostgreSQL | lsn |
de string | de string | O número de sequência do registo da entrada atual. |
PostgreSQL | primary_keys |
matriz de strings | matriz de strings | A lista de (um ou mais) nomes de colunas que compõem a chave principal das tabelas. Se a tabela não tiver uma chave primária, este campo está vazio. |
SQL Server | table |
de string | de string | A tabela associada ao evento. |
SQL Server | database |
longo | longo | A base de dados associada ao evento. |
SQL Server | schema |
matriz de strings | matriz de strings | O esquema associado à tabela do evento. |
SQL Server | is_deleted |
booleano | booleano |
|
SQL Server | lsn |
de string | de string | O número de sequência do registo do evento. |
SQL Server | tx_id |
de string | de string | O ID da transação à qual o evento pertence. |
SQL Server | physical_location |
matriz de números inteiros | matriz de números inteiros | A localização física do registo do registo descrito por três números inteiros: ID do ficheiro, ID da página e ID do espaço do registo. |
SQL Server | replication_index |
matriz de strings | matriz de strings | A lista de nomes de colunas de um índice que pode identificar exclusivamente uma linha na tabela. |
SQL Server | change_type |
de string | de string | O tipo de alteração ( |
Salesforce | object_name |
de string | de string | O nome do objeto do Salesforce associado ao evento. |
Salesforce | domain |
de string | de string | O nome do domínio associado ao evento. |
Salesforce | is_deleted |
booleano | booleano |
|
Salesforce | change_type |
de string | de string | O tipo de alteração ( |
Salesforce | primary_keys |
matriz de strings | matriz de strings | A lista de nomes de colunas que compõem a chave principal das tabelas. Se a tabela não tiver uma chave primária, este campo está vazio. |
MongoDB | database |
de string | de string | A base de dados associada ao evento. |
MongoDB | collection |
de string | de string | A coleção associada ao evento. As coleções são análogas às tabelas em bases de dados relacionais. |
MongoDB | change_type |
de string | de string | O tipo de alteração (CREATE , UPDATE e DELETE ) que o evento representa. |
MongoDB | is_deleted |
booleano | booleano |
|
MongoDB | primary_keys |
matriz de strings | matriz de strings | O campo _id que funciona como a chave principal de cada documento numa coleção. |
Exemplo de um fluxo de eventos
Este fluxo ilustra os eventos gerados por três operações consecutivas: INSERT
, UPDATE
e DELETE
, numa única linha de uma tabela SAMPLE
para uma base de dados de origem.
HORA | THIS_IS_MY_PK (int) | FIELD1 (nchar nullable) | FIELD2 (nchar non-null)> |
---|---|---|---|
0 | 1231535353 | foo | TLV |
1 | 1231535353 | NULL | TLV |
INSERT (T0)
O payload da mensagem consiste na totalidade da nova linha.
{
"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",
}
}
ATUALIZAR (T1)
O payload da mensagem consiste na totalidade da nova linha. Não inclui 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)
O payload da mensagem consiste na totalidade da nova linha.
{
"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",
}
}
Ordenação e consistência
Esta secção aborda a forma como o Datastream processa a ordenação e a consistência.
Encomenda
O fluxo de dados não garante a ordenação, mas cada evento contém a linha completa de dados e a data/hora em que os dados foram escritos na origem. No BigQuery, os eventos fora de ordem são unidos automaticamente na sequência correta. O BigQuery usa os metadados dos eventos e um número de sequência de alterações (CSN) interno para aplicar os eventos à tabela pela ordem correta. No Cloud Storage, os eventos da mesma hora podem abranger mais do que um ficheiro.
Os eventos gerados fora de ordem ocorrem intencionalmente quando os eventos são preenchidos para o preenchimento inicial de dados criado quando a stream é iniciada.
A ordenação pode ser inferida com base na origem.
Origem | Descrição |
---|---|
MySQL | Os eventos que fazem parte do preenchimento inicial têm o campo Os eventos que fazem parte da replicação em curso têm o campo A ordem pode ser inferida pela combinação do campo |
Oracle | Os eventos que fazem parte do preenchimento inicial têm o campo Os eventos que fazem parte da replicação em curso têm o campo A ordem pode ser inferida pela combinação do campo |
PostgreSQL | Os eventos que fazem parte do preenchimento inicial têm o campo Os eventos que fazem parte da replicação em curso têm o campo A ordem pode ser inferida pela combinação do campo |
SQL Server |
Os eventos que fazem parte do preenchimento inicial têm o campo Os eventos que fazem parte da replicação em curso têm o campo A ordem pode ser inferida pela combinação do campo |
Salesforce |
A ordem pode ser determinada através da utilização do |
MongoDB (pré-visualização) |
A ordem pode ser determinada através do campo |
Consistência
O Datastream garante que os dados da base de dados de origem são entregues no destino, pelo menos, uma vez. Nenhum evento é perdido, mas existe a possibilidade de eventos duplicados na stream. A janela para eventos duplicados deve ser da ordem dos minutos, e o identificador exclusivo universal (UUID) do evento nos metadados do evento pode ser usado para detetar duplicados.
Quando os ficheiros de registo da base de dados contêm transações não comprometidas, se alguma transação for revertida, a base de dados reflete isto nos ficheiros de registo como operações de linguagem de manipulação de dados (DML) "inversas". Por exemplo, uma operação INSERT
revertida tem uma operação DELETE
correspondente. O fluxo de dados lê estas operações dos ficheiros de registo.
Acerca das streams
Cada stream tem metadados que descrevem a stream e a origem a partir da qual extrai dados. Estes metadados incluem informações como o nome da stream, os perfis de associação de origem e de destino.
Para ver a definição completa do objeto Stream, consulte a documentação de referência da API.
Estado e estado da stream
Uma stream pode estar num dos seguintes estados:
Not started
Starting
Running
Draining
Paused
Failed
Failed permanently
Pode usar os registos para encontrar informações de estado adicionais, como o preenchimento retroativo das tabelas ou o número de linhas processadas. Também pode usar a API
FetchStreamErrors
para
obter erros.
Metadados de objetos disponíveis através da API Discover
A API Discover devolve objetos que representam a estrutura dos objetos definidos na origem de dados ou no destino representado pelo perfil de ligação. Cada objeto tem metadados sobre o próprio objeto, bem como para cada campo de dados que extrai. Estes metadados estão disponíveis através da API discover.
O que se segue?
- Para saber mais sobre streams, consulte o artigo Ciclo de vida da stream.
- Para saber como criar uma stream, consulte o artigo Crie uma stream.