Ringkasan
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 perubahan tunggal yang dibuat oleh objek tertentu, seperti penyisipan database.
Streaming, objek, dan peristiwa memiliki data dan metadata yang terkait dengannya. Data dan metadata ini dapat digunakan untuk tujuan yang berbeda.
Tentang peristiwa
Setiap peristiwa terdiri dari tiga jenis data:
- Data peristiwa: Ini mewakili perubahan pada data itu sendiri dari objek yang berasal dari sumber aliran. Setiap peristiwa berisi keseluruhan baris yang berubah.
- Metadata umum: Metadata ini muncul di setiap peristiwa yang dihasilkan oleh Datastream yang digunakan untuk tindakan, seperti menghapus data duplikat di tujuan.
- Metadata khusus sumber: Metadata ini muncul di setiap peristiwa yang dibuat oleh sumber streaming tertentu. Metadata ini bervariasi menurut sumber.
Data peristiwa
Data peristiwa adalah payload setiap perubahan dari objek tertentu yang berasal dari sumber aliran data.
Peristiwa memiliki format Avro atau JSON. Dengan mempertimbangkan format Avro, untuk setiap kolom, peristiwa akan berisi indeks dan nilai kolom. Dengan menggunakan indeks kolom, nama kolom dan tipe terpadu dapat diambil dari skema di {i>header<i} Avro.
Jika menggunakan format JSON, peristiwa akan berisi nama dan nilai kolom untuk setiap kolom.
Metadata peristiwa dapat digunakan untuk mengumpulkan informasi tentang asal peristiwa, serta untuk menghapus data duplikat pada peristiwa tujuan dan pesanan oleh konsumen downstream.
Tabel berikut mencantumkan dan menjelaskan kolom serta jenis data untuk metadata peristiwa generik dan spesifik sumber.
Metadata umum
Metadata ini konsisten untuk semua jenis streaming.
Kolom | Jenis Avro | Jenis JSON | Deskripsi |
---|---|---|---|
stream_name |
string | string | Nama streaming 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 tambahan yang dibuat saat transaksi di-roll back selama replikasi CDC. Nilai yang memungkinkan mencakup:
|
object |
string | string | Nama yang digunakan untuk mengelompokkan berbagai jenis peristiwa, biasanya nama tabel atau objek dalam sumber. |
schema_key |
string | string | ID unik untuk skema terpadu peristiwa. |
uuid |
string | string | ID unik untuk peristiwa yang dihasilkan oleh Datastream. |
read_timestamp |
timestamp-milis | string | Stempel waktu (UTC) saat data dibaca oleh Datastream (stempel waktu epoch dalam milidetik). |
source_timestamp |
timestamp-milis | string | Stempel waktu (UTC) saat kumpulan 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 sesuai urutan kemunculannya. |
Metadata khusus sumber
Metadata ini dikaitkan dengan CDC dan peristiwa pengisian ulang dari database sumber. Untuk melihat {i>metadata<i} ini, pilih sumber dari menu {i>drop-down<i} di bawah.
Asal | Kolom | Jenis Avro | Jenis JSON | Deskripsi |
---|---|---|---|---|
MySQL | log_file |
string | string | File log tempat Datastream mengambil peristiwa dalam replikasi CDC. |
MySQL | log_position |
long | long | Posisi log (offset) di 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 kosong. |
MySQL | is_deleted |
boolean | boolean |
|
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 ( |
Oracle | log_file |
string | string | File log tempat Datastream mengambil peristiwa dalam replikasi CDC. |
Oracle | scn |
long | long | Posisi log (offset) di log transaksi Oracle. |
Oracle | row_id |
string | string | row_id Oracle. |
Oracle | is_deleted |
boolean | boolean |
|
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 ( |
Oracle | tx_id |
string | string | ID transaksi yang memiliki peristiwa tersebut. |
Oracle | rs_id |
string | string | ID kumpulan data. Penggabungan rs_id dan ssn secara unik mengidentifikasi baris di V$LOGMNR_CONTENTS . rs_id secara unik mengidentifikasi pencatatan pengulangan yang menghasilkan baris. |
Oracle | ssn |
long | long | Nomor urut SQL. Angka 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 |
|
PostgreSQL | change_type |
string | string | Jenis perubahan (INSERT , UPDATE , DELETE ) yang diwakili oleh peristiwa.
|
PostgreSQL | tx_id |
string | string | ID transaksi yang memiliki peristiwa tersebut. |
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 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 |
|
SQL Server | lsn |
string | string | Nomor urut log untuk peristiwa. |
SQL Server | tx_id |
string | string | ID transaksi yang memiliki peristiwa tersebut. |
SQL Server | physical_location |
Array bilangan bulat | Array bilangan bulat | Lokasi fisik kumpulan data log yang dijelaskan dengan tiga bilangan bulat: ID file, ID halaman, dan ID slot kumpulan data. |
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 peristiwa. |
Contoh alur peristiwa
Alur ini menggambarkan peristiwa yang dihasilkan oleh tiga operasi berturut-turut:
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 |
SISIPKAN (T0)
Payload pesan terdiri dari keseluruhan 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",
}
}
PEMBARUAN (T1)
Payload pesan terdiri dari keseluruhan baris baru. Data 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 keseluruhan 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 data lengkap dan stempel waktu saat data ditulis ke sumber. Di BigQuery, peristiwa yang tidak berurutan akan 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 dibuat tidak berurutan terjadi karena desain saat peristiwa diisi ulang untuk pengisian ulang awal data yang dibuat saat aliran data dimulai.
Pengurutan dapat disimpulkan berdasarkan sumber per sumber.
Asal | Deskripsi |
---|---|
MySQL | Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom Urutannya dapat disimpulkan berdasarkan kombinasi kolom |
Oracle | Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom Urutannya dapat disimpulkan dengan kombinasi kolom |
PostgreSQL | Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom Urutannya dapat disimpulkan dengan kombinasi kolom |
SQL Server |
Peristiwa yang merupakan bagian dari pengisian ulang awal memiliki kolom Peristiwa yang merupakan bagian dari replikasi yang sedang berlangsung memiliki kolom Urutannya dapat disimpulkan dengan kombinasi kolom |
Konsistensi
Datastream menjamin bahwa data dari database sumber akan dikirim ke tujuan setidaknya sekali. Tidak ada acara yang terlewat, tetapi ada kemungkinan acara duplikat dalam streaming. Periode untuk peristiwa duplikat harus dalam urutan menit, dan ID unik universal (UUID) dari peristiwa dalam metadata peristiwa dapat digunakan untuk mendeteksi duplikat.
Jika file log database berisi transaksi yang tidak di-commit, jika ada transaksi yang di-roll back, maka database mencerminkan hal ini dalam file log sebagai operasi bahasa manipulasi data (DML) "terbalik". Misalnya, operasi INSERT
yang di-rollback akan memiliki operasi DELETE
yang sesuai. Datastream membaca operasi ini dari file log.
Tentang streaming
Setiap streaming memiliki metadata yang menjelaskan streaming dan sumber tempatnya mengambil data. Metadata ini mencakup informasi seperti nama streaming, profil koneksi sumber dan tujuan, dan sebagainya.
Untuk melihat definisi lengkap objek Stream, baca dokumentasi Referensi API.
Status dan status streaming
Streaming 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, jumlah baris yang diproses, dan sebagainya. Anda juga dapat menggunakan FetchStreamErrors
API untuk mengambil error.
Metadata objek tersedia menggunakan Discover API
API penemuan menampilkan objek yang mewakili struktur objek yang ditentukan dalam sumber data atau tujuan yang diwakili oleh profil koneksi. Setiap objek memiliki metadata pada objek itu sendiri, serta untuk setiap bidang data yang diambilnya. Metadata ini tersedia melalui discover API.