Tous les produits
Search
Centre de documentation

AnalyticDB:INSERT OVERWRITE SELECT

Dernière mise à jour :Aug 21, 2026

INSERT OVERWRITE SELECT permet d'écrire des données par lot avec des performances élevées dans les tables AnalyticDB for MySQL en effaçant les données des partitions avant d'y insérer de nouvelles données en masse.

Fonctionnement

L'instruction INSERT OVERWRITE SELECT efface d'abord toutes les données existantes d'une partition, puis y écrit les nouvelles données par lots.

  • Si la table cible est partitionnée, INSERT OVERWRITE SELECT ne réécrit que les partitions contenant les nouvelles données. Les autres partitions restent inchangées.

  • Si la table cible n'est pas partitionnée, INSERT OVERWRITE SELECT efface toutes les données existantes de la table, puis écrit les nouvelles données par lots.

Les tâches d'écriture sur une même table s'exécutent séquentiellement (la concurrence est fixée à 1). La concurrence d'écriture par défaut au niveau du cluster est de 2. Ne modifiez pas cette valeur : cela risquerait de dégrader les performances et de surcharger le cluster.

Remarque

Pour ajuster la concurrence d'écriture, soumettez un ticket au support technique pour évaluation.

Présentation

Caractéristiques principales :

  • Forte consommation de ressources : exécutez cette opération pendant les heures creuses pour éviter d'impacter les performances du cluster.

  • Visibilité par lot : les données écrites ne deviennent visibles qu'à la fin de la tâche, de manière atomique.

  • Réécriture de partition : seules les partitions contenant de nouvelles données sont réécrites.

  • Création automatique d'index : les index sont construits de manière synchrone lors de l'écriture, ce qui rend la table cible immédiatement interrogeable dès la fin de la tâche.

Cas d'utilisation courants :

  • Écriture de données au niveau des partitions.

  • Initialisation des données (écriture complète).

  • Écriture massive de données à grande échelle. Non recommandé pour les petits volumes de données.

Précautions

N'utilisez pas INSERT OVERWRITE SELECT conjointement avec des méthodes d'écriture en temps réel (telles que INSERT INTO, REPLACE INTO, DELETE et UPDATE) pour écrire simultanément dans la même table. Sinon, les données issues des écritures en temps réel seront perdues.

Syntaxe

INSERT OVERWRITE table_name (column_name[,...])
select_statement

Paramètres

  • table_name : nom de la table cible.

  • column_name : nom d'une colonne de la table cible.

  • select_statement : instruction SELECT.

    Le type de données de chaque colonne de l'instruction SELECT doit correspondre à celui de la colonne correspondante dans la table cible.

    Si le nombre de colonnes dans l'instruction SELECT est supérieur à celui de la table cible, l'opération d'écriture échoue. S'il est inférieur, les colonnes restantes de la table cible sont renseignées avec leurs valeurs par défaut. Si une colonne ne possède aucune valeur par défaut, le système la renseigne avec NULL.

Exemples

Données d'exemple

Préparez des tables de test et des données pour les exemples de réécriture.

  1. Créez une table source nommée test_source et une table cible nommée test_target.

    CREATE TABLE test_source (a BIGINT, b BIGINT) 
    DISTRIBUTED BY HASH(a);
    CREATE TABLE test_target (a BIGINT, b BIGINT) 
    DISTRIBUTED BY HASH(a) 
    PARTITION BY VALUE(b) LIFECYCLE 10;
  2. Insérez des données de test dans la table source test_source.

    INSERT INTO test_source VALUES (1,1);  
    INSERT INTO test_source VALUES (1,2); 
    INSERT INTO test_source VALUES (1,3);  
    INSERT INTO test_source VALUES (2,1); 
    INSERT INTO test_source VALUES (2,2); 
    INSERT INTO test_source VALUES (2,3);

Réécriture des données

  1. Insérez des données initiales dans la table test_target.

    INSERT OVERWRITE test_target 
    SELECT * FROM test_source WHERE a = 1;

    Interrogez la table test_target. La requête renvoie le résultat suivant.

    +-----+------+
    |1    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  2. Réécrivez la partition où b=1 dans la table test_target.

    INSERT OVERWRITE test_target (a,b)
    SELECT a,b FROM test_source 
    WHERE a = 2 AND b = 1;

    Après la réécriture, l'interrogation de test_target renvoie :

    +-----+------+
    |2    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  3. Réécrivez les partitions où b=2 et b=3 dans la table test_target.

    INSERT OVERWRITE test_target
    SELECT * FROM test_source 
    WHERE a = 2 AND b >= 2 AND b <= 3;

    Après la réécriture, l'interrogation de test_target renvoie :

    +-----+------+
    |2    |1     |
    |2    |2     |
    |2    |3     |
    +-----+------+

Écritures asynchrones

Soumettre une tâche

SUBMIT JOB exécute l'opération d'écriture de manière asynchrone en arrière-plan :

SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;

Optimiser les performances d'écriture

Ajoutez l'indicateur /* direct_batch_load=true */ avant l'opération d'écriture pour améliorer les performances tout en réduisant la consommation de ressources :

/* direct_batch_load=true*/
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
Remarque

/* direct_batch_load=true*/ nécessite une version du noyau 3.1.5 ou ultérieure. Si les performances ne s'améliorent pas, soumettez un ticket pour obtenir de l'aide. Pour vérifier la version de votre noyau, consultez la rubrique Afficher les informations de version de l'instance.

Interroger la progression de la tâche

SUBMIT JOB renvoie un job_id. Utilisez-le pour interroger l'état de la tâche :

SHOW JOB STATUS WHERE job='<job_id>';

Un état SUCCEEDED indique que la tâche est terminée.