Le connecteur OceanBase intègre Realtime Compute for Apache Flink à OceanBase, une base de données native distribuée hybride transactionnelle et analytique (HTAP). Utilisez-le pour lire les flux de capture des données modifiées (CDC), joindre des tables de dimension et écrire les résultats dans OceanBase.
Le connecteur OceanBase est en aperçu public.
Informations générales
OceanBase est un système de gestion de base de données natif distribué hybride transactionnel et analytique (HTAP). Pour plus d'informations, consultez le site web d'OceanBase. Afin de réduire les coûts de refonte de vos systèmes métier lors de la migration depuis une base de données MySQL ou Oracle, OceanBase prend en charge deux modes de compatibilité : le mode Oracle et le mode MySQL. Les types de données, les fonctionnalités SQL et les vues internes de ces modes sont cohérents avec ceux de MySQL ou d'Oracle.
Fonctionnalités prises en charge
| Catégorie | Détails |
|---|---|
| Types de table | Tables source, de dimension et de destination |
| Modes d'exécution | Mode streaming et mode par lots |
| Format des données | Non applicable |
| Métriques de surveillance spécifiques | Aucune |
| API | SQL |
| Mises à jour et suppressions dans les tables de destination | Oui |
Prérequis
Avant de commencer, assurez-vous que :
La base de données cible et les tables existent dans OceanBase.
Une liste d'autorisation d'adresses IP est configurée. Consultez Configurer un groupe de liste d'autorisation.
(Pour les tables source CDC) Le service Binlog d'OceanBase est activé. Consultez Opérations liées au Binlog.
(Pour les tables de destination avec import direct) Le port d'import direct est activé. Consultez Import direct.
Limitations
Requiert Ververica Runtime (VVR) 8.0.1 ou version ultérieure.
Garanties sémantiques :
Tables source CDC : sémantique exactly-once. Les données ne sont ni perdues ni dupliquées lors de la transition entre les données historiques complètes et la lecture du Binlog, même après une panne.
Tables de destination : sémantique at-least-once. Si la table de destination possède une clé primaire, l'idempotence garantit l'exactitude des données.
Modification de l'architecture CDC dans VVR 11.4.0
À partir de VVR 11.4.0, le connecteur CDC OceanBase a été mis à niveau :
Le connecteur CDC original basé sur le service LogProxy d'OceanBase est obsolète et supprimé.
La capture des journaux incrémentiels nécessite désormais le service Binlog d'OceanBase. Le connecteur CDC OceanBase offre une meilleure compatibilité protocolaire et une stabilité de connexion supérieure avec le service Binlog par rapport à une connexion directe via le connecteur MySQL CDC standard. Il n'est pas recommandé de connecter le connecteur MySQL CDC standard au service Binlog d'OceanBase pour le suivi des modifications.
Le suivi des modifications incrémentielles en mode de compatibilité Oracle n'est plus pris en charge. Pour la CDC en mode Oracle, contactez le support technique entreprise d'OceanBase.
Syntaxe
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>'
);
Comportement d'écriture de la destination :
Pour chaque enregistrement entrant, le connecteur construit une instruction SQL basée sur le schéma de la table de destination :
Aucune clé primaire :
INSERT INTOClé primaire présente :
UPSERT(selon le mode de compatibilité de la base de données)
Paramètres WITH
Paramètres généraux
Ces paramètres s'appliquent à tous les types de table.
| Paramètre | Description | Obligatoire | Type | Par défaut |
|---|---|---|---|---|
connector |
Définissez sur oceanbase. |
Oui | STRING | — |
password |
Le mot de passe de la base de données. | Oui | STRING | — |
Paramètres de la table source
À partir de VVR 11.4.0, le connecteur CDC OceanBase utilise le service Binlog d'OceanBase pour la capture des journaux incrémentiels. Le connecteur basé sur LogProxy est supprimé. La CDC en mode de compatibilité Oracle n'est plus prise en charge à partir de VVR 11.4.0.
| Paramètre | Description | Obligatoire | Type | Par défaut | Notes |
|---|---|---|---|---|---|
hostname |
L'adresse IP ou le nom d'hôte de la base de données OceanBase. Utilisez une adresse de réseau privé virtuel (VPC) lorsque cela est possible. | Oui | STRING | — | Si OceanBase et Realtime Compute for Apache Flink se trouvent dans des VPC différents, configurez la connectivité inter-VPC ou utilisez un endpoint public. Consultez Gestion de l'espace de travail et Accès Internet pour les clusters Flink. |
username |
Le nom d'utilisateur de la base de données OceanBase. | Oui | STRING | — | — |
database-name |
Le nom de la base de données OceanBase. Prend en charge les expressions régulières pour lire depuis plusieurs bases de données. Évitez les ancres ^ et $. |
Oui | STRING | — | Le connecteur concatène database-name et table-name avec \\. (VVR 8.0.1+) ou . (versions antérieures) pour former une expression régulière de chemin complet. Par exemple, db_.* + tb_.+ devient db_.*\\.tb_.+. |
table-name |
Le nom de la table OceanBase. Prend en charge les expressions régulières pour lire depuis plusieurs tables. Évitez les ancres ^ et $. |
Oui | STRING | — | Voir la note relative à database-name ci-dessus. |
port |
Le port de la base de données OceanBase. | Non | INTEGER | 3306 |
— |
server-id |
Un ID numérique pour le client de base de données. Doit être globalement unique. Prend en charge une plage, telle que 5400-5408, pour attribuer différents ID aux lecteurs simultanés. |
Non | STRING | Valeur aléatoire entre 5400 et 6400 | Utilisez un ID différent pour chaque job se connectant à la même base de données. Consultez Utilisation de l'ID serveur. |
scan.incremental.snapshot.chunk.size |
Le nombre de lignes par fragment lors de la lecture instantanée incrémentielle. Les données de chaque fragment sont mises en mémoire tampon avant d'être entièrement lues. Des fragments plus petits améliorent la granularité de la récupération après incident, mais peuvent provoquer des erreurs de dépassement de mémoire (OOM) et réduire le débit. | Non | INTEGER | 8096 |
Équilibrez la taille des fragments en fonction des exigences de mémoire et de débit. |
scan.snapshot.fetch.size |
Le nombre maximal d'enregistrements extraits par extraction lors des lectures de table complètes. | Non | INTEGER | 1024 |
— |
scan.startup.mode |
Le mode de démarrage pour la consommation des données. | Non | STRING | initial |
Valeurs valides :
initial
(analyse de l'historique complet, puis lecture du Binlog),
latest-offset
(lecture uniquement de la fin du Binlog),
earliest-offset
(Binlog disponible le plus ancien),
specific-offset
(défini via les paramètres
scan.startup.specific-offset.*
),
timestamp
(défini via
scan.startup.timestamp-millis
).
Important
Pour les modes |
scan.startup.specific-offset.file |
Le nom du fichier Binlog pour le décalage de départ. Exemple : mysql-bin.000003. |
Non | STRING | — | Requiert scan.startup.mode=specific-offset. |
scan.startup.specific-offset.pos |
Le décalage en octets dans le fichier Binlog spécifié. | Non | INTEGER | — | Requiert scan.startup.mode=specific-offset. |
scan.startup.specific-offset.gtid-set |
L'ensemble GTID pour le décalage de départ. Exemple : 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19. |
Non | STRING | — | Requiert scan.startup.mode=specific-offset. |
scan.startup.timestamp-millis |
L'horodatage de départ en millisecondes. La CDC OceanBase lit l'événement initial de chaque fichier Binlog pour localiser le fichier correspondant à cet horodatage. Le fichier Binlog ne doit pas avoir été purgé. | Non | LONG | — | Requiert scan.startup.mode=timestamp. |
server-time-zone |
Le fuseau horaire de session utilisé par la base de données. Contrôle la conversion des types TIMESTAMP en STRING. Consultez les types temporels Debezium. Exemple : Asia/Shanghai. |
Non | STRING | Fuseau horaire d'exécution du job Flink | — |
debezium.min.row.count.to.stream.results |
Le seuil de nombre de lignes au-delà duquel le connecteur passe de la lecture complète (table entière en mémoire) à la lecture par lots (diffusion des lignes par lots). La lecture complète est plus rapide ; la lecture par lots évite les erreurs OOM pour les grandes tables. | Non | INTEGER | 1000 |
— |
connect.timeout |
Le temps d'attente maximal avant de réessayer une connexion ayant expiré. | Non | DURATION | 30s |
— |
connect.max-retries |
Le nombre maximal de tentatives de reconnexion après un échec. | Non | INTEGER | 3 |
— |
connection.pool.size |
La taille du pool de connexions à la base de données. La réutilisation des connexions réduit le nombre total de connexions ouvertes. | Non | INTEGER | 20 |
— |
jdbc.properties.* |
Paramètres de connexion JDBC URL personnalisés. Exemple : 'jdbc.properties.useSSL' = 'false'. Consultez les propriétés de configuration MySQL. |
Non | STRING | — | — |
debezium.* |
Paramètres Debezium personnalisés pour la lecture du Binlog. Exemple : 'debezium.event.deserialization.failure.handling.mode' = 'ignore'. |
Non | STRING | — | — |
heartbeat.interval |
L'intervalle auquel la source émet des événements de pulsation pour faire avancer le décalage Binlog. Empêche l'expiration du décalage Binlog sur les tables rarement mises à jour. Un décalage expiré entraîne l'échec du job et nécessite un redémarrage sans état. | Non | DURATION | 30s |
— |
scan.incremental.snapshot.chunk.key-column |
La colonne utilisée comme clé de fragment pour le fractionnement des données pendant la phase d'instantané. | Conditionnel | STRING | — | Requis pour les tables sans clé primaire (doit être NOT NULL). Optionnel pour les tables avec clé primaire (sélectionnez une colonne de la clé primaire). |
scan.incremental.close-idle-reader.enabled |
Indique s'il faut fermer les lecteurs inactifs une fois la phase d'instantané terminée. | Non | BOOLEAN | false |
VVR 8.0.1+. Requiert également execution.checkpointing.checkpoints-after-tasks-finish.enabled=true. |
scan.read-changelog-as-append-only.enabled |
Indique s'il faut convertir le flux de journal des modifications en flux append-only. Lorsque la valeur est true, tous les types de messages (INSERT, DELETE, UPDATE_BEFORE, UPDATE_AFTER) sont convertis en INSERT. À activer uniquement dans des scénarios particuliers, tels que la conservation des messages de suppression d'une table amont. |
Non | BOOLEAN | false |
VVR 8.0.8+. |
scan.only.deserialize.captured.tables.changelog.enabled |
Indique s'il faut désérialiser les événements de modification uniquement pour les tables capturées pendant la phase incrémentielle. La définition sur true accélère la lecture du Binlog. |
Non | BOOLEAN | false (VVR 8.x), true (VVR 11.1+) |
VVR 8.0.7+. Dans VVR 8.0.8 et versions antérieures, utilisez le nom de paramètre debezium.scan.only.deserialize.captured.tables.changelog.enable. |
scan.parse.online.schema.changes.enabled |
Indique s'il faut analyser les événements DDL pour les modifications sans verrou d'ApsaraDB RDS pendant la phase incrémentielle. Fonctionnalité expérimentale. Effectuez un snapshot du job Flink avant d'effectuer des modifications de schéma en ligne sans verrou. | Non | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.backfill.skip |
Indique s'il faut ignorer le remplissage rétroactif pendant la phase d'instantané. Le remplissage rétroactif s'applique uniquement lors de la requête d'instantané d'un seul fragment et ne couvre pas l'ensemble de la phase de lecture complète. Lorsque le remplissage rétroactif est ignoré, la requête d'instantané de chaque fragment lit les dernières données de la table à cet instant ; les mises à jour qui surviennent sur un fragment après sa lecture ne sont pas fusionnées pendant la phase de lecture complète et sont lues depuis le Binlog après l'entrée en phase incrémentielle. Par exemple, une mise à jour du fragment5 qui survient pendant l'instantané du fragment5 est reflétée directement dans l'instantané du fragment5 ; si le fragment5 est mis à jour après que le lecteur est passé au fragment80, la mise à jour est appliquée ultérieurement depuis le Binlog pendant la phase incrémentielle. Important : lorsque cette option est activée, les modifications qui surviennent pendant ou après l'analyse d'un fragment sont toujours transmises depuis le Binlog en phase incrémentielle et peuvent être dupliquées ; seule la sémantique at-least-once est garantie. Activez cette option uniquement si la destination en aval prend en charge les écritures idempotentes par clé primaire. | Non | BOOLEAN | false |
VVR 11.1+. |
scan.incremental.snapshot.unbounded-chunk-first.enabled |
Indique s'il faut distribuer le fragment non borné en premier pendant la phase d'instantané. Réduit le risque d'erreur OOM lorsqu'un TaskManager traite le dernier fragment. Fonctionnalité expérimentale. Ajoutez ce paramètre avant le premier démarrage du job. | Non | BOOLEAN | false |
VVR 11.1+. |
Paramètres de la table de dimension
| Paramètre | Description | Obligatoire | Type | Par défaut | Notes |
|---|---|---|---|---|---|
url |
L'URL JDBC. Doit inclure le nom de la base de données MySQL ou le nom du service Oracle. | Oui | STRING | — | — |
userName |
Le nom d'utilisateur de la base de données. | Oui | STRING | — | — |
cache |
La politique de cache pour les recherches dans la table de dimension. | Non | STRING | ALL |
ALL : Charge toutes les données avant le démarrage du job ; recharge après expiration. Adapté aux petites tables avec de nombreux échecs de recherche. Augmentez la mémoire du nœud de jointure à au moins deux fois la taille de la table pour prendre en charge le chargement asynchrone. LRU : Met en cache un sous-ensemble de lignes ; requiert cacheSize. None : Aucun cache. |
cacheSize |
Le nombre maximal d'entrées mises en cache. | Non | INTEGER | 100000 |
Requis lorsque cache=LRU. Ignoré lorsque cache=ALL. |
cacheTTLMs |
Le délai d'expiration du cache en millisecondes. Le comportement dépend du paramètre cache : pour LRU, les entrées expirent après cette durée (aucune expiration par défaut) ; pour ALL, le cache complet est rechargé après cette durée (aucun rechargement par défaut) ; pour None, ce paramètre n'a aucun effet. |
Non | LONG | Long.MAX_VALUE |
— |
maxRetryTimeout |
La durée maximale de nouvelle tentative. | Non | DURATION | 60s |
— |
Paramètres de la table de destination (JDBC)
| Paramètre | Description | Obligatoire | Type | Par défaut | Notes |
|---|---|---|---|---|---|
url |
L'URL JDBC. Doit inclure le nom de la base de données MySQL ou le nom du service Oracle. | Oui | STRING | — | — |
userName |
Le nom d'utilisateur de la base de données. | Oui | STRING | — | — |
tableName |
Le nom de la table cible. | Oui | STRING | — | — |
sink.mode |
Le mode d'écriture. Définissez sur jdbc pour les écritures standard ; définissez sur direct-load pour l'import direct. |
Oui | STRING | jdbc |
— |
compatibleMode |
Le mode de compatibilité OceanBase. Valeurs valides : mysql, oracle. |
Non | STRING | mysql |
Paramètre spécifique à OceanBase. |
maxRetryTimes |
Le nombre maximal de nouvelles tentatives d'écriture. | Non | INTEGER | 3 |
— |
poolInitialSize |
La taille initiale du pool de connexions. | Non | INTEGER | 1 |
— |
poolMaxActive |
Le nombre maximal de connexions actives dans le pool. | Non | INTEGER | 8 |
— |
poolMaxWait |
Le temps d'attente maximal (ms) pour obtenir une connexion du pool. | Non | INTEGER | 2000 |
— |
poolMinIdle |
Le nombre minimal de connexions inactives dans le pool. | Non | INTEGER | 1 |
— |
connectionProperties |
Propriétés de connexion JDBC au format k1=v1;k2=v2. |
Non | STRING | — | — |
ignoreDelete |
Indique s'il faut ignorer les opérations de suppression. | Non | BOOLEAN | false |
— |
excludeUpdateColumns |
Colonnes à exclure des mises à jour, séparées par des virgules (par exemple, column1,column2). Les colonnes de clé primaire sont toujours exclues, quel que soit ce paramètre. |
Non | STRING | — | — |
partitionKey |
La clé de partition. Lorsqu'elle est définie, les données sont regroupées par cette clé avant l'application de la règle modRule. |
Non | STRING | — | — |
modRule |
La règle de groupement au format column_name mod number (par exemple, user_id mod 8). La colonne doit être numérique. Les données sont d'abord partitionnées par partitionKey, puis regroupées au sein de chaque partition selon cette règle. |
Non | STRING | — | — |
bufferSize |
La taille du tampon de données (nombre d'enregistrements). | Non | INTEGER | 1000 |
— |
flushIntervalMs |
L'intervalle de vidage du tampon (ms). Si le tampon ne remplit pas la condition de sortie dans cet intervalle, toutes les données mises en tampon sont vidées automatiquement. | Non | LONG | 1000 |
— |
retryIntervalMs |
L'intervalle de nouvelle tentative (ms). | Non | INTEGER | 5000 |
— |
Paramètres de la table de destination (import direct)
L'import direct est une méthode d'écriture à haut débit pour le chargement en masse de données dans OceanBase. Disponible dans VVR 11.5 et versions ultérieures.
Avant d'utiliser l'import direct, vérifiez les contraintes suivantes :
Flux bornés uniquement : La source de données doit être un flux borné. Utilisez le mode par lots de Flink pour des performances optimales.
Verrouillage de la table pendant l'import : La table cible est verrouillée tout au long de l'import. Les écritures DML et les modifications DDL sont bloquées ; les requêtes de lecture ne sont pas affectées.
Non destiné aux écritures en temps réel : Pour les écritures en streaming ou en temps réel, utilisez plutôt la destination JDBC.
| Paramètre | Description | Obligatoire | Type | Par défaut | Notes |
|---|---|---|---|---|---|
sink.mode |
Définissez sur direct-load pour utiliser l'import direct. |
Non | STRING | jdbc |
— |
host |
L'adresse IP ou le nom d'hôte de la base de données OceanBase. | Oui | STRING | — | — |
port |
Le port RPC de la base de données OceanBase. | Non | INTEGER | 2882 |
— |
username |
Le nom d'utilisateur de la base de données. | Oui | STRING | — | — |
tenant-name |
Le nom du locataire OceanBase. | Oui | STRING | — | — |
schema-name |
Pour les locataires MySQL : le nom de la base de données. Pour les locataires Oracle : le nom du propriétaire. | Oui | STRING | — | — |
table-name |
Le nom de la table cible. | Oui | STRING | — | — |
parallel |
La concurrence côté serveur pour la tâche d'import. Le serveur plafonne le degré de parallélisme réel en fonction des spécifications CPU du locataire sans renvoyer d'erreur. Formule : MIN(tenant_cores × 2, parallel) × partition_nodes. Par exemple, avec 2 cœurs CPU, parallel=10 et 2 nœuds de partition : MIN(4, 10) × 2 = 8. |
Non | INTEGER | 8 |
— |
buffer-size |
Le nombre d'enregistrements mis en tampon avant une seule écriture dans OceanBase. | Non | INTEGER | 1024 |
— |
dup-action |
Le comportement en cas de clés primaires en double. STOP_ON_DUP : échec de l'import. REPLACE : écrase la ligne existante. IGNORE : ignore la ligne entrante. |
Non | STRING | REPLACE |
— |
load-method |
Le mode d'import. full : import direct standard. inc : mode incrémentiel, vérifie les conflits de clé primaire (observer 4.3.2+, dup-action=REPLACE non pris en charge). inc_replace : mode de remplacement incrémentiel, écrase les lignes existantes directement sans vérification de conflit (observer 4.3.2+, dup-action est ignoré). |
Non | STRING | full |
— |
max-error-rows |
Le nombre maximal de lignes d'erreur tolérées. Les lignes d'erreur incluent : les clés primaires en double lorsque dup-action=STOP_ON_DUP, les nombres de colonnes non correspondants et les lignes dont la conversion de type échoue. |
Non | LONG | 0 |
— |
timeout |
Le délai d'expiration global pour la tâche d'import direct. | Non | DURATION | 7d |
— |
heartbeat-timeout |
Le délai d'expiration de la pulsation côté client. | Non | DURATION | 60s |
— |
heartbeat-interval |
L'intervalle de pulsation côté client. | Non | DURATION | 10s |
— |
Mappage de types
Mode compatible MySQL
| Type OceanBase | Type 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 (max 2 147 483 647 octets) |
Mode compatible Oracle
| Type OceanBase | Type 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 |
Exemples
Table source et table de destination
L'exemple suivant lit les données CDC depuis une table source OceanBase et les écrit dans une table de destination JDBC. Une définition de table de destination avec import direct est également incluse à titre de référence.
Les trois tables utilisent 'connector' = 'oceanbase'. La source et la destination JDBC utilisent des ensembles de paramètres différents ; la destination direct-load définit sink.mode = 'direct-load' et se connecte via le port RPC.
-- 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;
Table de dimension
L'exemple suivant joint une source Datagen à une table de dimension OceanBase à l'aide d'une jointure temporelle. La politique de cache ALL charge la table de dimension entière en mémoire avant le démarrage du job.
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;
Étapes suivantes
Connecteurs pris en charge — liste complète des connecteurs disponibles dans Realtime Compute for Apache Flink
Aperçu du service Binlog d'OceanBase — requis pour les lectures incrémentielles CDC