Tous les produits
Search
Centre de documentation

AnalyticDB:Utiliser Spark SQL pour lire et écrire dans des tables C-Store

Dernière mise à jour :Sep 22, 2026

Utilisez Spark SQL au sein d'un cluster AnalyticDB for MySQL pour lire et écrire dans des tables C-Store (moteur XUANWU), par lots ou en temps réel.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

  • Un cluster AnalyticDB for MySQL Édition Enterprise, Édition Basic ou Édition Data Lakehouse :

    • Édition Data Lakehouse : doit disposer de plus de 0 ACU de ressources de stockage réservées

    • Édition Enterprise : doit disposer de plus de 0 ACU de ressources réservées

    • Édition Basic : doit disposer de plus de 0 ACU de ressources réservées

  • Un groupe de ressources de tâches créé pour le cluster

  • Un compte de base de données créé pour le cluster

Choisir un mode

Deux modes sont disponibles selon votre cas d'utilisation :

Mode Instruction Groupe de ressources requis
Mode par lots INSERT OVERWRITE Moteur Spark et groupe de ressources de tâches
Mode temps réel INSERT INTO Moteur Spark, groupe de ressources de tâches et groupe de ressources interactif (spécifié via la commande SET)

Étape 1 : Accéder au développement SQL

  1. Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters, localisez votre cluster et cliquez sur son ID.

  2. Dans le volet de navigation de gauche, choisissez Job Development > SQL Development.

  3. Sous l'onglet SQLConsole, sélectionnez le moteur Spark et un groupe de ressources de tâches.

Étape 2 : Créer une base de données et une table C-Store

Exécutez les instructions suivantes en mode de traitement par lots ou en mode interactif. Pour plus de détails, consultez la section Modes d'exécution Spark SQL .
  1. Créez une base de données :

    CREATE DATABASE spark_create_adb_db_test;
  2. Créez une table C-Store. Pour connaître la syntaxe complète de création de table, reportez-vous à la section Créer une table interne à l'aide de Spark SQL.

    CREATE TABLE spark_create_adb_db_test.test_adb_tbl (
      id int,
      name string COMMENT 'test_name',
      age int
    ) using adb TBLPROPERTIES('primaryKey'='id,age',
                    'distributeType'='HASH',
                    'distributeColumns'='id',
                    'partitionType'='value',
                    'partitionColumn'='age',
                    'partitionCount'='120',
                    'storagePolicy'='COLD'
                   );

Étape 3 : Lire et écrire des données

Lorsqu'une instruction Spark SQL s'exécute, le système renvoie uniquement un message de succès ou d'échec ; aucune donnée n'est retournée en ligne. Pour visualiser les données de la table, consultez les Logs sous l'onglet Application List de la page Spark Jar Development . Pour plus de détails, voir Afficher les informations de l'application Spark .

Mode par lots (INSERT OVERWRITE)

Remarques d'utilisation

  • Spark SQL prend en charge les instructions SELECT et INSERT uniquement pour les tables partitionnées. Les tables non partitionnées ne sont pas prises en charge. Pour savoir comment créer des tables partitionnées, consultez la section CREATE TABLE.

  • Les instructions UPDATE et DELETE ne sont pas prises en charge pour les tables C-Store, qu'elles soient partitionnées ou non.

  • Pour interroger les données chaudes, effectuez les étapes suivantes avant d'exécuter toute requête, faute de quoi celle-ci échouera.

    1. Utilisez le moteur XIHE pour activer la configuration des partitions chaudes :

      SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;
    2. Déclenchez une tâche BUILD pour reconstruire l'index :

      • Build specific partitions (nécessite la version V3.1.6.0 du cluster ou ultérieure) : > Important: Pour afficher et mettre à jour la version mineure, accédez à la section Configuration Information de la page Cluster Information.

        BUILD TABLE <table_name> force partitions='partition1,partition2';
      • Construire la table entière (désactivé par défaut car la reconstruction de toutes les partitions est longue ; soumettre un ticket pour l'activer) :soumettre un ticket

        BUILD TABLE <table_name> force = true;

        soumettre un ticket

    3. Vérifiez l'état de la tâche BUILD :

      SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;

      Attendez la fin de la tâche avant d'exécuter des requêtes.

Écrire et lire des données

Écrivez des données dans la table C-Store à l'aide de l'instruction INSERT OVERWRITE. Deux méthodes de partitionnement sont disponibles :

  • Partition statique : spécifiez la valeur de partition dans la clause PARTITION :

    INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) VALUES (1, 'bom');
  • Partition dynamique : incluez la valeur de la colonne de partition dans la liste VALUES :

    INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) VALUES (1, 'bom', 10);

Lisez les données de la table :

SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Mode temps réel (INSERT INTO)

Utilisez l'instruction INSERT INTO pour écrire des données en mode temps réel. Trois méthodes de connexion sont disponibles : JDBC, View et Catalog.

Ces trois méthodes nécessitent un accès basé sur une interface réseau élastique (ENI), qui achemine le trafic via le VPC de votre cluster en utilisant un vSwitch et un groupe de sécurité.

Méthode JDBC

Configurez les paramètres de connexion, puis écrivez et lisez directement à l'aide d'instructions SQL.

-- Connection credentials and internal endpoint
conf spark.adb.username=<database-account>;
conf spark.adb.password=<password>;
conf spark.adb.endpoint=<cluster-internal-endpoint>:3306;
-- Enable ENI-based access
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=<vswitch-id>;
SET spark.adb.eni.securityGroupId=<security-group-id>;
-- Use JDBC mode for real-time writes
SET spark.adb.useJdbc=true;
-- Set the interactive resource group for SQL execution
SET spark.adb.resourceGroup=user_default;
-- Write data
INSERT INTO spark_create_adb_db_test.test_adb_tbl VALUES (1, 'adb', 20);
-- Read data
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
Paramètre Description
spark.adb.username Compte de base de données pour le cluster
spark.adb.password Mot de passe du compte de base de données
spark.adb.endpoint Endpoint interne et port du cluster, au format <endpoint>:3306
spark.adb.eni.enabled Définissez sur true pour activer l'accès basé sur ENI
spark.adb.eni.vswitchId ID du vSwitch auquel appartient le cluster
spark.adb.eni.securityGroupId ID du groupe de sécurité du cluster. Le groupe de sécurité doit se trouver dans le même VPC que le cluster
spark.adb.useJdbc Indique s'il faut utiliser le mode JDBC. Définissez sur true pour les écritures en temps réel. Valeur par défaut : false
spark.adb.resourceGroup Groupe de ressources interactif pour l'exécution SQL. Le groupe user_default est créé automatiquement lors de la création d'un cluster. Pour créer un nouveau groupe de ressources, consultez la section Créer et gérer un groupe de ressources

Méthode View

Créez une vue temporaire mappée à la table C-Store, puis utilisez le SQL standard pour lire et écrire via cette vue.

-- Enable ENI-based access
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=<vswitch-id>;
SET spark.adb.eni.securityGroupId=<security-group-id>;
-- Create a temporary view mapped to the target table
CREATE TEMPORARY VIEW table_tmp
USING org.apache.spark.sql.jdbc
OPTIONS (
  url 'jdbc:mysql://<cluster-internal-endpoint>:3306/spark_create_adb_db_test?useServerPrepStmts=false&rewriteBatchedStatements=true',
  dbtable 'spark_create_adb_db_test.test_adb_tbl',
  user '<database-account>',
  password '<password>'
);
-- Write data
INSERT INTO table_tmp VALUES (1, 'adb', 20);
-- Read data
SELECT * FROM table_tmp;
Paramètre Description
spark.adb.eni.enabled Définissez sur true pour activer l'accès basé sur ENI
spark.adb.eni.vswitchId ID du vSwitch auquel appartient le cluster
spark.adb.eni.securityGroupId ID du groupe de sécurité du cluster. Doit se trouver dans le même VPC que le cluster
table_tmp Nom de la vue temporaire. Vous pouvez utiliser n'importe quel nom
USING org.apache.spark.sql.jdbc Valeur fixe — spécifie la source de données JDBC
url Chaîne de connexion JDBC au format jdbc:mysql://<endpoint>:3306/<db_name>?useServerPrepStmts=false&rewriteBatchedStatements=true. Les paramètres useServerPrepStmts=false&rewriteBatchedStatements=true sont requis pour les écritures par lots et améliorent les performances d'écriture
dbtable Table cible au format <db_name>.<table_name>
user Compte de base de données pour le cluster
password Mot de passe du compte de base de données

Méthode Catalog

Enregistrez le cluster en tant que catalogue JDBC nommé dans Spark, puis interrogez les tables en utilisant le préfixe du catalogue.

-- Enable ENI-based access
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=<vswitch-id>;
SET spark.adb.eni.securityGroupId=<security-group-id>;
-- Register the JDBC catalog (catalog name "jdbc" is used as an example — you can customize it)
SET spark.sql.catalog.jdbc=org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog;
SET spark.sql.catalog.jdbc.url=jdbc:mysql://<cluster-internal-endpoint>:3306/?useServerPrepStmts=false&rewriteBatchedStatements=true;
SET spark.sql.catalog.jdbc.user=<database-account>;
SET spark.sql.catalog.jdbc.password=<password>;
-- Switch to the catalog and query
use jdbc;
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
Paramètre Description
spark.sql.catalog.jdbc Valeur fixe : org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog. La partie jdbc du nom du paramètre correspond au nom du catalogue et peut être personnalisée
spark.sql.catalog.jdbc.url URL JDBC au format jdbc:mysql://<endpoint>:3306/?useServerPrepStmts=false&rewriteBatchedStatements=true
spark.sql.catalog.jdbc.user Compte de base de données pour le cluster
spark.sql.catalog.jdbc.password Mot de passe du compte de base de données

Paramètres Spark

Configurez les paramètres suivants pour optimiser les performances de lecture et d'écriture.

Paramètre Description Valeur par défaut
spark.adb.write.batchSize Nombre d'enregistrements écrits par lot. Doit être un entier positif. S'applique uniquement au mode temps réel 600
spark.adb.write.arrow.maxMemoryBufferSize Taille maximale du tampon mémoire pour les opérations d'écriture, en Mo. Doit être un entier positif. S'applique uniquement au mode par lots 1024
spark.adb.write.arrow.maxRecordSizePerBatch Nombre maximal d'enregistrements par écriture par lot. Doit être un entier positif. S'applique uniquement au mode par lots 500

Étapes suivantes