Tous les produits
Search
Centre de documentation

Hologres:CREATE LOGICAL PARTITION TABLE

Dernière mise à jour :Sep 01, 2026

Les tables de partitionnement logique assurent une gestion automatique du cycle de vie des partitions : Hologres crée les partitions à l'arrivée des données et les supprime lorsqu'elles deviennent vides. La table parente est une table physique ; chaque partition est un concept logique, et non un objet physique distinct.

Utilisez des tables de partitionnement logique lorsque :

  • Votre jeu de données est volumineux et basé sur des séries temporelles ou des catégories (journaux quotidiens, flux d'événements, données par locataire).

  • Vous souhaitez que Hologres gère automatiquement la création et le nettoyage des partitions, sans surcharge liée aux instructions DDL.

  • Vous souhaitez mettre en place une expiration par partition, un stockage hiérarchisé (données chaudes/froides) ou une génération sélective de Binlog.

Privilégiez les tables de partitionnement physique si vous remplacez fréquemment des partitions entières via TRUNCATE ou INSERT OVERWRITE. Ces opérations sont plus rapides sur les partitions physiques, car elles évitent les suppressions à grande échelle.

Les tables de partitionnement logique nécessitent Hologres 3.1 ou une version ultérieure.

Limitations

  • Seul le partitionnement LIST est pris en charge. Les types RANGE et HASH ne sont pas pris en charge.

  • Une clé de partition peut inclure une ou deux colonnes.

  • Types de données pris en charge pour les clés de partition : INT, TEXT, VARCHAR, DATE, TIMESTAMP et TIMESTAMPTZ.

  • Les clés de partition doivent être définies comme NOT NULL.

  • La clé de partition d'une table de partitionnement logique prend en charge les colonnes générées.

  • Une seule table de partitionnement logique prend en charge jusqu'à 5 200 partitions. Une base de données prend en charge un total maximal de 200 000 partitions logiques.

Limites liées à l'importation par lots

Scénario Seuil Comportement
Tâche d'importation par lots unique > 50 partitions Erreur : Bulkload partition count exceed limit, partition count is xxx, limit is xxx
Écritures concurrentes Fixed Plan (par table) > 30 partitions Limitation de débit — Hologres attend quelques secondes, puis soumet automatiquement la requête
Écritures concurrentes Fixed Plan (par table) > 100 partitions Erreur : mem partition count exceed reject limit

Limites des partitions non persistantes (par nœud worker)

Une partition non persistante est une partition écrite en mémoire mais pas encore vidée sur le disque. Le nombre est calculé comme suit : partitions utilisateur × nombre de shards × nombre d'index par table. Le nombre de shards inclut les shards de réplication.

Seuil Comportement
> 500 partitions non persistantes Limitation de débit — Hologres attend quelques secondes, puis soumet automatiquement la requête
> 5 000 partitions non persistantes Erreur : mem partition count exceed reject limit

Remarques d'utilisation

  • Granularité des partitions : Évitez les partitions contenant moins de 100 millions de lignes. Des partitions trop fines réduisent les avantages de l'accélération des requêtes et augmentent le risque d'accumulation de petits fichiers. Par exemple, un partitionnement par jour est raisonnable pour les charges de travail à fort volume ; un partitionnement par ID client ou par intervalles inférieurs à une heure est généralement trop fin.

  • Modèle d'écriture : Écrivez les données dans les partitions de manière séquentielle. Évitez d'écrire simultanément dans de nombreuses partitions.

  • Qualité des données : Assurez-vous que les données entrantes sont propres. Des données erronées, telles que des horodatages qui ne correspondent pas à minuit lors de l'utilisation de partitions quotidiennes, peuvent entraîner une croissance inattendue du nombre de partitions.

  • Cycle de vie des partitions : Ne créez ni ne supprimez manuellement les partitions. Les partitions n'existent que lorsqu'elles contiennent des données. Lorsque toutes les données d'une partition sont supprimées, Hologres supprime la partition de manière asynchrone.

  • TRUNCATE et Binlog : L'instruction TRUNCATE ne génère pas de Binlog. Pour désactiver la génération de Binlog pour une session, exécutez SET hg_experimental_generate_binlog = off avant d'utiliser TRUNCATE.

  • Modification des propriétés de table : Pour modifier les propriétés d'une table de partitionnement logique, utilisez la syntaxe REBUILD. Le backend divise automatiquement la tâche et l'exécute séquentiellement par partition. Pour les opérations de redistribution (par exemple, déplacer la table vers un autre groupe de tables), n'utilisez pas la procédure stockée HG_MOVE_TABLE_TO_TABLE_GROUP . Consultez le Guide d'opération pour les groupes de tables et le nombre de shards pour connaître la méthode appropriée.

Créer une table de partitionnement logique

Syntaxe

-- Create a logical partition parent table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name> ([
  {
   <column_name> <column_type> [ <column_constraints>, [...]]
   | <table_constraints>
   [, ...]
  }
])
LOGICAL PARTITION BY LIST(<partition_column_1> [, <partition_column_2>])
[WITH(
  <property_name> = <property_value>
 [, ...]
)];
Les partitions sont créées et supprimées automatiquement en fonction des données. Ne créez ni ne supprimez manuellement les partitions.

Paramètres

Paramètre Description
schema_name Le schéma qui contient la table. Omettez ce paramètre si les tables parentes et enfants se trouvent dans le même schéma.
table_name Le nom de la table de partitionnement parente.
column_name Le nom d'une colonne.
column_type Le type de données de la colonne.
column_constraints Contraintes au niveau de la colonne.
table_constraints Contraintes au niveau de la table.
partition_column La clé de partition. Spécifiez une ou deux colonnes.
property_name Le nom d'une propriété de table.
property_value La valeur à attribuer à la propriété de table.

Propriétés de table

Ces propriétés sont définies sur la table parente et s'appliquent à toutes les partitions. Étant donné que la table parente est une table physique et que les partitions sont des concepts logiques, vous ne pouvez pas définir ces propriétés directement sur des partitions individuelles.

Propriété Valeur par défaut Valeurs valides Notes
partition_time_format Aucune Voir les notes Requis uniquement lorsque la clé de partition est de type TEXT. Pris en charge depuis Hologres V4.2. Valeurs valides :
  • YYYYMMDDHH24 : granularité horaire, par exemple 2024112221.

  • YYYYMMDD : granularité quotidienne, par exemple 20241122.

  • YYYYMM : granularité mensuelle, par exemple 202411.

  • YYYYQ : granularité trimestrielle, par exemple 20241, 20242, 20243, 20244.

  • YYYY : granularité annuelle, par exemple 2023, 2024.

  • YYYY-MM-DD-HH24 : horaire avec délimiteurs, par exemple 2024-11-22-21.

  • YYYY-MM-DD : quotidien avec délimiteurs, par exemple 2024-11-22.

  • YYYY-MM : mensuel avec délimiteurs, par exemple 2024-11.

  • YYYY-Q : trimestriel avec délimiteurs, par exemple 2024-1.

Remarque

Définissez cette propriété avant partition_expiration_time et partition_keep_hot_window dans la clause WITH.

partition_expiration_time Aucune (pas de nettoyage automatique) '30 day', '12 month', etc. Utilisez la même unité de temps que votre clé de partition.
Remarque
  • Seules les clés de partition à colonne unique sont prises en charge.

  • Pour les clés de partition de type temporel (DATE, TIMESTAMP, TIMESTAMPTZ), aucune configuration de partition_time_format n'est nécessaire.

  • Hologres V4.2 et versions ultérieures prennent en charge les clés de partition TEXT. Définissez partition_time_format pour spécifier comment les valeurs TEXT encodent le temps.

partition_keep_hot_window Toutes les données restent chaudes '30 day', '12 month', etc. Les données en dehors de cette fenêtre sont déplacées vers le stockage froid de manière asynchrone. Voir [Stockage hiérarchisé des données](t2274113.xdita#).
Remarque
  • Seules les clés de partition à colonne unique sont prises en charge.

  • Pour les clés de partition de type temporel (DATE, TIMESTAMP, TIMESTAMPTZ), aucune configuration de partition_time_format n'est nécessaire.

  • Hologres V4.2 et versions ultérieures prennent en charge les clés de partition TEXT. Définissez partition_time_format pour spécifier comment les valeurs TEXT encodent le temps.

partition_require_filter FALSE TRUE, FALSE Si la valeur est TRUE, les requêtes sur la table parente doivent inclure une condition de filtre de partition. Les requêtes sans filtre échouent.
binlog_level 'none' 'none', 'replica' Active ou désactive Binlog pour la table parente. Voir [S'abonner à la journalisation binaire Hologres](t2037122.xdita#).
binlog_ttl 2592000 (30 jours, en secondes) Entier (secondes) La durée de conservation (TTL) des données Binlog.
partition_generate_binlog_window Aucune (toutes les données génèrent un Binlog) '3 day', '12 hour', etc. Seules les données des partitions créées dans la fenêtre spécifiée génèrent un Binlog. S'applique uniquement aux tables dotées d'une clé de partition unique basée sur le temps.
Autres propriétés (index, orientation, etc.) — — Les tables de partitionnement logique prennent en charge distribution_key, clustering_key, orientation, time_to_live_in_seconds et d'autres propriétés standard. Voir [CREATE TABLE](t1881820.xdita#section-n50-wsw-wnc) et le [Guide d'optimisation de la création de tables basé sur les scénarios](t2351175.xdita#). Les propriétés de gestion dynamique des partitions issues des tables de partitionnement physique ne sont pas prises en charge. Voir [Gestion dynamique des partitions](t2606189.xdita#).

Propriétés de partition

Ces propriétés s'appliquent aux partitions individuelles. Modifiez-les à l'aide de la commande ALTER LOGICAL PARTITION TABLE.

Propriété Valeur par défaut Valeurs valides Comportement
keep_alive FALSE TRUE, FALSE Si TRUE, la partition n'est jamais nettoyée automatiquement, même si partition_expiration_time est définie sur la table parente.
storage_mode Non défini (suit la valeur partition_keep_hot_window de la table parente) 'hot', 'cold' Remplace la valeur partition_keep_hot_window de la table parente pour cette partition.
generate_binlog Non défini (suit la valeur partition_generate_binlog_window de la table parente) 'on', 'off' Remplace la valeur partition_generate_binlog_window de la table parente pour cette partition.

Exemples

Exemple 1 : Colonne régulière comme clé de partition

CREATE TABLE public.hologres_logical_parent_1 (
    a TEXT,
    b INT,
    c TIMESTAMP,
    ds DATE NOT NULL,
    PRIMARY KEY (b, ds))
LOGICAL PARTITION BY LIST (ds)
WITH (
    orientation = 'column',
    distribution_key = 'b',
    partition_expiration_time = '30 day',
    partition_keep_hot_window = '15 day',
    partition_require_filter = TRUE,
    binlog_level = 'replica',
    partition_generate_binlog_window = '3 day'
);

Exemple 2 : Colonne générée comme clé de partition

La clé de partition ds est dérivée de la colonne c à l'aide de la fonction date_trunc. Cela affecte automatiquement chaque ligne à la partition quotidienne correcte sans que l'appelant n'ait à calculer la valeur de partition. Pour plus d'informations, consultez les colonnes générées Hologres.

CREATE TABLE public.hologres_logical_parent_2 (
    a TEXT,
    b INT,
    c TIMESTAMP,
    ds TIMESTAMP GENERATED ALWAYS AS (date_trunc('day', c)) STORED NOT NULL,
    PRIMARY KEY (b, ds))
LOGICAL PARTITION BY LIST (ds)
WITH (
    orientation = 'column',
    distribution_key = 'b',
    partition_expiration_time = '30 day',
    partition_keep_hot_window = '15 day',
    partition_require_filter = TRUE,
    binlog_level = 'replica',
    partition_generate_binlog_window = '3 day'
);

Exemple 3 : Deux colonnes comme clés de partition

CREATE TABLE public.hologres_logical_parent_3 (
    a TEXT,
    b INT,
    yy TEXT NOT NULL,
    mm TEXT NOT NULL)
LOGICAL PARTITION BY LIST (yy, mm)
WITH (
    orientation = 'column',
    distribution_key = 'b',
    partition_require_filter = TRUE
);

Gérer les données

Granularité du verrouillage

Opération Type de verrou Notes
Importation par lots ou mise à jour pour une partition spécifiée ; INSERT OVERWRITE ; TRUNCATE pour une partition spécifiée Verrou de partition Lors de l'exécution à l'aide des ressources d'une instance locale ou d'un groupe de calcul : verrou de partition. Les autres partitions restent inchangées. Lors de l'exécution à l'aide des ressources Serverless : verrou de table avant la version V4.2 ; verrou de partition à partir de la version V4.2.
Importation par lots ou mise à jour sans spécifier de partition ; TRUNCATE sans spécifier de partition ; toute instruction DELETE Verrou de table Les autres opérations de gestion des données attendent la libération du verrou.
Écriture, mise à jour ou suppression via Fixed Plan Verrou de ligne Entre en conflit avec l'importation par lots, la mise à jour ou la suppression. N'entre pas en conflit avec d'autres opérations Fixed Plan.

Choisir une méthode de nettoyage des données

Méthode Quand l'utiliser Type de verrou Notes
DELETE Supprimer sélectivement les lignes correspondant à une condition Verrou de table Plus lent pour les grands jeux de données
TRUNCATE (au niveau de la partition) Supprimer toutes les données d'une ou plusieurs partitions spécifiques Verrou de partition Plus rapide que DELETE ; ne génère pas de Binlog ; non pris en charge dans le DML du groupe de calcul — utilisez le groupe de calcul leader
TRUNCATE (au niveau de la table) Supprimer toutes les données de la table parente Verrou de table Le plus rapide pour un nettoyage complet ; ne génère pas de Binlog
INSERT OVERWRITE Remplacer toutes les données d'une partition par de nouvelles données Verrou de partition (par partition) Synchrone ; si plusieurs partitions sont spécifiées, elles sont traitées en parallèle — divisez-les en tâches séquentielles pour réduire l'utilisation du CPU et de la mémoire

Écrire dans la table parente

Les opérations d'écriture, de mise à jour et de nettoyage des données fonctionnent de la même manière que pour les tables standard. Hologres crée ou supprime automatiquement les partitions en fonction des données.

-- Write data; Hologres creates partitions automatically
INSERT INTO public.hologres_logical_parent_2
VALUES
    ('a', 1, '2025-03-16 10:00:00'),
    ('b', 2, '2025-03-17 11:00:00'),
    ('c', 3, '2025-03-18 12:00:00'),
    ('d', 4, '2025-03-19 13:00:00'),
    ('e', 5, '2025-03-20 14:00:00');
-- Delete rows (table lock)
DELETE FROM public.hologres_logical_parent_2 WHERE ds = '2025-03-20';
-- Truncate the entire parent table (no Binlog generated)
SET hg_experimental_generate_binlog = off;
TRUNCATE public.hologres_logical_parent_2;

Écrire dans une partition spécifique

-- Import into a specified partition
INSERT INTO public.hologres_logical_parent_1
PARTITION (ds = '2025-03-16')
VALUES
    ('a', 1, '2025-03-16 10:00:00', '2025-03-16');
-- Rows that don't match the specified partition are silently skipped (no error)
INSERT INTO public.hologres_logical_parent_1
PARTITION (ds = '2025-03-16')
VALUES
    ('a', 1, '2025-03-16 10:00:00', '2025-03-16'),
    ('b', 2, '2025-03-17 11:00:00', '2025-03-17');

Nettoyer les données de partition

-- Delete rows from specific partitions (table lock)
DELETE FROM public.hologres_logical_parent_1 WHERE ds = '2025-03-16' or ds = '2025-03-17';
-- Truncate specific partitions (partition lock, no Binlog generated)
-- Not supported in compute group DML; run in the leader compute group.
SET hg_experimental_generate_binlog = off;
TRUNCATE public.hologres_logical_parent_1 PARTITION (ds = '2025-03-16') PARTITION (ds = '2025-03-17');

Écraser une partition

Hologres 3.1 et versions ultérieures prennent en charge la syntaxe native INSERT OVERWRITE pour les tables de partitionnement logique. Voir INSERT OVERWRITE.

Important

INSERT OVERWRITE est synchrone. Si vous spécifiez plusieurs partitions logiques, Hologres les traite en parallèle, ce qui augmente l'utilisation du CPU et de la mémoire. Divisez les écrasements multi-partitions en tâches séquentielles.

Interroger les tables de partitionnement logique

-- Query with a partition filter condition
SELECT * FROM public.hologres_logical_parent_1 WHERE ds = '2025-03-16';
-- Query without a partition filter condition
-- Requires partition_require_filter = FALSE on the parent table
SELECT * FROM public.hologres_logical_parent_1;

Si partition_require_filter est défini sur TRUE, les requêtes sans condition de filtre de partition échouent.

Afficher les métadonnées

Hologres fournit des tables système et des fonctions pour interroger les métadonnées des tables de partitionnement logique.

Objet Objectif
hologres.hg_table_properties Afficher les propriétés de la table
hologres.hg_list_logical_partition('<table_name>') Lister toutes les partitions d'une table de partitionnement logique
hologres.hg_logical_partitioned_table_properties Lister toutes les partitions logiques et leurs propriétés dans l'instance actuelle
hologres.hg_partition_file_status('<table_name>') Interroger les tailles de stockage chaud et froid ainsi que le nombre de fichiers pour toutes les partitions (Hologres 3.1.4 et versions ultérieures)

Vérifier si une table est une table de partitionnement logique :

SELECT *
FROM hologres.hg_table_properties
WHERE
    table_name = '<table_name>'
    AND property_key = 'is_logical_partitioned_table'
    AND property_value = 'true';

Lister toutes les partitions :

SELECT * FROM hologres.hg_list_logical_partition('<schema_name>.<table_name>');

Lister les configurations des propriétés de partition :

Cette requête renvoie uniquement les configurations qui diffèrent entre les partitions enfants et la table parente. Un résultat vide signifie qu'aucune substitution au niveau de la partition n'est définie.

SELECT *
FROM hologres.hg_logical_partitioned_table_properties
WHERE
    table_namespace = '<schema_name>'
    AND table_name = '<table_name>'
ORDER BY partition DESC;

Afficher les tailles de stockage chaud et froid :

SELECT * FROM hologres.hg_partition_file_status('<schema_name>.<table_name>');

Les partitions logiques sont également compatibles avec les tables système standard de Hologres.

Afficher le DDL d'une table de partitionnement logique :

SELECT hg_dump_script('<schema_name>.<table_name>');

Afficher les propriétés de la table parente :

SELECT *
FROM hologres.hg_table_properties
WHERE
    table_namespace = '<schema_name>'
    AND table_name = '<table_name>';

Afficher la plus grande partition :

Étant donné que le nettoyage des données et celui des partitions sont asynchrones, MAX_PT peut renvoyer des résultats incorrects si la plus grande partition a été vidée. Utilisez INSERT OVERWRITE pour supprimer les données afin d'éviter ce problème.
SELECT MAX_PT('<schema_name>.<table_name>');

Vérifier si une table de partition dépasse la limite de partitions :

CREATE OR REPLACE PROCEDURE check_logical_partition_count()
LANGUAGE 'plpgsql'
AS $$
DECLARE
    table_max_partition_count bigint;
    table_partition_count bigint;
    exceeded_logical_partition_limit boolean;
    row_record record;
BEGIN
    SELECT substring(result FROM '^[^:]*: (\d+)')::INTEGER INTO table_max_partition_count
        FROM hg_admin_command('get_global_flag', 'flag=table_max_partition_count') AS result;

    RAISE NOTICE 'table_max_partition_count=%', table_max_partition_count;

    FOR row_record IN
        SELECT table_namespace, table_name
            FROM hologres.hg_table_properties
            WHERE property_key = 'is_logical_partitioned_table' AND (property_value = 'true' OR property_value = 't')
    LOOP
        SELECT count(*) INTO table_partition_count
            FROM hologres.hg_list_logical_partition(quote_ident(row_record.table_namespace) || '.' || quote_ident(row_record.table_name));
        IF table_partition_count > table_max_partition_count THEN
            RAISE NOTICE 'table %.% partition count exceeds limit (% > %)', row_record.table_namespace, row_record.table_name, table_partition_count, table_max_partition_count;
        END IF;
    END LOOP;
END;
$$;

CALL check_logical_partition_count();

Étapes suivantes