Peristiwa dan feed

Hierarki data di Datastream adalah:

  • Aliran data, yang terdiri dari sumber data dan tujuan.
  • Objek, yang merupakan bagian dari aliran, seperti tabel dari database tertentu.
  • Peristiwa, yang merupakan satu perubahan yang dihasilkan oleh objek tertentu, seperti penyisipan database.

Aliran, objek, dan peristiwa memiliki data dan metadata yang terkait dengannya. Data dan metadata ini dapat digunakan untuk berbagai tujuan.

Tentang acara

Setiap peristiwa terdiri dari tiga jenis data:

  • Data peristiwa: Ini menunjukkan perubahan pada data itu sendiri dari objek yang berasal dari sumber streaming. Setiap peristiwa berisi seluruh baris yang diubah.
  • Metadata generik: Metadata ini muncul di setiap peristiwa yang dihasilkan oleh Datastream yang digunakan untuk tindakan, seperti menghapus data duplikat di tujuan.
  • Metadata spesifik per sumber: Metadata ini muncul di setiap peristiwa yang dihasilkan oleh sumber streaming tertentu. Metadata ini bervariasi menurut sumber.

Data peristiwa

Data peristiwa adalah payload setiap perubahan dari objek tertentu yang berasal dari sumber streaming.

Peristiwa memiliki format Avro atau JSON.

Saat bekerja dengan format Avro, untuk setiap kolom, peristiwa berisi indeks dan nilai kolom. Dengan menggunakan indeks kolom, nama kolom dan jenis terpadu dapat diambil dari skema di header Avro.

Saat bekerja dengan format JSON, untuk setiap kolom, peristiwa berisi nama dan nilai kolom.

Metadata peristiwa dapat digunakan untuk mengumpulkan informasi tentang asal peristiwa, serta untuk menghapus data duplikat di tujuan dan mengurutkan peristiwa berdasarkan konsumen hilir.

Tabel berikut mencantumkan dan menjelaskan kolom serta jenis data untuk metadata peristiwa generik dan spesifik per sumber.

Metadata umum

Metadata ini konsisten di seluruh aliran dari semua jenis.

Kolom Jenis Avro Jenis JSON Deskripsi
stream_name string string Nama aliran data unik seperti yang ditentukan pada waktu pembuatan.
read_method string string

Menunjukkan apakah data dibaca dari sumber menggunakan metode pengambilan data perubahan (CDC), sebagai bagian dari pengisian ulang historis, atau sebagai bagian dari tugas pelengkap yang dibuat saat transaksi di-roll back selama replikasi CDC.

Nilai yang memungkinkan mencakup:

  • 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 string string Nama yang digunakan untuk mengelompokkan berbagai jenis peristiwa, biasanya nama tabel atau objek di sumber.
schema_key string string ID unik untuk skema terpadu peristiwa.
uuid string string ID unik untuk peristiwa yang dibuat oleh Datastream.
read_timestamp timestamp-millis string Stempel waktu (UTC) saat data dibaca oleh Datastream (stempel waktu epoch dalam milidetik).
source_timestamp timestamp-millis string Stempel waktu (UTC) saat data berubah di sumber (stempel waktu epoch dalam milidetik).
sort_keys {"type": "array", "items": ["string", "long"]} array Array nilai yang dapat digunakan untuk mengurutkan peristiwa berdasarkan urutan terjadinya.

Metadata khusus sumber

Metadata ini dikaitkan dengan peristiwa CDC dan pengisian ulang dari database sumber. Untuk melihat metadata ini, pilih sumber dari menu drop-down berikut.

Sumber Kolom Jenis Avro Jenis JSON Deskripsi
MySQL log_file string string File log yang digunakan Datastream untuk menarik peristiwa dalam replikasi CDC.
MySQL log_position long long Posisi log (offset) dalam log biner MySQL.
MySQL primary_keys array string array string Daftar (satu atau beberapa) nama kolom yang membentuk kunci utama tabel. Jika tabel tidak memiliki kunci utama, kolom ini akan kosong.
MySQL is_deleted boolean boolean
  • Nilai true menunjukkan bahwa baris dihapus di sumber.
  • Nilai false menandakan bahwa baris tidak dihapus.
MySQL database string string Database yang terkait dengan peristiwa.
MySQL table string string Tabel yang terkait dengan peristiwa.
MySQL change_type string string

Jenis perubahan (INSERT, UPDATE-INSERT, UPDATE-DELETE, dan DELETE) yang diwakili oleh peristiwa.

Oracle log_file string string File log yang digunakan Datastream untuk menarik peristiwa dalam replikasi CDC.
Oracle scn long long Posisi log (offset) dalam log transaksi Oracle.
Oracle row_id string string row_id Oracle.
Oracle is_deleted boolean boolean
  • Nilai true menunjukkan bahwa baris dihapus di sumber.
  • Nilai false menandakan bahwa baris tidak dihapus.
Oracle database string string Database yang terkait dengan peristiwa.
Oracle schema string string Skema yang terkait dengan tabel dari peristiwa.
Oracle table string string Tabel yang terkait dengan peristiwa.
Oracle change_type string string

Jenis perubahan (INSERT, UPDATE-INSERT, UPDATE-DELETE, dan DELETE) yang diwakili oleh peristiwa.

Oracle tx_id string string ID transaksi tempat peristiwa tersebut berada.
Oracle rs_id string string ID set data. Kombinasi rs_id dan ssn secara unik mengidentifikasi baris dalam V$LOGMNR_CONTENTS. rs_id secara unik mengidentifikasi rekaman ulang yang menghasilkan baris.
Oracle ssn long long Nomor urut SQL. Nomor ini digunakan dengan rs_id dan secara unik mengidentifikasi baris di V$LOGMNR_CONTENTS.
PostgreSQL schema string string Skema yang terkait dengan tabel dari peristiwa.
PostgreSQL table string string Tabel yang terkait dengan peristiwa.
PostgreSQL is_deleted boolean boolean
  • Nilai true menunjukkan bahwa baris dihapus di sumber.
  • Nilai false menandakan bahwa baris tidak dihapus.
PostgreSQL change_type string string Jenis perubahan (INSERT, UPDATE, DELETE) yang diwakili oleh peristiwa.
PostgreSQL tx_id string string ID transaksi tempat peristiwa tersebut berada.
PostgreSQL lsn string string Nomor urut log untuk entri saat ini.
PostgreSQL primary_keys array string array string Daftar (satu atau beberapa) nama kolom yang membentuk kunci utama tabel. Jika tabel tidak memiliki kunci utama, kolom ini akan kosong.
SQL Server table string string Tabel yang terkait dengan peristiwa.
SQL Server database long long Database yang terkait dengan peristiwa.
SQL Server schema array string array string Skema yang terkait dengan tabel dari peristiwa.
SQL Server is_deleted boolean boolean
  • Nilai true menunjukkan bahwa baris dihapus di sumber.
  • Nilai false menandakan bahwa baris tidak dihapus.
SQL Server lsn string string Nomor urut log untuk peristiwa.
SQL Server tx_id string string ID transaksi tempat peristiwa tersebut berada.
SQL Server physical_location array bilangan bulat array bilangan bulat Lokasi fisik catatan log yang dijelaskan oleh tiga bilangan bulat: ID file, ID halaman, dan ID slot catatan.
SQL Server replication_index array string array string Daftar nama kolom indeks yang dapat mengidentifikasi baris dalam tabel secara unik.
SQL Server change_type string string

Jenis perubahan (INSERT, UPDATE, DELETE) yang diwakili oleh peristiwa.

Salesforce object_name string string

Nama objek Salesforce yang terkait dengan peristiwa.

Salesforce domain string string

Nama domain yang terkait dengan peristiwa.

Salesforce is_deleted boolean boolean
  • Nilai true menunjukkan bahwa baris dihapus di sumber.
  • Nilai false menandakan bahwa baris tidak dihapus.
Salesforce change_type string string

Jenis perubahan (INSERT, UPDATE, DELETE) yang diwakili oleh peristiwa.

Salesforce primary_keys array string array string Daftar nama kolom yang membentuk kunci utama tabel. Jika tabel tidak memiliki kunci utama, kolom ini akan kosong.
MongoDB database string string Database yang terkait dengan peristiwa.
MongoDB collection string string Koleksi yang terkait dengan acara. Koleksi serupa dengan tabel dalam database relasional.
MongoDB change_type string string Jenis perubahan (CREATE, UPDATE, dan DELETE) yang diwakili oleh peristiwa.
MongoDB is_deleted boolean boolean
  • Nilai true menunjukkan bahwa baris dihapus di sumber.
  • Nilai false menandakan bahwa baris tidak dihapus.
MongoDB primary_keys array string array string Kolom _id yang berfungsi sebagai kunci utama untuk setiap dokumen dalam koleksi.

Contoh alur peristiwa

Alur ini menggambarkan peristiwa yang dihasilkan oleh tiga operasi berurutan: INSERT, UPDATE, dan DELETE, pada satu baris dalam tabel SAMPLE untuk database sumber.

WAKTU THIS_IS_MY_PK (int) FIELD1 (nchar nullable) FIELD2 (nchar non-null)>
0 1231535353 foo TLV
1 1231535353 NULL TLV

INSERT (T0)

Payload pesan terdiri dari seluruh baris baru.

{
  "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",
  }
}

UPDATE (T1)

Payload pesan terdiri dari seluruh baris baru. Kolom ini tidak menyertakan nilai sebelumnya.

{
  "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",
  }
}

HAPUS (T2)

Payload pesan terdiri dari seluruh baris baru.

{
  "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",
  }
}

Pengurutan dan konsistensi

Bagian ini membahas cara Datastream menangani pengurutan dan konsistensi.

Memesan

Datastream tidak menjamin pengurutan, tetapi setiap peristiwa berisi baris lengkap data dan stempel waktu saat data ditulis ke sumber. Di BigQuery, peristiwa yang tidak berurutan digabungkan dalam urutan yang benar secara otomatis. BigQuery menggunakan metadata peristiwa dan nomor urut perubahan (CSN) internal untuk menerapkan peristiwa ke tabel dalam urutan yang benar. Di Cloud Storage, peristiwa dari waktu yang sama dapat mencakup lebih dari satu file.

Peristiwa yang dihasilkan tidak berurutan terjadi karena desain saat peristiwa diisi ulang untuk pengisian ulang data awal yang dibuat saat aliran dimulai.

Pengurutan dapat disimpulkan berdasarkan per sumber.

Sumber Deskripsi
MySQL

Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom read_method yang dimulai dengan mysql-backfill. Tidak ada implikasi pada urutan penerimaan peristiwa dalam pengisian ulang karena peristiwa dapat digunakan dalam urutan apa pun.

Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom read_method yang ditetapkan ke mysql-cdc-binlog.

Urutan dapat disimpulkan berdasarkan kombinasi kolom log_file dan kolom log_position yang diimbangi dari file log. Kombinasi ini memberikan angka unik yang meningkat secara inkremental yang mengidentifikasi urutan operasi dalam database.

Oracle

Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom read_method yang dimulai dengan oracle-backfill. Tidak ada implikasi pada urutan penerimaan peristiwa dalam pengisian ulang karena peristiwa dapat digunakan dalam urutan apa pun.

Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom read_method yang ditetapkan ke oracle-cdc-logminer.

Urutan dapat disimpulkan berdasarkan kombinasi kolom rs_id (ID set data) dan ssn (nomor urut SQL). Kombinasi ini memberikan angka unik yang meningkat secara inkremental yang mengidentifikasi urutan operasi dalam database.

PostgreSQL

Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom read_method yang dimulai dengan postgresql-backfill. Tidak ada implikasi pada urutan penerimaan peristiwa dalam pengisian ulang karena peristiwa dapat digunakan dalam urutan apa pun.

Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom read_method yang ditetapkan ke postgres-cdc-wal.

Urutan dapat disimpulkan berdasarkan kombinasi kolom source_timestamp dan kolom lsn (nomor urut log). Kombinasi ini memberikan angka unik yang meningkat secara inkremental yang mengidentifikasi urutan operasi dalam database.

SQL Server

Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom read_method yang dimulai dengan sqlserver-backfill. Tidak ada implikasi pada urutan penerimaan peristiwa dalam pengisian ulang karena peristiwa dapat digunakan dalam urutan apa pun.

Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom read_method yang ditetapkan ke sqlserver-cdc.

Urutan dapat disimpulkan berdasarkan kombinasi kolom source_timestamp dan kolom lsn (nomor urut log). Kombinasi ini memberikan angka unik yang meningkat secara inkremental yang mengidentifikasi urutan operasi dalam database.

Salesforce (Pratinjau)

Urutan dapat ditentukan dengan menggunakan source_timestamp rekaman sebagai kunci pengurutan. Stempel waktu di Salesforce memiliki resolusi satu detik, tetapi tidak boleh ada dua peristiwa perubahan untuk rekaman yang sama yang terjadi pada detik yang sama.

MongoDB (Pratinjau)

Urutan dapat ditentukan dengan menggunakan kolom ts di log operasi atau kolom clusterTime di aliran perubahan untuk catatan. Kolom bersifat unik untuk setiap data.

Konsistensi

Datastream memastikan bahwa data dari database sumber dikirimkan ke tujuan setidaknya sekali. Tidak ada acara yang terlewat, tetapi ada kemungkinan duplikasi acara dalam aliran. Jangka waktu untuk peristiwa duplikat harus dalam urutan menit, dan ID unik universal (UUID) peristiwa dalam metadata peristiwa dapat digunakan untuk mendeteksi duplikat.

Jika file log database berisi transaksi yang belum di-commit, dan jika ada transaksi yang di-roll back, database akan mencerminkan hal ini dalam file log sebagai operasi bahasa manipulasi data (DML) "terbalik". Misalnya, operasi INSERT yang di-roll back akan memiliki operasi DELETE yang sesuai. Datastream membaca operasi ini dari file log.

Tentang streaming

Setiap aliran memiliki metadata yang menjelaskan aliran dan sumber tempat aliran menarik data. Metadata ini mencakup informasi seperti nama aliran data, profil koneksi sumber dan tujuan.

Untuk melihat definisi lengkap objek Stream, lihat dokumentasi Referensi API.

Status dan status streaming

Aliran dapat berada dalam salah satu status berikut:

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

Anda dapat menggunakan log untuk menemukan informasi status tambahan, seperti pengisian ulang tabel atau jumlah baris yang diproses. Anda juga dapat menggunakan FetchStreamErrors API untuk mengambil error.

Metadata objek tersedia menggunakan Discover API

Discover API menampilkan objek yang merepresentasikan struktur objek yang ditentukan di sumber data atau tujuan yang direpresentasikan oleh profil koneksi. Setiap objek memiliki metadata pada objek itu sendiri, serta untuk setiap kolom data yang ditariknya. Metadata ini tersedia menggunakan discover API.

Langkah berikutnya