Connector OceanBase mengintegrasikan Realtime Compute for Apache Flink dengan OceanBase, yaitu database pemrosesan transaksional dan analitik hibrida (HTAP) terdistribusi native. Gunakan connector ini untuk membaca aliran change data capture (CDC), melakukan join tabel dimensi, dan menulis hasilnya kembali ke OceanBase.
Connector OceanBase berada dalam status pratinjau publik.
Informasi latar belakang
OceanBase adalah sistem manajemen database pemrosesan transaksional dan analitik hibrida (HTAP) terdistribusi native. Untuk informasi lebih lanjut, lihat situs web OceanBase. Guna mengurangi biaya refaktor sistem bisnis saat migrasi dari database MySQL atau Oracle, OceanBase mendukung dua mode kompatibilitas: mode Oracle dan mode MySQL. Tipe data, fitur SQL, dan tampilan internal pada masing-masing mode konsisten dengan MySQL atau Oracle.
Fitur yang didukung
| Kategori | Detail |
|---|---|
| Jenis tabel | Tabel sumber, dimensi, dan sink |
| Mode waktu proses | Mode streaming dan mode batch |
| Format data | Tidak berlaku |
| Metrik pemantauan spesifik | Tidak ada |
| API | SQL |
| Pembaruan dan penghapusan pada tabel sink | Ya |
Prasyarat
Sebelum memulai, pastikan hal-hal berikut:
-
Database dan tabel tujuan telah tersedia di OceanBase.
-
Daftar putih alamat IP telah dikonfigurasi — lihat Konfigurasikan grup daftar putih.
-
(Untuk tabel sumber CDC) Layanan Binlog OceanBase telah diaktifkan — lihat Operasi terkait Binlog.
-
(Untuk tabel sink impor bypass) Port impor bypass telah diaktifkan — lihat Impor bypass.
Batasan
-
Memerlukan Ververica Runtime (VVR) 8.0.1 atau versi yang lebih baru.
Jaminan semantik:
-
Tabel sumber CDC: semantik tepat-sekali. Data tidak hilang atau duplikat saat beralih dari data historis lengkap ke pembacaan Binlog, bahkan setelah terjadi kesalahan.
-
Tabel sink: semantik paling sedikit sekali. Jika tabel sink memiliki primary key, idempotensi menjamin keakuratan data.
Perubahan arsitektur CDC VVR 11.4.0
Mulai dari VVR 11.4.0, connector CDC OceanBase ditingkatkan sebagai berikut:
-
Connector CDC berbasis layanan LogProxy OceanBase sebelumnya telah ditinggalkan dan dihapus.
-
Pengambilan log inkremental kini memerlukan Layanan Binlog OceanBase. Connector CDC OceanBase menawarkan kompatibilitas protokol dan stabilitas koneksi yang lebih baik dengan layanan Binlog dibandingkan dengan menghubungkan connector CDC MySQL standar secara langsung. Menghubungkan connector CDC MySQL standar ke layanan Binlog OceanBase untuk pelacakan perubahan tidak disarankan.
-
Pelacakan perubahan inkremental dalam mode kompatibilitas Oracle tidak lagi didukung. Untuk CDC mode Oracle, hubungi Dukungan Teknis Enterprise OceanBase.
Sintaksis
CREATE TABLE oceanbase_source (
order_id INT,
order_date TIMESTAMP(0),
customer_name STRING,
price DECIMAL(10, 5),
product_id INT,
order_status BOOLEAN,
PRIMARY KEY(order_id) NOT ENFORCED
) WITH (
'connector' = 'oceanbase',
'url' = '<your-jdbc-url>',
'tableName' = '<your-table-name>',
'userName' = '<your-username>',
'password' = '<your-password>'
);
Perilaku penulisan sink:
Untuk setiap catatan masuk, connector menyusun pernyataan SQL berdasarkan skema tabel sink:
-
Tidak memiliki primary key:
INSERT INTO -
Memiliki primary key:
UPSERT(berdasarkan mode kompatibilitas database)
Parameter WITH
Parameter umum
Parameter-parameter ini berlaku untuk semua jenis tabel.
| Parameter | Deskripsi | Wajib | Tipe | Bawaan |
|---|---|---|---|---|
connector |
Diatur ke oceanbase. |
Ya | STRING | — |
password |
Kata sandi database. | Ya | STRING | — |
Parameter tabel sumber
Mulai dari VVR 11.4.0, connector CDC OceanBase menggunakan layanan Binlog OceanBase untuk pengambilan log inkremental. Connector berbasis LogProxy telah dihapus. CDC mode kompatibilitas Oracle tidak lagi didukung mulai dari VVR 11.4.0.
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
hostname |
Alamat IP atau hostname database OceanBase. Gunakan alamat virtual private cloud (VPC) bila memungkinkan. | Ya | STRING | — | Jika OceanBase dan Realtime Compute for Apache Flink berada di VPC yang berbeda, atur konektivitas cross-VPC atau gunakan titik akhir publik. Lihat Manajemen workspace dan Akses Internet untuk kluster Flink. |
username |
Nama pengguna database OceanBase. | Ya | STRING | — | — |
database-name |
Nama database OceanBase. Mendukung ekspresi reguler untuk membaca dari beberapa database. Hindari anchor ^ dan $. |
Ya | STRING | — | Connector menggabungkan database-name dan table-name dengan \\. (VVR 8.0.1+) atau . (versi sebelumnya) untuk membentuk regex path lengkap. Contohnya, db_.* + tb_.+ menjadi db_.*\\.tb_.+. |
table-name |
Nama tabel OceanBase. Mendukung ekspresi reguler untuk membaca dari beberapa tabel. Hindari anchor ^ dan $. |
Ya | STRING | — | Lihat catatan database-name di atas. |
port |
Port database OceanBase. | Tidak | INTEGER | 3306 |
— |
server-id |
ID numerik untuk klien database. Harus unik secara global. Mendukung rentang, seperti 5400-5408, untuk memberikan ID berbeda kepada pembaca konkuren. |
Tidak | STRING | Nilai acak antara 5400 dan 6400 | Gunakan ID berbeda untuk setiap pekerjaan yang terhubung ke database yang sama. Lihat Penggunaan Server ID. |
scan.incremental.snapshot.chunk.size |
Jumlah baris per chunk selama pembacaan snapshot inkremental. Data di setiap chunk dibuffer di memori sebelum sepenuhnya dibaca. Chunk yang lebih kecil meningkatkan granularitas pemulihan kesalahan tetapi dapat menyebabkan error kehabisan memori (OOM) dan mengurangi throughput. | Tidak | INTEGER | 8096 |
Seimbangkan ukuran chunk terhadap kebutuhan memori dan throughput. |
scan.snapshot.fetch.size |
Jumlah maksimum catatan yang diambil per tarikan selama pembacaan tabel lengkap. | Tidak | INTEGER | 1024 |
— |
scan.startup.mode |
Mode startup untuk konsumsi data. | Tidak | STRING | initial |
Nilai yang valid:
initial
(memindai riwayat lengkap, lalu membaca Binlog),
latest-offset
(hanya ekor Binlog),
earliest-offset
(Binlog paling awal yang tersedia),
specific-offset
(diatur melalui parameter
scan.startup.specific-offset.*
),
timestamp
(diatur melalui
scan.startup.timestamp-millis
).
Penting
Untuk mode |
scan.startup.specific-offset.file |
Nama file Binlog untuk offset awal. Contoh: mysql-bin.000003. |
Tidak | STRING | — | Memerlukan scan.startup.mode=specific-offset. |
scan.startup.specific-offset.pos |
Offset byte dalam file Binlog yang ditentukan. | Tidak | INTEGER | — | Memerlukan scan.startup.mode=specific-offset. |
scan.startup.specific-offset.gtid-set |
Set GTID untuk offset awal. Contoh: 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19. |
Tidak | STRING | — | Memerlukan scan.startup.mode=specific-offset. |
scan.startup.timestamp-millis |
Timestamp awal dalam milidetik. CDC OceanBase membaca event awal setiap file Binlog untuk menemukan file yang sesuai dengan timestamp ini. File Binlog tidak boleh telah dipurge. | Tidak | LONG | — | Memerlukan scan.startup.mode=timestamp. |
server-time-zone |
Zona waktu sesi yang digunakan oleh database. Mengontrol bagaimana tipe TIMESTAMP dikonversi ke STRING. Lihat Tipe temporal Debezium. Contoh: Asia/Shanghai. |
Tidak | STRING | Zona waktu waktu proses pekerjaan Flink | — |
debezium.min.row.count.to.stream.results |
Ambang batas jumlah baris di atas mana connector beralih dari pembacaan penuh (seluruh tabel dimuat ke memori) ke pembacaan batch (baris dialirkan dalam batch). Pembacaan penuh lebih cepat; pembacaan batch menghindari OOM untuk tabel besar. | Tidak | INTEGER | 1000 |
— |
connect.timeout |
Waktu tunggu maksimum sebelum mencoba ulang koneksi yang timeout. | Tidak | DURATION | 30s |
— |
connect.max-retries |
Jumlah maksimum percobaan koneksi ulang setelah gagal. | Tidak | INTEGER | 3 |
— |
connection.pool.size |
Ukuran kolam koneksi database. Penggunaan kembali koneksi mengurangi jumlah total koneksi yang terbuka. | Tidak | INTEGER | 20 |
— |
jdbc.properties.* |
Parameter koneksi URL JDBC kustom. Contoh: 'jdbc.properties.useSSL' = 'false'. Lihat Properti konfigurasi MySQL. |
Tidak | STRING | — | — |
debezium.* |
Parameter Debezium kustom untuk pembacaan Binlog. Contoh: 'debezium.event.deserialization.failure.handling.mode' = 'ignore'. |
Tidak | STRING | — | — |
heartbeat.interval |
Interval di mana sumber mengirimkan event heartbeat untuk memajukan offset Binlog. Mencegah offset Binlog kedaluwarsa pada tabel yang jarang diperbarui. Offset yang kedaluwarsa menyebabkan pekerjaan gagal dan memerlukan restart tanpa status. | Tidak | DURATION | 30s |
— |
scan.incremental.snapshot.chunk.key-column |
Kolom yang digunakan sebagai kunci chunk untuk membagi data selama fase snapshot. | Bersyarat | STRING | — | Wajib untuk tabel tanpa primary key (harus NOT NULL). Opsional untuk tabel dengan primary key (pilih satu kolom dari primary key). |
scan.incremental.close-idle-reader.enabled |
Menentukan apakah pembaca idle ditutup setelah fase snapshot selesai. | Tidak | BOOLEAN | false |
VVR 8.0.1+. Juga memerlukan execution.checkpointing.checkpoints-after-tasks-finish.enabled=true. |
scan.read-changelog-as-append-only.enabled |
Menentukan apakah aliran changelog dikonversi menjadi aliran append-only. Ketika true, semua jenis pesan (INSERT, DELETE, UPDATE_BEFORE, UPDATE_AFTER) dikonversi menjadi INSERT. Aktifkan hanya dalam skenario khusus, seperti mempertahankan pesan hapus dari tabel hulu. |
Tidak | BOOLEAN | false |
VVR 8.0.8+. |
scan.only.deserialize.captured.tables.changelog.enabled |
Menentukan apakah event perubahan hanya dideserialisasi untuk tabel yang ditangkap selama fase inkremental. Mengatur ke true mempercepat pembacaan Binlog. |
Tidak | BOOLEAN | false (VVR 8.x), true (VVR 11.1+) |
VVR 8.0.7+. Pada VVR 8.0.8 dan sebelumnya, gunakan nama parameter debezium.scan.only.deserialize.captured.tables.changelog.enable. |
scan.parse.online.schema.changes.enabled |
Menentukan apakah event DDL untuk perubahan lockless ApsaraDB RDS diurai selama fase inkremental. Fitur eksperimental. Ambil snapshot pekerjaan Flink sebelum melakukan perubahan skema lockless online. | Tidak | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.backfill.skip |
Menentukan apakah backfill dilewati selama fase snapshot. Backfill hanya berlaku selama kueri snapshot satu chunk dan tidak mencakup seluruh fase pembacaan lengkap. Saat backfill dilewati, kueri snapshot setiap chunk membaca data tabel terbaru pada saat itu; pembaruan yang terjadi pada chunk setelah dibaca tidak digabung selama fase pembacaan lengkap dan dibaca dari Binlog setelah memasuki fase inkremental. Misalnya, pembaruan pada chunk5 yang terjadi saat chunk5 sedang di-snapshot tercermin langsung dalam snapshot chunk5; jika chunk5 diperbarui setelah pembaca maju ke chunk80, pembaruan tersebut diterapkan nanti dari Binlog selama fase inkremental. Penting: saat diaktifkan, perubahan yang terjadi selama atau setelah pemindaian chunk tetap dikirimkan dari Binlog dalam fase inkremental dan mungkin diduplikasi; hanya semantik paling sedikit sekali yang dijamin. Aktifkan ini hanya ketika sink hilir mendukung penulisan idempoten berdasarkan primary key. | Tidak | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.unbounded-chunk-first.enabled |
Menentukan apakah chunk tak terbatas didistribusikan terlebih dahulu selama fase snapshot. Mengurangi risiko OOM ketika Pengelola Tugas memproses chunk terakhir. Fitur eksperimental. Tambahkan parameter ini sebelum pekerjaan dimulai pertama kali. | Tidak | BOOLEAN | false |
VVR 11.1+. |
Parameter tabel dimensi
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
url |
URL JDBC. Harus menyertakan nama database MySQL atau nama layanan Oracle. | Ya | STRING | — | — |
userName |
Nama pengguna database. | Ya | STRING | — | — |
cache |
Kebijakan cache untuk lookup tabel dimensi. | Tidak | STRING | ALL |
ALL: Memuat semua data sebelum pekerjaan dimulai; muat ulang setelah kedaluwarsa. Cocok untuk tabel kecil dengan banyak lookup miss. Tingkatkan memori node join minimal dua kali ukuran tabel untuk mendukung pemuatan asinkron. LRU: Menyimpan cache subset baris; memerlukan cacheSize. None: Tanpa caching. |
cacheSize |
Jumlah maksimum entri yang dicache. | Tidak | INTEGER | 100000 |
Wajib saat cache=LRU. Diabaikan saat cache=ALL. |
cacheTTLMs |
Timeout cache dalam milidetik. Perilaku tergantung pada pengaturan cache: untuk LRU, entri kedaluwarsa setelah durasi ini (tidak ada kedaluwarsa secara bawaan); untuk ALL, cache penuh dimuat ulang setelah durasi ini (tidak ada muat ulang secara bawaan); untuk None, parameter ini tidak berpengaruh. |
Tidak | LONG | Long.MAX_VALUE |
— |
maxRetryTimeout |
Durasi maksimum percobaan ulang. | Tidak | DURATION | 60s |
— |
Parameter tabel sink (JDBC)
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
url |
URL JDBC. Harus menyertakan nama database MySQL atau nama layanan Oracle. | Ya | STRING | — | — |
userName |
Nama pengguna database. | Ya | STRING | — | — |
tableName |
Nama tabel tujuan. | Ya | STRING | — | — |
sink.mode |
Mode penulisan. Atur ke jdbc untuk penulisan standar; atur ke direct-load untuk impor bypass. |
Ya | STRING | jdbc |
— |
compatibleMode |
Mode kompatibilitas OceanBase. Nilai yang valid: mysql, oracle. |
Tidak | STRING | mysql |
Parameter khusus OceanBase. |
maxRetryTimes |
Jumlah maksimum percobaan ulang penulisan. | Tidak | INTEGER | 3 |
— |
poolInitialSize |
Ukuran awal kolam koneksi. | Tidak | INTEGER | 1 |
— |
poolMaxActive |
Jumlah maksimum koneksi aktif dalam kolam. | Tidak | INTEGER | 8 |
— |
poolMaxWait |
Waktu tunggu maksimum (ms) untuk koneksi dari kolam. | Tidak | INTEGER | 2000 |
— |
poolMinIdle |
Jumlah minimum koneksi idle dalam kolam. | Tidak | INTEGER | 1 |
— |
connectionProperties |
Properti koneksi JDBC dalam format k1=v1;k2=v2. |
Tidak | STRING | — | — |
ignoreDelete |
Menentukan apakah operasi hapus diabaikan. | Tidak | BOOLEAN | false |
— |
excludeUpdateColumns |
Kolom yang dikecualikan dari pembaruan, dipisahkan koma (misalnya, column1,column2). Kolom primary key selalu dikecualikan terlepas dari pengaturan ini. |
Tidak | STRING | — | — |
partitionKey |
Kunci partisi. Saat diatur, data dikelompokkan berdasarkan kunci ini sebelum aturan modRule diterapkan. |
Tidak | STRING | — | — |
modRule |
Aturan pengelompokan dalam format nama_kolom mod angka (misalnya, user_id mod 8). Kolom harus numerik. Data pertama kali dipartisi berdasarkan partitionKey, lalu dikelompokkan dalam setiap partisi berdasarkan aturan ini. |
Tidak | STRING | — | — |
bufferSize |
Ukuran buffer data (jumlah catatan). | Tidak | INTEGER | 1000 |
— |
flushIntervalMs |
Interval flush buffer (ms). Jika buffer tidak memenuhi kondisi output dalam interval ini, semua data yang dibuffer akan diflush secara otomatis. | Tidak | LONG | 1000 |
— |
retryIntervalMs |
Interval percobaan ulang (ms). | Tidak | INTEGER | 5000 |
— |
Parameter tabel sink (impor bypass)
Impor bypass adalah metode penulisan throughput tinggi untuk pemuatan data massal di OceanBase. Fitur ini tersedia di VVR 11.5 dan versi yang lebih baru.
Sebelum menggunakan impor bypass, perhatikan batasan berikut:
-
Hanya aliran bounded: Sumber data harus berupa aliran bounded. Gunakan mode batch Flink untuk performa terbaik.
-
Penguncian tabel selama impor: Tabel target dikunci selama proses impor. Penulisan DML dan perubahan DDL diblokir; kueri baca tidak terpengaruh.
-
Bukan untuk penulisan real-time: Untuk penulisan streaming atau real-time, gunakan sink JDBC.
| Parameter | Deskripsi | Wajib | Tipe | Bawaan | Catatan |
|---|---|---|---|---|---|
sink.mode |
Atur ke direct-load untuk menggunakan impor bypass. |
Tidak | STRING | jdbc |
— |
host |
Alamat IP atau hostname database OceanBase. | Ya | STRING | — | — |
port |
Port RPC database OceanBase. | Tidak | INTEGER | 2882 |
— |
username |
Nama pengguna database. | Ya | STRING | — | — |
tenant-name |
Nama penyewa OceanBase. | Ya | STRING | — | — |
schema-name |
Untuk penyewa MySQL: nama database. Untuk penyewa Oracle: nama pemilik. | Ya | STRING | — | — |
table-name |
Nama tabel tujuan. | Ya | STRING | — | — |
parallel |
Konkurensi sisi server untuk tugas impor. Server membatasi tingkat paralelisme aktual berdasarkan spesifikasi CPU penyewa tanpa mengembalikan error. Rumus: MIN(tenant_cores × 2, parallel) × partition_nodes. Misalnya, dengan 2 core CPU, parallel=10, dan 2 node partisi: MIN(4, 10) × 2 = 8. |
Tidak | INTEGER | 8 |
— |
buffer-size |
Jumlah catatan yang dibuffer sebelum satu penulisan ke OceanBase. | Tidak | INTEGER | 1024 |
— |
dup-action |
Perilaku saat kunci primer duplikat ditemukan. STOP_ON_DUP: gagalkan impor. REPLACE: timpa baris yang ada. IGNORE: buang baris masuk. |
Tidak | STRING | REPLACE |
— |
load-method |
Mode impor. full: impor bypass standar. inc: mode inkremental, memeriksa konflik kunci primer (observer 4.3.2+, dup-action=REPLACE tidak didukung). inc_replace: mode ganti inkremental, menimpa baris yang ada secara langsung tanpa pemeriksaan konflik (observer 4.3.2+, dup-action diabaikan). |
Tidak | STRING | full |
— |
max-error-rows |
Jumlah maksimum baris error yang ditoleransi. Baris error mencakup: kunci primer duplikat saat dup-action=STOP_ON_DUP, jumlah kolom tidak cocok, dan baris yang gagal dalam konversi tipe. |
Tidak | LONG | 0 |
— |
timeout |
Timeout keseluruhan untuk tugas impor bypass. | Tidak | DURATION | 7d |
— |
heartbeat-timeout |
Timeout heartbeat sisi klien. | Tidak | DURATION | 60s |
— |
heartbeat-interval |
Interval heartbeat sisi klien. | Tidak | DURATION | 10s |
— |
Pemetaan tipe
Mode kompatibel MySQL
| Tipe OceanBase | Tipe Flink |
|---|---|
TINYINT |
TINYINT |
SMALLINT, TINYINT UNSIGNED |
SMALLINT |
INT, MEDIUMINT, SMALLINT UNSIGNED |
INT |
BIGINT, INT UNSIGNED |
BIGINT |
BIGINT UNSIGNED |
DECIMAL(20, 0) |
REAL, FLOAT |
FLOAT |
DOUBLE |
DOUBLE |
NUMERIC(p, s), DECIMAL(p, s) |
DECIMAL(p, s) (p ≤ 38) |
BOOLEAN, TINYINT(1) |
BOOLEAN |
DATE |
DATE |
TIME [(p)] |
TIME [(p)] [WITHOUT TIME ZONE] |
DATETIME [(p)], TIMESTAMP [(p)] |
TIMESTAMP [(p)] [WITHOUT TIME ZONE] |
CHAR(n) |
CHAR(n) |
VARCHAR(n) |
VARCHAR(n) |
BIT(n) |
BINARY(⌈n/8⌉) |
BINARY(n) |
BINARY(n) |
VARBINARY(N) |
VARBINARY(N) |
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT |
STRING |
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB |
BYTES (maks 2.147.483.647 byte) |
Mode kompatibel Oracle
| Tipe OceanBase | Tipe Flink |
|---|---|
NUMBER(p, s≤0), p−s < 3 |
TINYINT |
NUMBER(p, s≤0), p−s < 5 |
SMALLINT |
NUMBER(p, s≤0), p−s < 10 |
INT |
NUMBER(p, s≤0), p−s < 19 |
BIGINT |
NUMBER(p, s≤0), 19 ≤ p−s ≤ 38 |
DECIMAL(p−s, 0) |
NUMBER(p, s>0) |
DECIMAL(p, s) |
NUMBER(p, s≤0), p−s > 38 |
STRING |
FLOAT, BINARY_FLOAT |
FLOAT |
BINARY_DOUBLE |
DOUBLE |
NUMBER(1) |
BOOLEAN |
DATE, TIMESTAMP [(p)] |
TIMESTAMP [(p)] [WITHOUT TIME ZONE] |
CHAR(n), NCHAR(n), NVARCHAR2(n), VARCHAR(n), VARCHAR2(n), CLOB |
STRING |
BLOB, ROWID |
BYTES |
Contoh
Tabel sumber dan tabel sink
Contoh berikut membaca data CDC dari tabel sumber OceanBase dan menulisnya ke tabel sink JDBC. Definisi tabel sink impor bypass juga disertakan sebagai referensi.
Ketiga tabel menggunakan 'connector' = 'oceanbase'. Tabel sumber dan sink JDBC menggunakan set parameter yang berbeda; sink direct-load mengatur sink.mode = 'direct-load' dan terhubung melalui port RPC.
-- Tabel sumber CDC OceanBase (membaca riwayat lengkap, lalu Binlog)
CREATE TEMPORARY TABLE oceanbase_source (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'hostname' = '<your-hostname>',
'port' = '3306',
'username' = '<your-username>',
'password' = '<your-password>',
'database-name' = '<your-database-name>',
'table-name' = '<your-table-name>'
);
-- Tabel sink JDBC OceanBase (untuk penulisan streaming real-time)
CREATE TEMPORARY TABLE oceanbase_sink (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'url' = '<your-jdbc-url>',
'userName' = '<your-username>',
'password' = '<your-password>',
'tableName' = '<your-table-name>'
);
-- Tabel sink impor bypass OceanBase (untuk penulisan batch throughput tinggi)
-- Memerlukan sumber data bounded; atur Flink ke mode batch untuk performa terbaik
CREATE TEMPORARY TABLE oceanbase_directload_sink (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'sink.mode' = 'direct-load',
'host' = '<your-host>',
'port' = '<your-rpc-port>',
'tenant-name' = '<your-tenant-name>',
'schema-name' = '<your-schema-name>',
'table-name' = '<your-table-name>',
'username' = '<your-username>',
'password' = '<your-password>'
);
BEGIN STATEMENT SET;
INSERT INTO oceanbase_sink
SELECT * FROM oceanbase_source;
END;
Tabel dimensi
Contoh berikut melakukan join sumber Datagen dengan tabel dimensi OceanBase menggunakan temporal join. Kebijakan cache ALL memuat seluruh tabel dimensi ke memori sebelum pekerjaan dimulai.
CREATE TEMPORARY TABLE datagen_source (
a INT,
b BIGINT,
c STRING,
`proctime` AS PROCTIME()
) WITH (
'connector' = 'datagen'
);
-- Tabel dimensi OceanBase dengan kebijakan cache ALL
-- Cache ALL memuat tabel penuh saat startup — cocok untuk tabel kecil dan stabil
CREATE TEMPORARY TABLE oceanbase_dim (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'oceanbase',
'url' = '<your-jdbc-url>',
'userName' = '<your-username>',
'password' = '${secret_values.password}',
'tableName' = '<your-table-name>'
);
CREATE TEMPORARY TABLE blackhole_sink (
a INT,
b STRING
) WITH (
'connector' = 'blackhole'
);
INSERT INTO blackhole_sink
SELECT T.a, H.b
FROM datagen_source AS T
JOIN oceanbase_dim FOR SYSTEM_TIME AS OF T.`proctime` AS H
ON T.a = H.a;
Langkah selanjutnya
-
Connector yang didukung — daftar lengkap connector yang tersedia di Realtime Compute for Apache Flink.
-
Ikhtisar layanan Binlog OceanBase — diperlukan untuk pembacaan inkremental CDC.