Halaman ini menjelaskan cara mengonfigurasi tujuan BigQuery untuk melakukan streaming data dari database sumber menggunakan Datastream.
Mengonfigurasi set data tujuan
Saat mengonfigurasi set data untuk tujuan BigQuery, Anda dapat memilih salah satu opsi berikut:
Set data untuk setiap skema: Set data dipilih atau dibuat di lokasi BigQuery yang ditentukan, berdasarkan nama skema sumber. Akibatnya, untuk setiap skema di sumber, Datastream akan membuat set data di BigQuery secara otomatis.
Misalnya, jika Anda memiliki sumber MySQL, dan sumber ini memiliki database
mydb
dan tabelemployees
dalam database, Datastream akan membuat set datamydb
dan tabelemployees
di BigQuery.Jika Anda memilih opsi ini, Datastream akan membuat set data di project yang berisi stream. Meskipun Anda tidak perlu membuat set data di region yang sama dengan aliran data, sebaiknya simpan semua resource untuk aliran data, serta set data, di region yang sama untuk pengoptimalan biaya dan performa.
Set data tunggal untuk semua skema: Anda dapat memilih set data BigQuery untuk aliran. Aliran data mengalirkan semua data ke dalam set data ini. Untuk set data yang Anda pilih, Datastream membuat semua tabel sebagai
<schema>_<table>
.Misalnya, jika Anda memiliki sumber MySQL, dan sumber ini memiliki database
mydb
dan tabelemployees
dalam database, maka Datastream akan membuat tabelmydb_employees
di set data yang Anda pilih.
Perilaku penulisan
Ukuran peristiwa maksimum saat Anda melakukan streaming data ke BigQuery adalah 20 MB.
Saat mengonfigurasi stream, Anda dapat memilih cara Datastream menulis data perubahan ke BigQuery. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi mode tulis.
Mengonfigurasi mode penulisan
Ada dua mode yang dapat Anda gunakan untuk menentukan cara penulisan data ke BigQuery:
- Gabungkan: Ini adalah mode penulisan default. Jika dipilih, BigQuery akan mencerminkan cara data Anda disimpan dalam database sumber. Artinya, Datastream menulis semua perubahan pada data Anda ke BigQuery, lalu BigQuery menggabungkan perubahan tersebut dengan data yang ada, sehingga membuat tabel akhir yang merupakan replika tabel sumber. Dengan mode Gabungkan, tidak ada catatan historis peristiwa perubahan yang disimpan. Misalnya, jika Anda menyisipkan lalu memperbarui baris, BigQuery hanya menyimpan data yang diperbarui. Jika Anda kemudian menghapus baris dari tabel sumber, BigQuery tidak lagi menyimpan catatan baris tersebut.
- Khusus penambahan: Mode penulisan khusus penambahan memungkinkan Anda menambahkan data ke BigQuery sebagai aliran perubahan (peristiwa
INSERT
,UPDATE-INSERT
,UPDATE-DELETE
, danDELETE
). Gunakan mode ini saat Anda perlu mempertahankan status historis data Anda. Untuk lebih memahami mode penulisan hanya tambahkan, pertimbangkan skenario berikut:- Pengisian ulang awal: setelah pengisian ulang awal, semua peristiwa ditulis ke BigQuery sebagai peristiwa jenis
INSERT
, dengan stempel waktu, ID unik universal (UUID), dan nomor urut perubahan yang sama. - Pembaruan kunci utama: saat kunci utama berubah, dua baris akan ditulis ke BigQuery:
- Baris
UPDATE-DELETE
dengan kunci utama asli - Baris
UPDATE-INSERT
dengan kunci utama baru
- Baris
- Pembaruan baris: saat Anda memperbarui baris, satu baris
UPDATE-INSERT
ditulis ke BigQuery - Penghapusan baris: saat Anda menghapus baris, satu baris
DELETE
ditulis ke BigQuery
- Pengisian ulang awal: setelah pengisian ulang awal, semua peristiwa ditulis ke BigQuery sebagai peristiwa jenis
Metadata tabel
Datastream menambahkan kolom STRUCT
bernama datastream_metadata
ke setiap
tabel yang ditulis ke tujuan BigQuery.
Mode penulisan penggabungan
Jika tabel memiliki kunci utama di sumber, kolom akan berisi kolom berikut:
UUID
: Kolom ini memiliki jenis dataSTRING
.SOURCE_TIMESTAMP
: Kolom ini memiliki jenis dataINTEGER
.
Jika tabel tidak memiliki kunci utama, kolom akan berisi kolom tambahan: IS_DELETED
. Kolom ini memiliki jenis data BOOLEAN
, dan menunjukkan apakah data yang di-streaming Datastream ke tujuan terkait dengan operasi DELETE
di sumber. Tabel tanpa kunci utama hanya dapat ditambahkan.
Mode penulisan hanya tambahkan
Kolom datastream_metadata
berisi kolom yang sama untuk tabel dengan dan tanpa kunci primer:
UUID
: Kolom ini memiliki jenis dataSTRING
.SOURCE_TIMESTAMP
: Kolom ini memiliki jenis dataINTEGER
.CHANGE_SEQUENCE_NUMBER
: Kolom ini memiliki jenis dataSTRING
. Nomor urut internal yang digunakan oleh Datastream untuk setiap peristiwa perubahan.CHANGE_TYPE
: Kolom ini memiliki jenis dataSTRING
. Menunjukkan jenis peristiwa perubahan:INSERT
,UPDATE-INSERT
,UPDATE-DELETE
, atauDELETE
.SORT_KEYS
: Kolom ini berisi array nilaiSTRING
. Anda dapat menggunakan nilai untuk mengurutkan peristiwa perubahan.
Menggunakan tabel BigQuery dengan opsi max_staleness
Sebagai bagian dari penyerapan yang mendekati real-time, Datastream menggunakan dukungan bawaan BigQuery untuk operasi upsert, seperti memperbarui, menyisipkan, dan menghapus data. Operasi upsert memungkinkan Anda memperbarui tujuan BigQuery secara dinamis saat baris ditambahkan, diubah, atau dihapus. Datastream melakukan streaming operasi upsert ini ke tabel tujuan menggunakan Storage Write API BigQuery.
Menentukan batas keusangan data
BigQuery menerapkan modifikasi sumber di latar belakang secara berkelanjutan, atau pada waktu eksekusi kueri, sesuai dengan batas keaktualan data yang dikonfigurasi. Saat Datastream membuat tabel baru di BigQuery, opsi max_staleness
tabel ditetapkan sesuai dengan nilai batas keusangan data saat ini untuk aliran.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan tabel BigQuery dengan opsi max_staleness
, lihat Keterlambatan tabel.
Mengontrol biaya BigQuery
Biaya BigQuery ditagih secara terpisah dari Datastream. Untuk mempelajari cara mengontrol biaya BigQuery, lihat Harga CDC BigQuery.
Memetakan jenis data
Tabel berikut mencantumkan konversi jenis data dari database sumber yang didukung ke tujuan BigQuery.
Database sumber | Jenis data sumber | Jenis data BigQuery |
---|---|---|
MySQL | BIGINT(size) |
INT64 |
MySQL | BIGINT (unsigned) |
DECIMAL |
MySQL | BINARY(size) |
STRING (hex encoded) |
MySQL | BIT(size) |
INT64 |
MySQL | BLOB(size) |
STRING (hex encoded) |
MySQL | BOOL |
INT64 |
MySQL | CHAR(size) |
STRING |
MySQL | DATE |
DATE |
MySQL | DATETIME(fsp) |
DATETIME |
MySQL | DECIMAL(precision, scale) |
Jika nilai presisi <=38, dan nilai skala <=9, maka NUMERIC . Atau BIGNUMERIC |
MySQL | DOUBLE(size, d) |
FLOAT64 |
MySQL | ENUM(val1, val2, val3, ...) |
STRING |
MySQL | FLOAT(precision) |
FLOAT64 |
MySQL | FLOAT(size, d) |
FLOAT64 |
MySQL | INTEGER(size) |
INT64 |
MySQL | INTEGER (unsigned) |
INT64 |
MySQL |
|
JSON
Jenis data |
MySQL | LONGBLOB |
STRING (hex encoded) |
MySQL | LONGTEXT |
STRING |
MySQL | MEDIUMBLOB |
STRING (hex encoded) |
MySQL | MEDIUMINT(size) |
INT64 |
MySQL | MEDIUMTEXT |
STRING |
MySQL | SET(val1, val2, val3, ...) |
STRING |
MySQL | SMALLINT(size) |
INT64 |
MySQL | TEXT(size) |
STRING |
MySQL | TIME(fsp) |
INTERVAL |
MySQL | TIMESTAMP(fsp) |
TIMESTAMP |
MySQL | TINYBLOB |
STRING (hex encoded) |
MySQL | TINYINT(size) |
INT64 |
MySQL | TINYTEXT |
STRING |
MySQL | VARBINARY(size) |
STRING (hex encoded) |
MySQL | VARCHAR |
STRING |
MySQL | YEAR |
INT64 |
Oracle | ANYDATA |
UNSUPPORTED |
Oracle | BFILE |
STRING |
Oracle | BINARY DOUBLE |
FLOAT64 |
Oracle | BINARY FLOAT |
FLOAT64 |
Oracle | BLOB |
BYTES |
Oracle | CHAR |
STRING |
Oracle | CLOB |
STRING |
Oracle | DATE |
DATETIME
|
Oracle | DOUBLE PRECISION |
FLOAT64 |
Oracle | FLOAT(p) |
FLOAT64 |
Oracle | INTERVAL DAY TO SECOND |
UNSUPPORTED |
Oracle | INTERVAL YEAR TO MONTH |
UNSUPPORTED |
Oracle | LONG /LONG RAW |
STRING |
Oracle | NCHAR |
STRING |
Oracle | NCLOB |
STRING |
Oracle | NUMBER(precision, scale>0) |
Jika 0<p=<78, petakan ke jenis desimal berparameter. Jika p>=79, petakan ke STRING |
Oracle | NVARCHAR2 |
STRING |
Oracle | RAW |
STRING |
Oracle | ROWID |
STRING |
Oracle | SDO_GEOMETRY |
UNSUPPORTED |
Oracle | SMALLINT |
INT64 |
Oracle | TIMESTAMP |
TIMESTAMP
|
Oracle | TIMESTAMP WITH TIME ZONE |
TIMESTAMP
|
Oracle | UDT (user-defined type) |
UNSUPPORTED |
Oracle | UROWID |
STRING |
Oracle | VARCHAR |
STRING |
Oracle | VARCHAR2 |
STRING |
Oracle | XMLTYPE |
UNSUPPORTED |
PostgreSQL | ARRAY |
JSON
|
PostgreSQL | BIGINT |
INT64 |
PostgreSQL | BIT |
BYTES |
PostgreSQL | BIT_VARYING |
BYTES |
PostgreSQL | BOOLEAN |
BOOLEAN |
PostgreSQL | BOX |
UNSUPPORTED |
PostgreSQL | BYTEA |
BYTES |
PostgreSQL | CHARACTER |
STRING |
PostgreSQL | CHARACTER_VARYING |
STRING |
PostgreSQL | CIDR |
STRING |
PostgreSQL | CIRCLE |
UNSUPPORTED |
PostgreSQL | DATE |
DATE |
PostgreSQL | DOUBLE_PRECISION |
FLOAT64 |
PostgreSQL | ENUM |
STRING |
PostgreSQL | INET |
STRING |
PostgreSQL | INTEGER |
INT64 |
PostgreSQL | INTERVAL |
INTERVAL |
PostgreSQL | JSON |
JSON |
PostgreSQL | JSONB |
JSON |
PostgreSQL | LINE |
UNSUPPORTED |
PostgreSQL | LSEG |
UNSUPPORTED |
PostgreSQL | MACADDR |
STRING |
PostgreSQL | MONEY |
FLOAT64 |
PostgreSQL | NUMERIC |
Jika presisi = -1 , maka STRING (jenis NUMERIC BigQuery memerlukan presisi tetap). Jika tidak, BIGNUMERIC /NUMERIC . Untuk mengetahui informasi selengkapnya, lihat bagian Angka presisi arbitrer dalam dokumentasi PostgreSQL. |
PostgreSQL | OID |
INT64 |
PostgreSQL | PATH |
UNSUPPORTED |
PostgreSQL | POINT |
UNSUPPORTED |
PostgreSQL | POLYGON |
UNSUPPORTED |
PostgreSQL | REAL |
FLOAT64 |
PostgreSQL | SMALLINT |
INT64 |
PostgreSQL | SMALLSERIAL |
INT64 |
PostgreSQL | SERIAL |
INT64 |
PostgreSQL | TEXT |
STRING |
PostgreSQL | TIME |
TIME |
PostgreSQL | TIMESTAMP |
TIMESTAMP |
PostgreSQL | TIMESTAMP_WITH_TIMEZONE |
TIMESTAMP |
PostgreSQL | TIME_WITH_TIMEZONE |
TIME |
PostgreSQL | TSQUERY |
STRING |
PostgreSQL | TSVECTOR |
STRING |
PostgreSQL | TXID_SNAPSHOT |
STRING |
PostgreSQL | UUID |
STRING |
PostgreSQL | XML |
STRING |
SQL Server | BIGINT |
INT64 |
SQL Server | BINARY |
BYTES |
SQL Server | BIT |
BOOL |
SQL Server | CHAR |
STRING |
SQL Server | DATE |
DATE |
SQL Server | DATETIME2 |
DATETIME |
SQL Server | DATETIME |
DATETIME |
SQL Server | DATETIMEOFFSET |
TIMESTAMP |
SQL Server | DECIMAL |
BIGNUMERIC |
SQL Server | FLOAT |
FLOAT64 |
SQL Server | IMAGE |
BYTES |
SQL Server | INT |
INT64 |
SQL Server | MONEY |
BIGNUMERIC |
SQL Server | NCHAR |
STRING |
SQL Server | NTEXT |
STRING |
SQL Server | NUMERIC |
BIGNUMERIC |
SQL Server | NVARCHAR |
STRING |
SQL Server | NVARCHAR(MAX) |
STRING |
SQL Server | REAL |
FLOAT64 |
SQL Server | SMALLDATETIME |
DATETIME |
SQL Server | SMALLINT |
INT64 |
SQL Server | SMALLMONEY |
NUMERIC |
SQL Server | TEXT |
STRING |
SQL Server | TIME |
TIME |
SQL Server | TIMESTAMP /ROWVERSION |
BYTES |
SQL Server | TINYINT |
INT64 |
SQL Server | UNIQUEIDENTIFIER |
STRING |
SQL Server | VARBINARY |
BYTES |
SQL Server | VARBINARY(MAX) |
BYTES |
SQL Server | VARCHAR |
STRING |
SQL Server | VARCHAR(MAX) |
STRING |
SQL Server | XML |
STRING |
Salesforce | BOOLEAN |
BOOLEAN |
Salesforce | BYTE |
BYTES |
Salesforce | DATE |
DATE |
Salesforce | DATETIME |
DATETIME |
Salesforce | DOUBLE |
BIGNUMERIC |
Salesforce | INT |
INT64 |
Salesforce | STRING |
STRING |
Salesforce | TIME |
TIME |
Salesforce | ANYTYPE (dapat berupa STRING , DATE , NUMBER , atau BOOLEAN ) |
STRING |
Salesforce | COMBOBOX |
STRING |
Salesforce | CURRENCY |
FLOAT64
Panjang maksimum yang diizinkan adalah 18 digit. |
Salesforce | DATACATEGORYGROUPREFERENCE |
STRING |
Salesforce | EMAIL |
STRING |
Salesforce | ENCRYPTEDSTRING |
STRING |
Salesforce | ID |
STRING |
Salesforce | JUNCTIONIDLIST |
STRING |
Salesforce | MASTERRECORD |
STRING |
Salesforce | MULTIPICKLIST |
STRING |
Salesforce | PERCENT |
FLOAT64
Panjang maksimum yang diizinkan adalah 18 digit. |
Salesforce | PHONE |
STRING |
Salesforce | PICKLIST |
STRING |
Salesforce | REFERENCE |
STRING |
Salesforce | TEXTAREA |
STRING
Panjang maksimum yang diizinkan adalah 255 karakter. |
Salesforce | URL |
STRING |
Jenis data MongoDB
Dokumen JSON biner (BSON) MongoDB ditulis ke BigQuery dalam format mode ketat MongoDB Extended JSON (v1). Tabel ini menunjukkan cara jenis data direpresentasikan di BigQuery, beserta contoh nilainya.
Jenis data sumber | Nilai contoh | Nilai jenis JSON BigQuery |
---|---|---|
DOUBLE |
3.1415926535
|
3.1415926535 |
STRING | "Hello, MongoDB!" | "Hello, MongoDB!" |
ARRAY |
| ["item1",123,true,{"subItem":"object in array"}] |
BINARY DATA |
new BinData(0, "SGVsbG8gQmluYXJ5IERhdGE=") |
{"$binary":"SGVsbG8gQmluYXJ5IERhdGE=","$type":"00"} |
BOOLEAN | true | true |
DATE |
2024-12-25T10:30:00.000+00:00
|
{"$date": 1735122600000}
|
NULL | null | null |
REGEX | /^mongo(db)?$/i | {"$options":"i","$regex":"^mongo(db)?$"} |
JAVASCRIPT | function() {return this.stringField.length;} | {"$code":"function() {\n return this.stringField.length;\n }"} |
DECIMAL128 | NumberDecimal("1234567890.1234567890") | {"$numberDecimal":"1234567890.1234567890"} |
OBJECTID | ObjectId('673c5d8dbfe2e51808cc2c3d') | {"$oid": "673c5d8dbfe2e51808cc2c3d"} |
LONG | 3567587327 | {"$numberLong": "3567587327"} |
INT32 | 42 | 42 |
INT64 | 1864712049423024127 | {"$numberLong": "1864712049423024127"} |
TIMESTAMP | new Timestamp(1747888877, 1) | {"$timestamp":{"i":1,"t":1747888877}} |
Mengkueri array PostgreSQL sebagai jenis data array BigQuery
Jika Anda lebih suka membuat kueri array PostgreSQL sebagai jenis data ARRAY
BigQuery,
Anda dapat mengonversi nilai JSON
menjadi array BigQuery menggunakan fungsi JSON_VALUE_ARRAY
BigQuery:
SELECT ARRAY(SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)AS array_col
Ganti kode berikut:
TYPE: jenis BigQuery yang cocok dengan jenis elemen dalam array sumber PostgreSQL. Misalnya, jika jenis sumber adalah array nilai
BIGINT
, ganti TYPE denganINT64
.Untuk mengetahui informasi selengkapnya tentang cara memetakan jenis data, lihat Memetakan jenis data.
BQ_COLUMN_NAME: nama kolom yang relevan dalam tabel BigQuery.
Ada 2 pengecualian untuk cara Anda mengonversi nilai:
Untuk array nilai
BIT
,BIT_VARYING
, atauBYTEA
di kolom sumber, jalankan kueri berikut:SELECT ARRAY(SELECT FROM_BASE64(element) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_bytes Untuk array nilai
JSON
atauJSONB
di kolom sumber, gunakan fungsiJSON_QUERY_ARRAY
:SELECT ARRAY(SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_jsons
Batasan umum
Batasan umum untuk menggunakan BigQuery sebagai tujuan meliputi:
- Anda hanya dapat mereplikasi data ke set data BigQuery yang berada di project yang sama dengan aliran Datastream. Google Cloud
- Secara default, Datastream tidak mendukung penambahan kunci utama ke tabel yang sudah direplikasi ke BigQuery tanpa kunci utama, atau penghapusan kunci utama dari tabel yang direplikasi ke BigQuery dengan kunci utama. Jika Anda perlu melakukan perubahan tersebut, hubungi Dukungan Google. Untuk mengetahui informasi tentang cara mengubah definisi kunci utama untuk tabel sumber yang sudah memiliki kunci utama, lihat Mendiagnosis masalah.
Kunci utama di BigQuery harus berupa jenis data berikut:
DATE
BOOL
GEOGRAPHY
INT64
NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
DATETIME
Tabel yang berisi kunci utama jenis data yang tidak didukung tidak direplikasi oleh Datastream.
BigQuery tidak mendukung nama tabel dengan karakter
.
,$
,/
,@
, atau+
. Datastream mengganti karakter tersebut dengan garis bawah saat membuat tabel tujuan.Misalnya,
table.name
dalam database sumber menjaditable_name
di BigQuery.Untuk mengetahui informasi selengkapnya tentang nama tabel di BigQuery, lihat Penamaan tabel.
BigQuery tidak mendukung lebih dari empat kolom pengelompokan. Saat mereplikasi tabel dengan lebih dari empat kolom kunci utama, Datastream menggunakan empat kolom kunci utama sebagai kolom pengelompokan.
Datastream memetakan literal tanggal dan waktu di luar rentang seperti jenis tanggal tak terbatas PostgreSQL ke nilai berikut:
DATE
positif ke nilai9999-12-31
DATE
negatif ke nilai0001-01-01
TIMESTAMP
positif ke nilai9999-12-31 23:59:59.999000 UTC
TIMESTAMP
negatif ke nilai0001-01-01 00:00:00 UTC
BigQuery tidak mendukung tabel streaming yang memiliki kunci primer dengan jenis data
FLOAT
atauREAL
. Tabel tersebut tidak direplikasi. Untuk mempelajari lebih lanjut jenis dan rentang tanggal BigQuery, lihat Jenis data.Jika sumber Anda adalah Salesforce, opsi konfigurasi Set data untuk setiap skema tidak didukung.