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 otomatis membuat set data di BigQuery.
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 dalam project yang berisi aliran data. 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 streaming. Aliran data akan mengalirkan semua data ke set data ini. Untuk set data yang Anda pilih, Datastream akan membuat semua tabel sebagai
<schema>_<table>
.Misalnya, jika Anda memiliki sumber MySQL, dan sumber ini memiliki database
mydb
dan tabelemployees
dalam database, Datastream akan membuat tabelmydb_employees
dalam set data yang Anda pilih.
Perilaku tulis
Ukuran peristiwa maksimum saat Anda melakukan streaming data ke BigQuery adalah 20 MB.
Saat mengonfigurasi aliran data, Anda dapat memilih cara Datastream menulis data perubahan ke BigQuery. Untuk informasi selengkapnya, lihat Mengonfigurasi mode tulis.
Mengonfigurasi mode tulis
Ada dua mode yang dapat Anda gunakan untuk menentukan cara penulisan data ke BigQuery:
- Gabungkan: Ini adalah mode tulis default. Jika dipilih, BigQuery akan mencerminkan cara data Anda disimpan di database sumber. Artinya, Datastream menulis semua perubahan pada data Anda ke BigQuery, lalu BigQuery akan 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 akan menyimpan data yang diperbarui. Jika Anda kemudian menghapus baris dari tabel sumber, BigQuery tidak lagi menyimpan data baris tersebut.
- Hanya tambahkan: Mode tulis hanya tambahkan memungkinkan Anda menambahkan data ke BigQuery sebagai aliran perubahan (peristiwa
INSERT
,UPDATE-INSERT
,UPDATE-DELETE
, danDELETE
). Gunakan mode ini jika Anda perlu mempertahankan status historis data. Untuk mendapatkan pemahaman yang lebih baik tentang mode tulis hanya tambahan, 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 urutan 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
akan ditulis ke BigQuery - Penghapusan baris: saat Anda menghapus baris, satu baris
DELETE
akan 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.
Menggabungkan mode tulis
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 dikaitkan dengan operasi DELETE
di sumber. Tabel tanpa kunci utama hanya dapat ditambahkan.
Mode tulis hanya tambahkan
Kolom datastream_metadata
berisi kolom yang sama untuk tabel dengan dan
tanpa kunci utama:
UUID
: Kolom ini memiliki jenis dataSTRING
.SOURCE_TIMESTAMP
: Kolom ini memiliki jenis dataINTEGER
.CHANGE_SEQUENCE_NUMBER
: Kolom ini memiliki jenis dataSTRING
. Ini adalah nomor urutan internal yang digunakan oleh Datastream untuk setiap peristiwa perubahan.CHANGE_TYPE
: Kolom ini memiliki jenis dataSTRING
. Ini 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 pembaruan dan penyisipan, 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 penyisipan dan pembaruan ini ke tabel tujuan menggunakan Storage Write API BigQuery.
Menentukan batas keusangan data
BigQuery menerapkan perubahan sumber di latar belakang secara berkelanjutan, atau pada waktu kueri dijalankan, sesuai dengan batas keusangan 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 data.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan tabel BigQuery dengan opsi max_staleness
, lihat Ketidakaktualan tabel.
Mengontrol biaya BigQuery
Biaya BigQuery ditagih secara terpisah dari Datastream. Untuk mempelajari cara mengontrol biaya BigQuery, lihat Harga CDC BigQuery.
Jenis data peta
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) |
LONG |
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) |
LONG |
MySQL |
|
JSON
|
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 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 |
Mengkueri array PostgreSQL sebagai jenis data array BigQuery
Jika memilih untuk membuat kueri array PostgreSQL sebagai jenis data ARRAY
BigQuery,
Anda dapat mengonversi nilai JSON
ke 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 yang diketahui untuk menggunakan BigQuery sebagai tujuan meliputi:
- Anda hanya dapat mereplikasi data ke set data BigQuery yang berada dalam project Google Cloud yang sama dengan aliran Datastream.
- 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 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 dari 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
di database sumber menjaditable_name
di BigQuery.Untuk 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 infinity 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 utama jenis data
FLOAT
atauREAL
. Tabel tersebut tidak direplikasi.
Untuk mempelajari lebih lanjut jenis dan rentang tanggal BigQuery, lihat Jenis data.