Mengonfigurasi tujuan BigQuery

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 tabel employees dalam database tersebut, Datastream akan membuat set data mydb dan tabel employees 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 tabel employees dalam database tersebut, Datastream akan membuat tabel mydb_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 data string.
  • SOURCE_TIMESTAMP: Kolom ini memiliki jenis data integer.

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(size) INT64
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

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 STRING
Oracle NUMBER(precision=*) STRING
Oracle NUMBER(precision, scale<=0) Jika p<=18, maka INT64. Jika 18<p=<78, petakan ke jenis desimal yang diparameterisasi. Jika p>=79, petakan ke 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 dengan INT64.

    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, atau BYTEA 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 atau JSONB di kolom sumber, gunakan fungsi JSON_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:

    1. Ubah kunci utama untuk tabel database sumber.
    2. 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.
    3. Menjeda streaming.
    4. Lepaskan tabel di tujuan.
    5. Lanjutkan streaming.
    6. 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 menjadi table_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 nilai 9999-12-31
    • DATE negatif ke nilai 0001-01-01
    • TIMESTAMP positif ke nilai 9999-12-31 23:59:59.999000 UTC
    • TIMESTAMP negatif ke nilai 0001-01-01 00:00:00 UTC
  • BigQuery tidak mendukung tabel streaming yang memiliki kunci utama jenis data FLOAT atau REAL. Tabel tersebut tidak direplikasi.
  • Untuk mempelajari jenis dan rentang tanggal BigQuery lebih lanjut, lihat Jenis data.