Halaman ini menjelaskan cara mengonfigurasi tujuan BigQuery Anda untuk mengalirkan data dari database sumber menggunakan Datastream.
Mengonfigurasi set data tujuan
Saat mengonfigurasi {i>dataset<i} 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 dalam sumber, Datastream membuat set data di BigQuery secara otomatis.
Jika Anda memilih opsi ini, Datastream akan membuat set data dalam project yang berisi aliran data.
Misalnya, jika Anda memiliki sumber MySQL, dan sumber ini memiliki database
mydb
serta tabelemployees
dalam database tersebut, Datastream akan membuat set datamydb
dan tabelemployees
di BigQuery.Satu set data untuk semua skema: Anda dapat memilih set data BigQuery untuk aliran data. Datastream 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
serta tabelemployees
dalam database tersebut, Datastream akan membuat tabelmydb_employees
dalam set data yang Anda pilih.
Perilaku penulisan
Datastream menambahkan kolom STRUCT
bernama datastream_metadata
ke setiap tabel yang ditulis ke tujuan BigQuery.
Jika tabel memiliki {i>primary key<i} di sumbernya, kolom tersebut akan berisi kolom-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 mengalirkan Datastream ke tujuan dikaitkan dengan operasi DELETE
di sumber. Tabel tanpa kunci utama hanya untuk penambahan.
Ukuran peristiwa maksimum saat Anda melakukan streaming data ke BigQuery adalah 20 MB.
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 pembaruan dan penyisipan memungkinkan Anda memperbarui tujuan BigQuery secara dinamis saat baris ditambahkan, diubah, atau dihapus. Datastream mengalirkan operasi pembaruan dan penyisipan ini ke tabel tujuan menggunakan BigQuery Storage Write API.
Menentukan batas penghentian data
BigQuery menerapkan perubahan sumber di latar belakang secara berkelanjutan, atau pada waktu proses kueri, sesuai dengan batas penghentian data yang dikonfigurasi. Saat Datastream membuat tabel baru di BigQuery, opsi max_staleness
pada tabel ditetapkan sesuai dengan nilai batas penghentian data saat ini untuk aliran data.
Untuk mengetahui informasi selengkapnya tentang penggunaan tabel BigQuery dengan opsi max_staleness
, lihat Ketidakberlakuan tabel.
Mengontrol biaya BigQuery
Biaya BigQuery ditagih secara terpisah dari Datastream. Untuk mempelajari cara mengontrol biaya BigQuery, lihat harga BigQuery CDC.
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 (unsigned) |
NUMERIC |
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 presisinya adalah <=38, dan nilai skalanya adalah <=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 |
|
JSON
|
MySQL | LONGBLOB |
STRING (hex encoded) |
MySQL | LONGTEXT |
STRING (hex encoded) |
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 , lalu STRING , atau BIGNUMERIC /NUMERIC . Untuk informasi selengkapnya, lihat jenis desimal berparameter. |
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 lebih memilih untuk 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 Jenis data peta.
BQ_COLUMN_NAME: nama kolom yang relevan di tabel BigQuery.
Ada 2 pengecualian terkait 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 Google Cloud yang sama dengan aliran Datastream.
Jika tabel dalam database sumber memiliki kunci utama (misalnya, ID pengguna), lalu ada perubahan dalam tabel sehingga kunci utama berbeda (untuk contoh ini, kunci utama sekarang adalah ID pengguna dan tanggal), Datastream tidak dapat mengalirkan perubahan ini ke tujuan.
Agar Datastream mengalirkan tabel ke tujuan dengan kunci utama yang diubah, selesaikan langkah-langkah berikut:
- Ubah kunci utama untuk tabel database sumber.
- Periksa metrik total latensi untuk streaming, dan tunggu setidaknya selama latensi saat ini untuk memastikan bahwa semua peristiwa yang sedang berlangsung ditulis ke tujuan. Tindakan ini memungkinkan semua peristiwa dengan kunci utama asli berhasil di-streaming.
- Menjeda streaming.
- Lepaskan tabel di tujuan.
- Lanjutkan streaming.
- Memicu pengisian ulang di tabel.
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 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 utama jenis data
FLOAT
atauREAL
. Tabel tersebut tidak direplikasi.
Untuk mempelajari jenis dan rentang tanggal BigQuery lebih lanjut, lihat Jenis data.