Tous les produits
Search
Centre de documentation

Hologres:INSERT

Dernière mise à jour :Aug 19, 2026

Exécutez l'instruction INSERT pour ajouter de nouvelles lignes à une table spécifique. Cette rubrique explique comment utiliser l'instruction INSERT dans Hologres.

Syntaxe

Insérez dans une table Hologres une ou plusieurs lignes définies par des expressions de valeur, ou zéro ou plusieurs lignes renvoyées par une requête. L'instruction INSERT utilise la syntaxe suivante :

INSERT INTO <schema>.<table> [( <column> [, ...] )]
   VALUES ( {<expression>}  [, ...] )
   [, ...] | <query>}

Le tableau suivant décrit les paramètres de la syntaxe ci-dessus.

Paramètre

Description

schema

Nom du schéma dans lequel réside la table.

table

Nom de la table dans laquelle insérer les données.

Si vous utilisez Flink pour écrire des données dans Hologres, spécifiez une table parente. Les données sont automatiquement écrites dans ses tables enfants. Dans Hologres V1.3 et versions ultérieures, exécutez l'instruction INSERT conforme à la syntaxe d'utilisation d'un plan fixe pour écrire directement des données dans la table parente. Pour plus d'informations, consultez Accélérer l'exécution SQL avec des plans fixes.

column

Nom de la colonne dans laquelle insérer les données.

Qualifiez le nom de la colonne en utilisant un nom de sous-champ ou un indice de tableau. Si vous insérez des données uniquement dans certains champs d'une colonne composite, les autres champs restent vides (null).

expression

Expression ou valeur attribuée à la colonne correspondante.

query

Instruction SELECT qui fournit les lignes à insérer. Pour plus d'informations sur la syntaxe de l'instruction SELECT, consultez SELECT.

L'instruction INSERT prend uniquement en charge les méthodes d'écriture de données suivantes :

  • INSERT INTO VALUES

    INSERT INTO holo2mysqltest (cate_id, cate_name) VALUES
        (3, 'true'),
        (3, 'fale'),
        (3, 'trxxue'),
        (3, 'x'),
        (4, 'The Dinner Game');
  • INSERT INTO SELECT :

    INSERT INTO test2
    SELECT * FROM test1;

Fonctionnement

Les modes de stockage des tables Hologres incluent le stockage orienté ligne, le stockage orienté colonne et le stockage hybride ligne-colonne. Ces trois modes de stockage partagent le même principe d'écriture.

l'instruction INSERT écrit les données dans les journaux WAL (Write-Ahead Logging) en mode Append Only et met à jour les données dans une table en mémoire en temps réel. Cela garantit que les données peuvent être interrogées immédiatement après leur écriture. Toutefois, les tables en mémoire ont une taille fixe. Lorsqu'une table en mémoire est pleine, Hologres bascule vers une autre table en mémoire et déclenche le processus de vidage asynchrone en arrière-plan pour transférer progressivement les données vers des fichiers. Les fichiers sont stockés dans Apsara Distributed File System. Pendant le processus de vidage, un grand nombre de petits fichiers sont générés. Hologres fusionne ces petits fichiers et les trie en arrière-plan. Ce processus est appelé compaction. Pour accélérer les écritures de données, Hologres écrit les données en arrière-plan, puis les compresse et les trie lors de l'exécution de la compaction asynchrone. Par conséquent, l'utilisation du stockage augmente considérablement pendant le processus d'écriture des données. Une fois les processus d'écriture et de compaction terminés, l'utilisation du stockage diminue.

Les tables orientées ligne, les tables orientées colonne et les tables hybrides ligne-colonne utilisent différents formats d'index pour les tables en mémoire et différents processus pour vider les données vers des fichiers.

  • Tables orientées ligne : les données sont vidées vers des fichiers orientés ligne au format SST.

  • Tables orientées colonne : les données sont vidées vers des fichiers orientés colonne au format ORC.

  • Tables hybrides ligne-colonne : les données sont vidées vers des fichiers orientés ligne au format SST et des fichiers orientés colonne au format ORC. Pendant le processus de vidage, la cohérence des données est assurée. Un message de succès n'est renvoyé que si les données sont vidées à la fois dans les fichiers orientés ligne et dans les fichiers orientés colonne. En cas d'utilisation du stockage hybride ligne-colonne, les données sont stockées en double. Cela augmente les coûts de stockage.

Limites

  • Si vous insérez des données dans une table partitionnée, assurez-vous que les données sont insérées dans une table enfant plutôt que dans la table parente. La valeur du champ de partition dans les données à insérer doit être identique à la valeur du champ de partition de la table enfant.

  • Personnalisez l'ordre dans lequel les noms des colonnes sont listés. Si vous utilisez l'instruction INSERT INTO SELECT pour insérer des données, assurez-vous que les types de données des colonnes requises correspondent aux types de données des colonnes que vous interrogez.

Exemples

Remarque

Hologres V2.1.17 et versions ultérieures prennent en charge Serverless Computing. Pour des scénarios tels que l'importation massive de données hors ligne, les grands travaux ETL et les requêtes volumineuses sur des tables externes, utilisez Serverless Computing pour exécuter ces tâches. Cette fonctionnalité utilise des ressources serverless supplémentaires au lieu des ressources de votre instance, ce qui améliore la stabilité de l'instance et réduit la probabilité d'erreurs de mémoire insuffisante (OOM). Vous n'avez pas besoin de réserver des ressources de calcul supplémentaires pour votre instance et vous êtes facturé uniquement pour les tâches que vous exécutez. Pour plus d'informations sur Serverless Computing, consultez Serverless Computing. Pour obtenir des instructions sur l'utilisation de Serverless Computing, consultez Utiliser Serverless Computing.

  • Insérez des données dans une table interne.

    CREATE TABLE  holotest (
        a int,
        b bigint,
        c bool,
        e decimal(38,10),
        f text,
        g timestamp,
        h timestamptz,
        i jsonb,
        j int[]
    );
    
    -- Optional. We recommend that you use the Serverless Computing feature to import a large amount of data offline and run extract, transform, and load (ETL) jobs.
    SET hg_computing_resource = 'serverless';
    
    -- Import data.
    INSERT INTO holotest VALUES (1,9223372036854775807,false,123.123456789123,'john','2020-01-01 01:01:01.123456',
    '2004-10-19 10:23:54+08','{"a":2}',ARRAY[1, 2, 3, 4]);
    
    -- Reset the configurations. This ensures that serverless computing resources are not used for subsequent SQL statements. 
    RESET hg_computing_resource;
  • Insérez les données de la table a dans la table b.

    CREATE TABLE holotest2(
        a int,
        b bigint,
        c bool);
    
    -- Optional. We recommend that you use the Serverless Computing feature to import a large amount of data offline and run ETL jobs.
    SET hg_computing_resource = 'serverless';
    
    -- Import data.
    INSERT INTO holotest2 (a,b,c) SELECT a,b,c FROM holotest;
    
    -- Reset the configurations. This ensures that serverless computing resources are not used for subsequent SQL statements. 
    RESET hg_computing_resource;
  • Insérez des données dans une table partitionnée.

    -- Create a parent table that does not have a primary key and its child tables in the public schema.
    BEGIN;
    CREATE TABLE public.hologres_parent(
      a text,
      b int,
      c timestamp,
      d text
    )
      PARTITION BY list(a);
    CALL set_table_property('public.hologres_parent', 'orientation', 'column');
    
    CREATE TABLE public.hologres_2022 partition of public.hologres_parent for values in('2022');
    
    CREATE TABLE public.hologres_2021 partition of public.hologres_parent for values in('2021');
    
    CREATE TABLE public.hologres_2020 partition of public.hologres_parent for values in('2020');
    COMMIT;
    
    -- Optional. We recommend that you use the Serverless Computing feature to import a large amount of data offline and run ETL jobs.
    SET hg_computing_resource = 'serverless';
    
    -- Insert data into a child table.
    INSERT INTO public.hologres_2022 values('2022',1,now(),'a')
    
    -- Reset the configurations. This ensures that serverless computing resources are not used for subsequent SQL statements. 
    RESET hg_computing_resource;

FAQ

  • Question 1 : Lorsque j'écris une grande quantité de données, l'utilisation du CPU et de la mémoire de l'instance atteint 100 %. Cela affecte négativement les écritures et les requêtes de données sur l'instance. Que faire ?

    Nous vous recommandons d'utiliser la fonctionnalité Serverless Computing lorsque vous souhaitez écrire une grande quantité de données.

    Remarque

    Hologres V2.1.17 et versions ultérieures prennent en charge la fonctionnalité Serverless Computing. La fonctionnalité Serverless Computing convient aux scénarios dans lesquels vous souhaitez importer une grande quantité de données hors ligne, exécuter des travaux ETL à grande échelle ou interroger une grande quantité de données à l'aide de tables externes. Utilisez des ressources de calcul serverless plutôt que des ressources réservées d'instances pour effectuer les opérations précédentes. Aucune ressource de calcul réservée n'est requise. Cela améliore la stabilité de l'instance et réduit les occurrences d'erreurs de mémoire insuffisante (OOM). Vous êtes facturé uniquement pour les ressources de calcul serverless utilisées par les tâches. Pour plus d'informations sur la fonctionnalité Serverless Computing, consultez Calcul serverless. Pour plus d'informations sur l'utilisation de la fonctionnalité Serverless Computing, consultez Travailler avec le calcul serverless.

  • Question 2 : La métrique indiquant l'utilisation du stockage augmente considérablement lorsque j'écris des données, mais diminue après l'écriture des données. Pourquoi ?

    Selon le principe d'écriture des données, pour accélérer les écritures, Hologres écrit les données en arrière-plan, puis les compresse et les trie lors de l'exécution de la compaction asynchrone. Par conséquent, l'utilisation du stockage augmente considérablement pendant le processus d'écriture des données. Une fois les processus d'écriture et de compaction terminés, l'utilisation du stockage diminue.

  • Question 3 : Pourquoi la latence augmente-t-elle si plusieurs instructions INSERT sont exécutées en parallèle sur la même table ?

    Si l'instruction INSERT est exécutée sur une table sans utiliser de plan fixe, la table est verrouillée. L'exécution parallèle des instructions INSERT augmente la durée d'attente du verrou, ce qui entraîne une augmentation de la latence.

  • Question 4 : Pourquoi le message d'erreur ERROR: no partition of relation "<table_name>" found for row est-il renvoyé lorsque j'écris des données dans une table parente ?

    • Description du problème : le message d'erreur ERROR: no partition of relation "<table_name>" found for row est signalé.

    • Cause : aucune table enfant n'existe.

    • Solution : avant d'écrire des données, créez une table enfant en exécutant l'instruction suivante :

      CREATE TABLE <child_table_name> partition of <parent_table_name> for values in (<value>);
  • Question 5 : Pourquoi le message d'erreur Currently inserting into parent table is not supported est-il renvoyé lors de l'importation de données ?

    • Description du problème : le message d'erreur Currently inserting into parent table is not supported est signalé lors de l'importation de données.

    • Cause : la table dans laquelle vous souhaitez insérer des données est une table parente. Hologres ne vous permet pas d'écrire des données dans une table parente.

    • Solution : créez une table enfant et écrivez-y des données.