OceanBase konektörü, Realtime Compute for Apache Flink ile yerel dağıtık hibrit işlem (HTAP) veritabanı olan OceanBase'i entegre eder. Değişiklik verisi yakalama (CDC) akışlarını okumak, boyut tablolarıyla birleştirmek ve sonuçları tekrar OceanBase'e yazmak için bu konektörü kullanın.
OceanBase konektörü genel önizleme aşamasındadır.
Arka plan bilgileri
OceanBase, yerel dağıtık hibrit işlem (HTAP) veritabanı yönetim sistemidir. Daha fazla bilgi için OceanBase web sitesini inceleyin. MySQL veya Oracle veritabanından geçiş yaparken iş sistemlerinizi yeniden yapılandırma maliyetlerini azaltmak için OceanBase iki uyumluluk modunu destekler: Oracle modu ve MySQL modu. Bu modlardaki veri türleri, SQL özellikleri ve iç görünümler MySQL veya Oracle ile tutarlıdır.
Desteklenen özellikler
| Kategori | Ayrıntılar |
|---|---|
| Tablo türleri | Kaynak, boyut ve hedef tablolar |
| Çalışma zamanı modları | Akış modu ve toplu iş modu |
| Veri biçimi | Uygulanamaz |
| Belirli izleme ölçümleri | Yok |
| API | SQL |
| Hedef tablolarda güncellemeler ve silmeler | Evet |
Ön koşullar
Başlamadan önce aşağıdakilerin sağlandığından emin olun:
Hedef veritabanı ve tablolar OceanBase'de mevcuttur.
Bir IP adresi izin listesi yapılandırılmıştır — bkz. İzin listesi grubu yapılandırma
(CDC kaynak tabloları için) OceanBase Binlog hizmeti etkinleştirilmiştir — bkz. Binlog ile ilgili işlemler
(Bypass import hedef tabloları için) Bypass import bağlantı noktası etkinleştirilmiştir — bkz. Bypass import
Sınırlamalar
Ververica Runtime (VVR) 8.0.1 veya sonraki bir sürüm gerektirir.
Anlamsal garantiler:
CDC kaynak tablolar: tam olarak bir kez semantiği. Tam geçmiş verilerden Binlog okumaya geçiş sırasında, bir arızadan sonra bile veri kaybolmaz veya yinelenmez.
Hedef tablolar: en az bir kez semantiği. Hedef tabloda bir birincil anahtar varsa, idempotentlik veri doğruluğunu garanti eder.
VVR 11.4.0 CDC mimari değişikliği
VVR 11.4.0 sürümünden itibaren OceanBase CDC konektörü yükseltildi:
OceanBase LogProxy hizmetine dayalı orijinal CDC konektörü kullanımdan kaldırıldı ve kaldırıldı.
Artımlı günlük yakalama artık OceanBase Binlog hizmetini gerektirir. OceanBase CDC konektörü, standart MySQL CDC konektörünü doğrudan bağlamaya kıyasla Binlog hizmetiyle daha iyi protokol uyumluluğu ve bağlantı kararlılığı sunar. Değişiklik takibi için standart MySQL CDC konektörünü OceanBase Binlog hizmetine bağlamanız önerilmez.
Oracle uyumluluk modunda artımlı değişiklik takibi artık desteklenmemektedir. Oracle modu CDC için OceanBase Enterprise Teknik Desteği ile iletişime geçin.
Söz dizimi
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>'
);
Hedef yazma davranışı:
Gelen her kayıt için konektör, hedef tablonun şemasına göre bir SQL deyimi oluşturur:
Birincil anahtar yok:
INSERT INTOBirincil anahtar var:
UPSERT(veritabanı uyumluluk moduna bağlı olarak)
WITH parametreleri
Genel parametreler
Bu parametreler tüm tablo türleri için geçerlidir.
| Parametre | Açıklama | Gerekli | Tür | Varsayılan |
|---|---|---|---|---|
connector |
oceanbase olarak ayarlayın. |
Evet | STRING | — |
password |
Veritabanı parolası. | Evet | STRING | — |
Kaynak tablo parametreleri
VVR 11.4.0 sürümünden itibaren OceanBase CDC konektörü, artımlı günlük yakalama için OceanBase Binlog hizmetini kullanır. LogProxy tabanlı konektör kaldırıldı. VVR 11.4.0 sürümünden itibaren Oracle uyumluluk modu CDC desteklenmemektedir.
| Parametre | Açıklama | Gerekli | Tür | Varsayılan | Notlar |
|---|---|---|---|---|---|
hostname |
OceanBase veritabanının IP adresi veya ana bilgisayar adı. Mümkün olduğunda sanal özel cloud (VPC) adresi kullanın. | Evet | STRING | — | OceanBase ve Realtime Compute for Apache Flink farklı VPC'lerdeyse, VPC'ler arası bağlantı kurun veya genel uç nokta kullanın. Bkz. Çalışma alanı yönetimi ve Flink kümeleri için internet erişimi. |
username |
OceanBase veritabanı kullanıcı adı. | Evet | STRING | — | — |
database-name |
OceanBase veritabanı adı. Birden çok veritabanından okumak için düzenli ifadeleri destekler. ^ ve $ sabitlerinden kaçının. |
Evet | STRING | — | Konektör, tam yol düzenli ifadesi oluşturmak için database-name ve table-name değerlerini \\. (VVR 8.0.1+) veya . (önceki sürümler) ile birleştirir. Örneğin, db_.* + tb_.+ ifadesi db_.*\\.tb_.+ haline gelir. |
table-name |
OceanBase tablo adı. Birden çok tablodan okumak için düzenli ifadeleri destekler. ^ ve $ sabitlerinden kaçının. |
Evet | STRING | — | Yukarıdaki database-name notuna bakın. |
port |
OceanBase veritabanı bağlantı noktası. | Hayır | INTEGER | 3306 |
— |
server-id |
Veritabanı istemcisi için sayısal kimlik. Küresel olarak benzersiz olmalıdır. Eşzamanlı okuyuculara farklı kimlikler atamak için 5400-5408 gibi bir aralık destekler. |
Hayır | STRING | 5400 ile 6400 arasında rastgele değer | Aynı veritabanına bağlanan her iş için farklı bir kimlik kullanın. Bkz. Sunucu kimliği kullanımı. |
scan.incremental.snapshot.chunk.size |
Artımlı anlık görüntü okuma sırasında parça başına satır sayısı. Her parçadaki veriler tamamen okunmadan önce bellekte arabelleğe alınır. Daha küçük parçalar hata kurtarma granülerliğini iyileştirir ancak bellek yetersizliği (OOM) hatalarına neden olabilir ve aktarım hızını düşürebilir. | Hayır | INTEGER | 8096 |
Parça boyutunu bellek ve aktarım hızı gereksinimlerine göre dengeleyin. |
scan.snapshot.fetch.size |
Tam tablo okumaları sırasında çekme başına alınan maksimum kayıt sayısı. | Hayır | INTEGER | 1024 |
— |
scan.startup.mode |
Veri tüketimi için başlangıç modu. | Hayır | STRING | initial |
Geçerli değerler:
initial
(tam geçmişi tarar, ardından Binlog'u okur),
latest-offset
(yalnızca Binlog sonu),
earliest-offset
(en eski kullanılabilir Binlog),
specific-offset
(scan.startup.specific-offset.*
parametreleri aracılığıyla ayarlanır),
timestamp
(scan.startup.timestamp-millis
aracılığıyla ayarlanır).
Önemli
|
scan.startup.specific-offset.file |
Başlangıç ofseti için Binlog dosya adı. Örnek: mysql-bin.000003. |
Hayır | STRING | — | scan.startup.mode=specific-offset gerektirir. |
scan.startup.specific-offset.pos |
Belirtilen Binlog dosyasındaki bayt ofseti. | Hayır | INTEGER | — | scan.startup.mode=specific-offset gerektirir. |
scan.startup.specific-offset.gtid-set |
Başlangıç ofseti için GTID kümesi. Örnek: 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19. |
Hayır | STRING | — | scan.startup.mode=specific-offset gerektirir. |
scan.startup.timestamp-millis |
Milisaniye cinsinden başlangıç zaman damgası. OceanBase CDC, bu zaman damgasıyla eşleşen dosyayı bulmak için her Binlog dosyasının ilk olayını okur. Binlog dosyası temizlenmemiş olmalıdır. | Hayır | LONG | — | scan.startup.mode=timestamp gerektirir. |
server-time-zone |
Veritabanı tarafından kullanılan oturum saat dilimi. TIMESTAMP türlerinin STRING türüne nasıl dönüştürüleceğini kontrol eder. Bkz. Debezium zamansal türleri. Örnek: Asia/Shanghai. |
Hayır | STRING | Flink işi çalışma zamanı saat dilimi | — |
debezium.min.row.count.to.stream.results |
Konektörün tam okumadan (tüm tabloyu belleğe alma) toplu okumaya (satırları toplu olarak akışa alma) geçtiği satır sayısı eşiği. Tam okuma daha hızlıdır; toplu okuma büyük tablolar için OOM'u önler. | Hayır | INTEGER | 1000 |
— |
connect.timeout |
Zaman aşımına uğramış bir bağlantıyı yeniden denemeden önceki maksimum bekleme süresi. | Hayır | DURATION | 30s |
— |
connect.max-retries |
Başarısızlıktan sonraki maksimum bağlantı yeniden deneme sayısı. | Hayır | INTEGER | 3 |
— |
connection.pool.size |
Veritabanı bağlantı havuzu boyutu. Bağlantıları yeniden kullanmak toplam açık bağlantı sayısını azaltır. | Hayır | INTEGER | 20 |
— |
jdbc.properties.* |
Özel JDBC URL bağlantı parametreleri. Örnek: 'jdbc.properties.useSSL' = 'false'. Bkz. MySQL yapılandırma özellikleri. |
Hayır | STRING | — | — |
debezium.* |
Binlog okuma için özel Debezium parametreleri. Örnek: 'debezium.event.deserialization.failure.handling.mode' = 'ignore'. |
Hayır | STRING | — | — |
heartbeat.interval |
Kaynağın Binlog ofsetini ilerletmek için kalp atışı olayları yayınladığı aralık. Nadiren güncellenen tablolarda Binlog ofsetinin süresinin dolmasını önler. Süresi dolmuş bir ofset işin başarısız olmasına neden olur ve durumsuz bir yeniden başlatma gerektirir. | Hayır | DURATION | 30s |
— |
scan.incremental.snapshot.chunk.key-column |
Anlık görüntü aşamasında verileri bölmek için parça anahtarı olarak kullanılan sütun. | Koşullu | STRING | — | Birincil anahtarı olmayan tablolar için gereklidir (NOT NULL olmalıdır). Birincil anahtarı olan tablolar için isteğe bağlıdır (birincil anahtardan bir sütun seçin). |
scan.incremental.close-idle-reader.enabled |
Anlık görüntü aşaması tamamlandıktan sonra boşta kalan okuyucuların kapatılıp kapatılmayacağını belirtir. | Hayır | BOOLEAN | false |
VVR 8.0.1+. Ayrıca execution.checkpointing.checkpoints-after-tasks-finish.enabled=true gerektirir. |
scan.read-changelog-as-append-only.enabled |
Değişiklik günlüğü akışının yalnızca ekleme yapılabilen bir akışa dönüştürülüp dönüştürülmeyeceğini belirtir. true olduğunda tüm mesaj türleri (INSERT, DELETE, UPDATE_BEFORE, UPDATE_AFTER) INSERT türüne dönüştürülür. Yalnızca yukarı akış tablosundan silme mesajlarını korumak gibi özel senaryolarda etkinleştirin. |
Hayır | BOOLEAN | false |
VVR 8.0.8+. |
scan.only.deserialize.captured.tables.changelog.enabled |
Artımlı aşamada yalnızca yakalanan tablolar için değişiklik olaylarının serileştirilip serileştirilmeyeceğini belirtir. true olarak ayarlamak Binlog okumayı hızlandırır. |
Hayır | BOOLEAN | false (VVR 8.x), true (VVR 11.1+) |
VVR 8.0.7+. VVR 8.0.8 ve önceki sürümlerde debezium.scan.only.deserialize.captured.tables.changelog.enable parametre adını kullanın. |
scan.parse.online.schema.changes.enabled |
Artımlı aşamada ApsaraDB RDS kilitsiz değişiklikler için DDL olaylarının ayrıştırılıp ayrıştırılmayacağını belirtir. Deneysel özellik. Çevrimiçi kilitsiz şema değişiklikleri gerçekleştirmeden önce bir Flink işi anlık görüntüsü alın. | Hayır | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.backfill.skip |
Anlık görüntü aşamasında geri doldurmanın atlanıp atlanmayacağını belirtir. Geri doldurma yalnızca tek bir parçanın anlık görüntü sorgusu sırasında uygulanır ve tüm tam okuma aşamasını kapsamaz. Geri doldurma atlandığında, her parçanın anlık görüntü sorgusu o anda en güncel tablo verilerini okur; bir parça okunduktan sonra gerçekleşen güncellemeler tam okuma aşamasında birleştirilmez ve artımlı aşamaya girildikten sonra Binlog'dan okunur. Örneğin, chunk5'anlık görüntülenirken oluşan bir güncelleme doğrudan chunk5'ın anlık görüntüsünde yansıtılır; okuyucu chunk80'e ilerledikten sonra chunk5 güncellenirse, güncelleme artımlı aşamada Binlog'dan daha sonra uygulanır. Önemli: Etkinleştirildiğinde, bir parçanın taraması sırasında veya sonrasında oluşan değişiklikler yine de artımlı aşamada Binlog'dan iletilir ve yinelenebilir; yalnızca en az bir kez semantiği garanti edilir. Bunu yalnızca aşağı akış hedefi birincil anahtara göre idempotent yazmaları desteklediğinde etkinleştirin. | Hayır | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.unbounded-chunk-first.enabled |
Anlık görüntü aşamasında sınırsız parçanın önce dağıtılıp dağıtılmayacağını belirtir. Bir TaskManager'in son parçayı işlemesi durumunda OOM riskini azaltır. Deneysel özellik. İş ilk kez başlamadan önce bu parametreyi ekleyin. | Hayır | BOOLEAN | false |
VVR 11.1+. |
Boyut tablosu parametreleri
| Parametre | Açıklama | Gerekli | Tür | Varsayılan | Notlar |
|---|---|---|---|---|---|
url |
JDBC URL'si. MySQL veritabanı adını veya Oracle hizmet adını içermelidir. | Evet | STRING | — | — |
userName |
Veritabanı kullanıcı adı. | Evet | STRING | — | — |
cache |
Boyut tablosu aramaları için önbellek ilkesi. | Hayır | STRING | ALL |
ALL: İş başlamadan önce tüm verileri yükler; süresi dolduktan sonra yeniden yükler. Çok sayıda arama hatası olan küçük tablolar için uygundur. Asenkron yüklemeyi desteklemek için birleştirme düğümü belleğini en az tablo boyutunun iki katına çıkarın. LRU: Satırların bir alt kümesini önbelleğe alır; cacheSize gerektirir. None: Önbelleğe alma yok. |
cacheSize |
Maksimum önbelleğe alınmış girdi sayısı. | Hayır | INTEGER | 100000 |
cache=LRU olduğunda gereklidir. cache=ALL olduğunda yoksayılır. |
cacheTTLMs |
Milisaniye cinsinden önbellek zaman aşımı. Davranış cache ayarına bağlıdır: LRU için girdiler bu süreden sonra süresi dolar (varsayılan olarak süre dolmaz); ALL için tam önbellek bu süreden sonra yeniden yüklenir (varsayılan olarak yeniden yükleme yoktur); None için bu parametrenin etkisi yoktur. |
Hayır | LONG | Long.MAX_VALUE |
— |
maxRetryTimeout |
Maksimum yeniden deneme süresi. | Hayır | DURATION | 60s |
— |
Hedef tablo parametreleri (JDBC)
| Parametre | Açıklama | Gerekli | Tür | Varsayılan | Notlar |
|---|---|---|---|---|---|
url |
JDBC URL'si. MySQL veritabanı adını veya Oracle hizmet adını içermelidir. | Evet | STRING | — | — |
userName |
Veritabanı kullanıcı adı. | Evet | STRING | — | — |
tableName |
Hedef tablo adı. | Evet | STRING | — | — |
sink.mode |
Yazma modu. Standart yazmalar için jdbc olarak ayarlayın; bypass import için direct-load olarak ayarlayın. |
Evet | STRING | jdbc |
— |
compatibleMode |
OceanBase uyumluluk modu. Geçerli değerler: mysql, oracle. |
Hayır | STRING | mysql |
OceanBase'e özel parametre. |
maxRetryTimes |
Maksimum yazma yeniden deneme sayısı. | Hayır | INTEGER | 3 |
— |
poolInitialSize |
Başlangıç bağlantı havuzu boyutu. | Hayır | INTEGER | 1 |
— |
poolMaxActive |
Havuzdaki maksimum etkin bağlantı sayısı. | Hayır | INTEGER | 8 |
— |
poolMaxWait |
Havuzdan bir bağlantı almak için maksimum bekleme süresi (ms). | Hayır | INTEGER | 2000 |
— |
poolMinIdle |
Havuzdaki minimum boşta bağlantı sayısı. | Hayır | INTEGER | 1 |
— |
connectionProperties |
k1=v1;k2=v2 biçiminde JDBC bağlantı özellikleri. |
Hayır | STRING | — | — |
ignoreDelete |
Silme işlemlerinin yoksayılıp yoksayılmayacağını belirtir. | Hayır | BOOLEAN | false |
— |
excludeUpdateColumns |
Güncellemelerden hariç tutulacak sütunlar, virgülle ayrılmış (örneğin, column1,column2). Birincil anahtar sütunları, bu ayardan bağımsız olarak her zaman hariç tutulur. |
Hayır | STRING | — | — |
partitionKey |
Bölümleme anahtarı. Ayarlandığında, veriler modRule uygulanmadan önce bu anahtara göre gruplandırılır. |
Hayır | STRING | — | — |
modRule |
column_name mod number biçimindeki gruplama kuralı (örneğin, user_id mod 8). Sütun sayısal olmalıdır. Veriler önce partitionKey ile bölümlenir, ardından her bölüm içinde bu kurala göre gruplandırılır. |
Hayır | STRING | — | — |
bufferSize |
Veri arabelleği boyutu (kayıt sayısı). | Hayır | INTEGER | 1000 |
— |
flushIntervalMs |
Arabellek temizleme aralığı (ms). Arabellek bu aralık içinde çıkış koşulunu karşılamazsa, arabelleğe alınan tüm veriler otomatik olarak temizlenir. | Hayır | LONG | 1000 |
— |
retryIntervalMs |
Yeniden deneme aralığı (ms). | Hayır | INTEGER | 5000 |
— |
Hedef tablo parametreleri (bypass import)
Bypass import, OceanBase'de toplu veri yüklemesi için yüksek aktarım hızına sahip bir yazma yöntemidir. VVR 11.5 ve sonraki sürümlerde kullanılabilir.
Bypass import kullanmadan önce aşağıdaki kısıtlamaları kontrol edin:
Yalnızca sınırlı akışlar: Veri kaynağı sınırlı bir akış olmalıdır. En iyi performans için Flink toplu iş modunu kullanın.
İçe aktarma sırasında tablo kilitleme: Hedef tablo içe aktarma boyunca kilitlenir. DML yazmaları ve DDL değişiklikleri engellenir; okuma sorguları etkilenmez.
Gerçek zamanlı yazmalar için uygun değildir: Akış veya gerçek zamanlı yazmalar için bunun yerine JDBC hedefini kullanın.
| Parametre | Açıklama | Gerekli | Tür | Varsayılan | Notlar |
|---|---|---|---|---|---|
sink.mode |
Bypass import kullanmak için direct-load olarak ayarlayın. |
Hayır | STRING | jdbc |
— |
host |
OceanBase veritabanının IP adresi veya ana bilgisayar adı. | Evet | STRING | — | — |
port |
OceanBase veritabanının RPC bağlantı noktası. | Hayır | INTEGER | 2882 |
— |
username |
Veritabanı kullanıcı adı. | Evet | STRING | — | — |
tenant-name |
OceanBase kiracı adı. | Evet | STRING | — | — |
schema-name |
MySQL kiracıları için: veritabanı adı. Oracle kiracıları için: sahip adı. | Evet | STRING | — | — |
table-name |
Hedef tablo adı. | Evet | STRING | — | — |
parallel |
İçe aktarma görevi için sunucu tarafı eşzamanlılığı. Sunucu, hata döndürmeden kiracı CPU teknik özelliklerine göre gerçek paralellik derecesini sınırlar. Formül: MIN(tenant_cores × 2, parallel) × partition_nodes. Örneğin, 2 CPU çekirdeği, parallel=10 ve 2 bölüm düğümü ile: MIN(4, 10) × 2 = 8. |
Hayır | INTEGER | 8 |
— |
buffer-size |
OceanBase'e tek bir yazmadan önce arabelleğe alınan kayıt sayısı. | Hayır | INTEGER | 1024 |
— |
dup-action |
Yinelenen birincil anahtarlarla karşılaşıldığında davranış. STOP_ON_DUP: içe aktarmayı başarısız kılar. REPLACE: mevcut satırı üzerine yazar. IGNORE: gelen satırı atar. |
Hayır | STRING | REPLACE |
— |
load-method |
İçe aktarma modu. full: standart bypass import. inc: artımlı mod, birincil anahtar çakışmalarını kontrol eder (observer 4.3.2+, dup-action=REPLACE desteklenmez). inc_replace: artımlı üzerine yazma modu, çakışma kontrolleri olmadan mevcut satırları doğrudan üzerine yazar (observer 4.3.2+, dup-action yoksayılır). |
Hayır | STRING | full |
— |
max-error-rows |
Tolere edilen maksimum hata satırı sayısı. Hata satırları şunları içerir: dup-action=STOP_ON_DUP olduğunda yinelenen birincil anahtarlar, eşleşmeyen sütun sayıları ve tür dönüşümünün başarısız olduğu satırlar. |
Hayır | LONG | 0 |
— |
timeout |
Bypass import görevi için genel zaman aşımı. | Hayır | DURATION | 7d |
— |
heartbeat-timeout |
İstemci tarafı kalp atışı zaman aşımı. | Hayır | DURATION | 60s |
— |
heartbeat-interval |
İstemci tarafı kalp atışı aralığı. | Hayır | DURATION | 10s |
— |
Tür eşlemesi
MySQL uyumlu mod
| OceanBase türü | Flink türü |
|---|---|
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 bayt) |
Oracle uyumlu mod
| OceanBase türü | Flink türü |
|---|---|
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 |
Örnekler
Kaynak tablo ve hedef tablo
Aşağıdaki örnek, bir OceanBase kaynak tablosundan CDC verilerini okur ve bunları bir JDBC hedef tablosuna yazar. Referans olması amacıyla bir bypass import hedef tablo tanımı da dahil edilmiştir.
Üç tablonun tümü 'connector' = 'oceanbase' kullanır. Kaynak ve JDBC hedefi farklı parametre kümeleri kullanır; direct-load hedefi sink.mode = 'direct-load' ayarlar ve RPC bağlantı noktası üzerinden bağlanır.
-- OceanBase CDC source table (reads full history, then 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>'
);
-- OceanBase JDBC sink table (for real-time streaming writes)
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>'
);
-- OceanBase bypass import sink table (for high-throughput batch writes)
-- Requires a bounded data source; set Flink to batch mode for best performance
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;
Boyut tablosu
Aşağıdaki örnek, bir Datagen kaynağını zamansal birleştirme kullanarak bir OceanBase boyut tablosuyla birleştirir. ALL önbellek ilkesi, iş başlamadan önce tüm boyut tablosunu belleğe yükler.
CREATE TEMPORARY TABLE datagen_source (
a INT,
b BIGINT,
c STRING,
`proctime` AS PROCTIME()
) WITH (
'connector' = 'datagen'
);
-- OceanBase dimension table with ALL cache policy
-- ALL cache loads the full table at startup — suitable for small, stable tables
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;
Sonraki adımlar
Desteklenen konektörler — Realtime Compute for Apache Flink'te bulunan konektörlerin tam listesi
OceanBase Binlog hizmeti genel bakış — CDC artımlı okumalar için gereklidir