Tous les produits
Search
Centre de documentation

AnalyticDB:Importer des données depuis Apache Flink

Dernière mise à jour :Aug 10, 2026

Utilisez le connecteur SQL JDBC d'Apache Flink pour écrire des données en flux continu ou par lots dans un cluster AnalyticDB for MySQL Data Warehouse Edition. Ce guide couvre les versions 1,11 et ultérieures de Flink.

Remarque

Ce guide utilise Apache Flink SQL. Pour écrire des données à l'aide de l'API Java Database Connectivity (JDBC) de Flink, consultez la documentation JDBC Connector.

Prérequis

Avant de commencer, vérifiez que :

  • Un cluster AnalyticDB for MySQL Data Warehouse Edition est disponible, avec une base de données et une table prêtes à recevoir les données. Consultez les rubriques CREATE DATABASE et CREATE TABLE.

  • Un cluster Apache Flink exécute la version 1,11 ou ultérieure.

  • Le fichier JAR du connecteur Flink JDBC et un pilote MySQL (version 5.1.40 ou ultérieure) sont déployés dans le répertoire ${Flink deployment directory}/lib sur tous les nœuds Flink, et le cluster a été redémarré après le déploiement.

  • (Pour les clusters en mode élastique uniquement) L'ENI est activée sur la page Cluster Information sous la section Network Information.

Important

L'activation ou la désactivation de l'ENI interrompt toutes les connexions à la base de données pendant environ 2 minutes ; les opérations de lecture et d'écriture sont alors indisponibles.

Télécharger les fichiers JAR requis

Connecteur Flink JDBC

Téléchargez le fichier JAR du connecteur correspondant à votre version de Flink. Pour les versions non répertoriées ci-dessous, consultez la documentation JDBC SQL Connector.

Version de Flink Fichier JAR
1,11 flink-connector-jdbc_2.11-1.11.0.jar
1,12 flink-connector-jdbc_2.11-1.12.0.jar
1,13 flink-connector-jdbc_2.11-1.13.0.jar

Pilote MySQL

Téléchargez un pilote MySQL (version 5.1.40 ou ultérieure) depuis le dépôt mysql/mysql-connector-java.

Placez les deux fichiers JAR dans le répertoire lib de chaque nœud Flink, puis redémarrez le cluster. Pour obtenir des instructions sur le démarrage du cluster, consultez la rubrique Step 2: Start a cluster.

Compatibilité des versions pour les anciennes versions de Flink

Pour les versions de Flink antérieures à la 1,11 :

Étape 1 : Préparer les données source

Cet exemple utilise un fichier CSV local comme source de données.

  1. Sur n'importe quel nœud Flink, créez le fichier /root/data.csv avec le contenu suivant :

    0,json00,20
    1,json01,21
    2,json02,22
    3,json03,23
    4,json04,24
    5,json05,25
    6,json06,26
    7,json07,27
    8,json08,28
    9,json09,29
  2. Copiez ce fichier vers /root/data.csv sur tous les autres nœuds Flink. Le chemin d'accès doit être identique sur chaque nœud.

Étape 2 : Écrire les données dans AnalyticDB for MySQL

Exécutez toutes les commandes SQL de cette étape dans l'interface CLI du client SQL Flink. Pour la démarrer, consultez la rubrique Starting the SQL Client CLI.

Créer la table source

Créez une table source Flink qui lit les données depuis le fichier CSV :

CREATE TABLE IF NOT EXISTS csv_person (
  `user_id`   STRING,
  `user_name` STRING,
  `age`       INT
) WITH (
  'connector'              = 'filesystem',
  'path'                   = 'file:///root/data.csv',
  'format'                 = 'csv',
  'csv.ignore-parse-errors' = 'true',
  'csv.allow-comments'     = 'true'
);
Remarque

Les noms de colonnes et les types de données doivent correspondre à ceux de la table de destination dans AnalyticDB for MySQL. La valeur du paramètre path doit pointer vers le même chemin absolu sur chaque nœud Flink. Pour connaître les autres options de connecteur, consultez la documentation FileSystem SQL Connector.

Créer la table de résultat

Créez une table de résultat Flink qui correspond à la table de destination dans AnalyticDB for MySQL :

CREATE TABLE mysql_person (
  user_id   STRING,
  user_name STRING,
  age       INT
) WITH (
  'connector'                  = 'jdbc',
  'url'                        = 'jdbc:mysql://<endpoint>:<port>/<db_name>?useServerPrepStmts=false&rewriteBatchedStatements=true',
  'table-name'                 = '<table_name>',
  'username'                   = '<username>',
  'password'                   = '<password>',
  'sink.buffer-flush.max-rows' = '10',
  'sink.buffer-flush.interval' = '1s'
);

Remplacez les espaces réservés suivants avant d'exécuter cette instruction :

Espace réservé Description Exemple
<endpoint> Endpoint du cluster. Pour utiliser un endpoint public, vous devez d'abord en faire la demande. am-**********.ads.aliyuncs.com
<port> Port du cluster 3306
<db_name> Nom de la base de données de destination tpch
<table_name> Nom de la table de destination person
<username> Compte de base de données disposant des autorisations d'écriture. Exécutez la commande SHOW GRANTS pour vérifier les autorisations, ou utilisez GRANT pour les attribuer. —
<password> Mot de passe du compte de base de données —

Paramètres du connecteur

Paramètre Obligatoire Par défaut Description
connector Oui — Définissez la valeur sur jdbc.
url Oui — URL JDBC du cluster. La chaîne de requête useServerPrepStmts=false&rewriteBatchedStatements=true active les écritures par lots pour améliorer le débit et réduire la charge sur le cluster.
table-name Oui — Nom de la table de destination.
username Oui — Compte de base de données disposant des autorisations d'écriture.
password Oui — Mot de passe du compte.
sink.buffer-flush.max-rows Non — Nombre maximal de lignes par lot. Définissez la valeur sur 0 pour effectuer la vidange uniquement selon l'intervalle de temps. Exemples de valeurs non nulles : 1000, 2000. Évitez de définir la valeur sur 0, car cela dégrade le débit d'écriture lors de requêtes concurrentes.
sink.buffer-flush.interval Non — Temps maximal entre deux vidanges. Définissez la valeur sur 0 pour effectuer la vidange uniquement lorsque max-rows est atteint. Exemples de valeurs non nulles : 1d, 1h, 1min, 1s, 1ms. Évitez de définir la valeur sur 0, car les données peuvent être retardées pendant les périodes de faible trafic.

Pour connaître toutes les options disponibles du connecteur, consultez la rubrique Connector options.

Comportement de vidange

Lorsque les paramètres sink.buffer-flush.max-rows et sink.buffer-flush.interval sont tous deux définis sur des valeurs non nulles, une vidange est déclenchée dès que l'une des conditions suivantes est remplie :

  • Le nombre de lignes mises en tampon atteint la valeur de sink.buffer-flush.max-rows.

  • Le temps écoulé depuis la dernière vidange atteint la valeur de sink.buffer-flush.interval.

Exécuter l'importation

Exécutez l'instruction suivante pour commencer à écrire les données de la table source vers AnalyticDB for MySQL :

INSERT INTO mysql_person SELECT user_id, user_name, age FROM csv_person;
Remarque

Si la table de destination possède une clé primaire et que les données source contiennent des valeurs de clé primaire en double, l'instruction INSERT INTO se comporte comme INSERT IGNORE INTO : les lignes en double sont ignorées au lieu d'être insérées à nouveau. Consultez la rubrique INSERT INTO.

Étape 3 : Vérifier les données

Une fois la tâche terminée, connectez-vous à la base de données tpch de votre cluster AnalyticDB for MySQL et exécutez la commande suivante :

SELECT * FROM person;