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
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.
Dans le volet de navigation de gauche, choisissez Job Development > SQL Development.
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 .
-
Créez une base de données :
CREATE DATABASE spark_create_adb_db_test; -
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
SELECTetINSERTuniquement 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
UPDATEetDELETEne 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.
-
Utilisez le moteur XIHE pour activer la configuration des partitions chaudes :
SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true; -
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;
-
-
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 Catalog
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
Modes d'exécution Spark SQL — découvrez quand utiliser le mode de traitement par lots ou le mode interactif
Créer une table interne à l'aide de Spark SQL — référence complète de la syntaxe de création de table C-Store
Créer et gérer un groupe de ressources — configurez les groupes de ressources de tâches et interactifs