Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Instruction CREATE DATABASE AS (CDAS) (Abandon)

Dernière mise à jour :Aug 20, 2026

L'instruction CREATE DATABASE AS (CDAS) synchronise en temps réel les schémas et les données des tables d'une base de données entière, y compris les modifications de schéma. Utilisez-la pour répliquer plusieurs tables, voire l'intégralité d'une base de données source vers une destination, sans créer manuellement les tables cibles au préalable.

Pour les nouveaux jobs, privilégiez YAML for data ingestion . Le format YAML prend en charge toutes les fonctionnalités essentielles de CDAS : synchronisation des bases de données et des tables, évolution du schéma, colonnes calculées personnalisées, synchronisation brute des journaux binaires, filtrage par clause WHERE et élagage des colonnes. Il permet également de convertir des brouillons SQL existants contenant des instructions CTAS ou CDAS . Pour plus d'informations, consultez Data ingestion with Flink CDC .

Fonctionnement

CDAS constitue un raccourci syntaxique pour CREATE TABLE AS (CTAS). Lors de l'exécution d'une instruction CDAS, Realtime Compute for Apache Flink procède ainsi :

  1. Vérifie l'existence de la base de données cible et des tables cibles.

    • Si la base de données cible n'existe pas, Flink la crée via le catalogue de destination.

    • Si elle existe déjà, Flink recherche les tables cibles :

      • En leur absence, Flink les crée en reproduisant les noms et schémas des tables sources.

      • Si elles sont déjà présentes, Flink ignore l'étape de création.

  2. Démarre le job de synchronisation des données. Les données et les modifications de schéma sont alors répliquées en continu de la base de données source vers la destination.

Avantages de CDAS par rapport à plusieurs instructions CTAS :

  • Syntaxe simplifiée : Flink développe automatiquement une instruction CDAS unique en une instruction CTAS distincte pour chaque table.

  • Optimisation des ressources : Flink utilise un seul vertex source pour lire toutes les tables correspondantes. Dans le cas des sources MySQL Change Data Capture (CDC), cela réduit le nombre de connexions à la base de données, évite les lectures redondantes du journal binaire et allège la charge globale de lecture sur la base MySQL.

Fonctionnalités principales

Synchronisation des données

Fonctionnalité Description
Synchroniser une base de données Assure la synchronisation complète et incrémentielle des données depuis plusieurs tables (ou toutes les tables) d'une base de données vers chaque table cible associée.
Consolider et synchroniser des shards de base de données Identifie les noms de tables sources dans différents shards de base de données à l'aide d'expressions régulières, consolide ces tables et les synchronise vers les cibles correspondantes.
Synchroniser de nouvelles tables Synchronise des tables ajoutées récemment en redémarrant votre job à partir d'un savepoint.
Exécuter plusieurs instructions CDAS et CTAS dans un seul job Utilisez l'instruction STATEMENT SET pour soumettre plusieurs instructions CDAS et CTAS au sein d'un même job. Cette approche permet également de fusionner et de réutiliser les données des opérateurs de table source afin de réduire la charge de lecture sur la source de données.

Évolution du schéma

Lorsqu'une base de données est synchronisée via CDAS, les modifications de schéma, telles que l'ajout de colonnes, sont propagées automatiquement vers la cible. Ce comportement suit la même politique que pour CTAS. Consultez Schema evolution.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un catalogue de destination enregistré dans l'espace de travail. Reportez-vous à Catalogs.

Limites

Limites syntaxiques

  • Le débogage d'un brouillon SQL contenant une instruction CDAS n'est pas pris en charge.

  • MiniBatch n'est pas pris en charge.

    Important

    Supprimez toutes les configurations MiniBatch avant de créer un brouillon SQL avec une instruction CTAS ou CDAS : 1. Accédez à O&M > Configurations. 2. Sélectionnez l'onglet Deployment Defaults. 3. Dans la section Other Configuration, vérifiez que les configurations MiniBatch ont bien été supprimées. Si vous rencontrez l'erreur « Currently does not support merge StreamExecMiniBatchAssigner type ExecNode in CTAS/CDAS syntax » lors de la création ou du démarrage d'un déploiement, consultez How do I fix this error?

Connecteurs pris en charge

Connecteur Source Cible Notes
MySQL Oui Non La synchronisation des vues n'est pas possible.
Kafka Oui Non —
MongoDB Oui Non La consolidation de tables shardées et de bases de données n'est pas prise en charge. Les métadonnées MongoDB ne peuvent pas être synchronisées. Pour la configuration, reportez-vous à Manage MongoDB catalogs.
Upsert Kafka Non Oui —
Hologres Non Oui Flink établit une connexion pour chaque table selon l'option connectionSize. Configurez un pool partagé avec connectionPoolName. Si Hologres ne prend pas en charge certains types de données sources via les fixed plans, utilisez plutôt INSERT INTO ; évitez l'instruction CTAS qui offre des performances d'écriture inférieures car elle ne peut pas exploiter les fixed plans. Réservé aux instances Hologres exclusives ; les shared cluster instances ne sont pas prises en charge.
StarRocks Non Oui Limité à StarRocks sur Alibaba Cloud EMR.
Paimon Non Oui

La synchronisation des données vers des tables cibles Paimon du metastore DLF 2.5 est prise en charge à partir de VVR 11.1.

Remarques d'utilisation

Synchronisation de nouvelles tables

  • VVR 8.0.6 ou ultérieur : Redémarrez le job à partir d'un savepoint après l'ajout d'une nouvelle table. Consultez Synchronize new tables.

  • VVR 8.0.5 ou antérieur : Le redémarrage du job ne détecte pas les nouvelles tables. Adoptez l'une des approches suivantes :

    Approche Étapes
    Créer un nouveau job pour la nouvelle table Maintenez le job existant en cours d'exécution. Créez un job séparé ciblant uniquement la nouvelle table. Exemple : CREATE TABLE IF NOT EXISTS new_table AS TABLE mysql.tpcds.new_table /*+ OPTIONS('server-id'='8008-8010') */;
    Nettoyer et redémarrer depuis le début 1. Annulez le job existant. 2. Nettoyez les données synchronisées dans la cible. 3. Redémarrez le job sans état.

Accès inter-comptes et RAM

Accordez les permissions de lecture et d'écriture nécessaires à votre compte lors de l'accès à des ressources externes entre comptes, ou en tant qu'utilisateur RAM ou rôle RAM.

Syntaxe

CREATE DATABASE IF NOT EXISTS <target_database>
[COMMENT database_comment]
[WITH (key1=val1, key2=val2, ...)]
AS DATABASE <source_database>
INCLUDING { ALL TABLES | TABLE 'table_name' }
[EXCLUDING TABLE 'table_name']
[/*+ OPTIONS(key1=val1, key2=val2, ... ) */]

<target_database>:
  [catalog_name.]db_name

<source_database>:
  [catalog_name.]db_name
IF NOT EXISTS est obligatoire. Cette clause indique à Flink de vérifier si la table cible existe dans la destination. En son absence, Flink la crée ; si elle est présente, Flink ignore la création.
La table cible reprend le schéma de la table source (clé primaire, noms et types de champs physiques), mais exclut les colonnes calculées, les champs de métadonnées et les configurations de watermark.
Flink effectue des mappages de types de données de la source vers la cible. Pour plus de détails, consultez la documentation du connecteur concerné.

Paramètres

Paramètre Description
target_database Nom de la base de données de destination, éventuellement préfixé par le nom du catalogue : [catalog_name.]db_name.
COMMENT Description de la base de données de destination. Par défaut, la description de la base de données source est utilisée.
WITH Options pour la base de données de destination. Les clés et les valeurs doivent être des chaînes de caractères, par exemple 'sink.parallelism' = '4'. Consultez Catalogs pour les options spécifiques aux connecteurs.
source_database Nom de la base de données source, éventuellement préfixé par le nom du catalogue : [catalog_name.]db_name.
INCLUDING ALL TABLES Synchronise toutes les tables de la base de données source.
INCLUDING TABLE Spécifie les tables à synchroniser. Séparez plusieurs tables par `

`. Les expressions régulières sont prises en charge ; par exemple, INCLUDING TABLE 'web.*' correspond à toutes les tables dont le nom commence par web.

EXCLUDING TABLE Spécifie les tables à exclure de la synchronisation. Séparez plusieurs tables par `

`. Les expressions régulières sont prises en charge ; par exemple, EXCLUDING TABLE 'tmp.*' exclut toutes les tables dont le nom commence par tmp.

OPTIONS Options de connecteur pour la table source. Les clés et les valeurs doivent être des chaînes de caractères, par exemple 'server-id' = '65500'. Consultez Supported connectors.

Exemples

Synchroniser une base de données

Synchronisez toutes les tables de la base de données MySQL tpcds vers Hologres.

Prérequis :

  • Un catalogue Hologres nommé holo est créé dans l'espace de travail.

  • Un catalogue MySQL nommé mysql est créé dans l'espace de travail.

USE CATALOG holo;

CREATE DATABASE IF NOT EXISTS holo_tpcds          -- Create holo_tpcds in Hologres.
WITH ('sink.parallelism' = '4')                   -- Set sink parallelism (default: 4 for Hologres).
AS DATABASE mysql.tpcds INCLUDING ALL TABLES      -- Sync all tables from mysql.tpcds.
/*+ OPTIONS('server-id'='8001-8004') */;          -- Configure the MySQL CDC source options.
Les options définies dans la clause WITH s'appliquent uniquement au job en cours et contrôlent le comportement d'écriture. Elles ne sont pas persistées dans le catalogue Hologres. Pour connaître les options prises en charge, consultez Hologres .

Consolider et synchroniser des shards de base de données

Fusionnez toutes les tables portant des noms identiques dans plusieurs shards de base de données MySQL en tables Hologres uniques.

Scénario : Une instance MySQL contient des shards nommés de order_db01 à order_db99. Chaque shard renferme des tables telles que order et order_detail. L'ensemble des données des shards, y compris les modifications de schéma, doit être transféré vers Hologres.

Solution : Utilisez une expression régulière sur le nom de la base de données pour cibler tous les shards. Les noms de la base de données et de la table sont ajoutés à chaque table cible sous forme de deux champs supplémentaires. La clé primaire Hologres combine le nom de la base de données, le nom de la table et les colonnes de clé primaire de la table source afin de garantir l'unicité. La création préalable des tables cibles n'est pas nécessaire.

USE CATALOG holo;

CREATE DATABASE IF NOT EXISTS holo_order              -- Create holo_order in Hologres.
WITH('sink.parallelism'='4')                          -- Set sink parallelism (optional).
AS DATABASE mysql.`order_db[0-9]+` INCLUDING ALL TABLES  -- Match all order_db shards.
/*+ OPTIONS('server-id'='8001-8004') */;              -- Configure MySQL CDC source options (optional).

Les tables portant des noms identiques dans les différents shards sont fusionnées en une seule table Hologres.

Synchroniser de nouvelles tables

Une fois qu'un job CDAS est en cours d'exécution, activez la détection des nouvelles tables et redémarrez à partir d'un savepoint pour intégrer les tables récemment ajoutées.

La détection des nouvelles tables nécessite VVR 8.0.6 ou ultérieur. Le mode de démarrage de la table source doit être initial. Pendant la phase de snapshot complet, n'ajoutez ni ne supprimez de tables après la création d'un savepoint suivi d'un redémarrage du job à partir de ce savepoint. Sinon, le job ne pourra pas lire les données correctement.
  1. Sur la page Deployments, localisez le déploiement cible et cliquez sur Cancel dans la colonne Actions.

  2. Dans la boîte de dialogue, développez More Strategies, sélectionnez Stop With Savepoint, puis cliquez sur OK.

  3. Dans le brouillon SQL, ajoutez l'instruction suivante :

    SET 'table.cdas.scan.newly-added-table.enabled' = 'true';
  4. Cliquez sur Deploy.

  5. Récupérez le job à partir du savepoint :

    1. Sur la page Deployments, cliquez sur le nom du déploiement.

    2. Sur la page de détails du déploiement, cliquez sur l'onglet State, puis sur le sous-onglet History.

    3. Dans la liste Savepoints, repérez le savepoint créé lors de l'arrêt du job.

    4. Choisissez More > Start job from this savepoint dans la colonne Actions. Consultez Start a job.

Exécuter plusieurs instructions CDAS et CTAS dans un seul job

Synchronisez plusieurs bases de données au sein d'un même job afin d'optimiser la réutilisation des sources.

Scénario : Synchroniser tpcds, tpch et les shards user_db01–user_db99 vers Hologres dans un seul job.

Solution : Regroupez toutes les instructions dans un bloc STATEMENT SET. Flink réutilise alors un vertex source unique pour l'ensemble des instructions, ce qui réduit le nombre d'ID serveur, de connexions à la base de données et la charge globale de lecture, particulièrement pour les sources MySQL CDC.

Important
USE CATALOG holo;

BEGIN STATEMENT SET;

-- Sync user tables from all user_db shards.
CREATE TABLE IF NOT EXISTS user
AS TABLE mysql.`user_db[0-9]+`.`user[0-9]+`
/*+ OPTIONS('server-id'='8001-8004') */;

-- Sync tpcds database.
CREATE DATABASE IF NOT EXISTS holo_tpcds
AS DATABASE mysql.tpcds INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

-- Sync tpch database.
CREATE DATABASE IF NOT EXISTS holo_tpch
AS DATABASE mysql.tpch INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

END;

Synchroniser plusieurs bases de données MySQL vers Kafka

Synchronisez des tables issues de plusieurs bases de données MySQL vers Kafka tout en évitant les conflits de noms de topics.

Scénario : Des tables portant le même nom existent à la fois dans tpcds et tpch. Les envoyer vers le même topic Kafka entraînerait un écrasement des données.

Solution : Utilisez l'option cdas.topic.pattern pour générer des noms de topics uniques par base de données. Le placeholder {table-name} est remplacé au moment de l'exécution par le nom réel de la table. Par exemple, 'cdas.topic.pattern'='tpcds-{table-name}' dirige table1 de tpcds vers le topic tpcds-table1.

USE CATALOG kafkaCatalog;

BEGIN STATEMENT SET;

-- Sync tpcds database. Topic names follow the pattern "tpcds-<table_name>".
CREATE DATABASE IF NOT EXISTS kafka
WITH ('cdas.topic.pattern' = 'tpcds-{table-name}')
AS DATABASE mysql.tpcds INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

-- Sync tpch database. Topic names follow the pattern "tpch-<table_name>".
CREATE DATABASE IF NOT EXISTS kafka
WITH ('cdas.topic.pattern' = 'tpch-{table-name}')
AS DATABASE mysql.tpch INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

END;

L'introduction de Kafka comme couche intermédiaire entre MySQL et Flink permet également de réduire la charge sur MySQL. Consultez Synchronize MySQL database to Kafka with Flink CDC.

FAQ

Erreurs d'exécution

Performances des jobs

Synchronisation des données

Étapes suivantes