Tous les produits
Search
Centre de documentation

Hologres:CREATE PARTITION TABLE

Dernière mise à jour :Aug 11, 2026

Utilisez l'instruction CREATE PARTITION TABLE pour diviser une table en tables filles selon une colonne de clé de partition. Une table parent est partitionnée en différentes tables filles en fonction des valeurs de la clé de partition. Les données contenues dans les tables filles sont accessibles publiquement. Chaque table fille contient les lignes correspondant à une valeur de partition spécifique. Pour interroger les données d'une table partitionnée, vous devez spécifier une partition afin que le système puisse ignorer les partitions non pertinentes, ce qui réduit le volume de données analysées.

Dans cette rubrique, le terme « table parent » désigne une table parent partitionnée et le terme « table fille » désigne une table fille partitionnée.

Quand utiliser les tables partitionnées

Privilégiez les tables partitionnées lorsque les avantages liés à l'élimination des partitions ou aux opérations de données en masse surpassent clairement la surcharge liée à la gestion de plusieurs tables filles.

Utilisez des tables partitionnées lorsque :

  • Le volume quotidien de données pour une seule partition dépasse 100 millions de lignes (pour un partitionnement basé sur la date).

  • Vous devez remplacer ou supprimer en masse les données d'une partition entière à l'aide des commandes TRUNCATE ou DROP. Ces deux opérations s'exécutent instantanément sur une table fille et évitent les analyses complètes.

Évitez les tables partitionnées lorsque :

  • La source de données est un système de base de données. Un nombre excessif de partitions gaspille les ressources d'E/S. Spécifiez plutôt les colonnes de filtre couramment utilisées comme clé de segment pour activer l'accélération des requêtes basée sur l'index.

  • Le volume quotidien de données est inférieur à 100 millions de lignes par partition. Les petites partitions n'offrent qu'une accélération négligeable des requêtes. Optez pour une granularité plus grossière.

Gardez à l'esprit que chaque table fille est stockée sous forme d'un ensemble distinct de fichiers et équivaut à une table non partitionnée dans le stockage des métadonnées. Un grand nombre de tables filles augmente le volume de métadonnées et génère de nombreux petits fichiers et fragments.

Limitations

  • Les données doivent être écrites dans une table fille, et non directement dans la table parent.

    Realtime Compute for Apache Flink permet d'écrire des données dans une table parent en temps réel. Pour plus de détails, consultez la section Écrire des données dans une table Hologres sink partitionnée en temps réel .
  • Hologres prend uniquement en charge le partitionnement par liste (PARTITION BY LIST).

  • La clé de partition doit correspondre à une seule colonne.

  • Chaque règle de partitionnement ne peut servir à créer qu'une seule table partitionnée.

  • Si la table parent possède une clé primaire, la colonne de clé de partition doit faire partie de cette clé primaire.

Créer une table partitionnée

Une table partitionnée se compose d'une table parent (qui définit le schéma et la règle de partition) et d'une ou plusieurs tables filles (chacune couvrant des valeurs de partition spécifiques). Vous devez créer les tables filles avant de pouvoir y écrire des données.

Vous pouvez également activer le partitionnement dynamique pour permettre à Hologres de créer automatiquement des tables filles selon les règles que vous configurez.

Syntaxe

-- Create the parent table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name> (
  {
    <column_name> <column_type> [<column_constraints> [, ...]]
    | <table_constraints>
    [, ...]
  }
)
PARTITION BY LIST (<column_name>);

-- Create a child table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>
  PARTITION OF <parent_table>
  FOR VALUES IN (<string_literal>);

Paramètres

Paramètre Description
IF NOT EXISTS Supprime l'erreur si une table portant le même nom existe déjà.
schema_name Schéma contenant la table. Omettez ce paramètre si les tables parent et fille résident dans le même schéma ; il est requis pour les créations inter-schémas.
table_name Nom de la table parent ou de la table fille à créer.
column_name Nom de la colonne.
column_type Type de données de la colonne.
column_constraints Contraintes au niveau de la colonne (par exemple, NOT NULL).
table_constraints Contraintes au niveau de la table (par exemple, PRIMARY KEY).
parent_table Nom de la table parent à laquelle appartient la table fille.
string_literal Valeur de la clé de partition pour la table fille.

Types de données pris en charge pour les colonnes de clé de partition :

Type de données Versions prises en charge
TEXT Toutes les versions
VARCHAR Toutes les versions
INT Toutes les versions
DATE Hologres V1.3.22 et versions ultérieures

Exemples

Les exemples suivants créent une table de faits partitionnée où chaque table fille contient les données d'une journée. Ce modèle est courant lorsque vous devez tronquer ou remplacer efficacement une journée complète de données.

Exemple 1 : Table parent sans clé primaire

Les deux variantes de syntaxe sont équivalentes. Privilégiez la syntaxe V2.1+ si votre version de Hologres la prend en charge.

Hologres V2.1 et versions ultérieures :

BEGIN;
CREATE TABLE public.hologres_parent (
    a TEXT,
    b INT,
    c TIMESTAMP,
    d TEXT
)
PARTITION BY LIST (a)
WITH (orientation = 'column');
CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN ('v1');
CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN ('v2');
CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN ('v3');
COMMIT;

Toutes les versions de Hologres :

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_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN('v2');
CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN('v3');
COMMIT;

Exemple 2 : Table parent avec clé primaire

Lorsqu'une clé primaire est définie, la colonne de clé de partition (ds dans cet exemple) doit faire partie de la clé primaire.

Hologres V2.1 et versions ultérieures :

BEGIN;
CREATE TABLE public.hologres_parent_2 (
    a TEXT,
    b INT,
    c TIMESTAMP,
    d TEXT,
    ds TEXT,
    PRIMARY KEY (ds, b)
)
PARTITION BY LIST (ds)
WITH (orientation = 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201217');
COMMIT;

Toutes les versions de Hologres :

BEGIN;
CREATE TABLE public.hologres_parent_2(
  a TEXT,
  b INT,
  c TIMESTAMP,
  d TEXT,
  ds TEXT,
  PRIMARY KEY (ds, b)
)
PARTITION BY LIST(ds);
CALL set_table_property('public.hologres_parent_2', 'orientation', 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201217');
COMMIT;

Lister les tables filles

Listez toutes les tables filles d'une table parent à l'aide de HoloWeb ou de l'instruction SQL suivante. Remplacez parent_table_name par le nom réel de la table parent.

SELECT
    nmsp_parent.nspname AS parent_schema,
    parent.relname      AS parent,
    nmsp_child.nspname  AS child_schema,
    child.relname       AS child
FROM pg_inherits
    JOIN pg_class parent          ON pg_inherits.inhparent = parent.oid
    JOIN pg_class child           ON pg_inherits.inhrelid  = child.oid
    JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
    JOIN pg_namespace nmsp_child  ON nmsp_child.oid  = child.relnamespace
WHERE parent.relname = 'parent_table_name';

Règles d'héritage des propriétés

Lorsque vous créez une table fille à l'aide de CREATE TABLE ... PARTITION OF, celle-ci hérite de la plupart des propriétés de la table parent. Le tableau ci-dessous indique quelles propriétés doivent correspondre et lesquelles peuvent différer.

  • Doivent correspondre : L'attachement d'une table fille avec une valeur différente pour ces propriétés renvoie une erreur. Pour éviter cela, créez les tables filles à l'aide de la commande CREATE TABLE LIKE, qui copie les paramètres de propriété du parent.

  • Peuvent différer : Si elles ne sont pas explicitement définies sur la table fille, celle-ci hérite de la valeur du parent. Si elles sont explicitement définies, la valeur de la table fille est appliquée.

  • Doivent inclure les colonnes indexées du parent : Les colonnes indexées de la table fille doivent constituer un sur-ensemble de celles du parent. Des colonnes indexées supplémentaires peuvent être ajoutées à la table fille.

Catégorie Propriété Héritée du parent Règle lors de l'attachement
Propriété de la table orientation Oui Doit correspondre
Propriété de la table table_group Oui Doit correspondre
Propriété de la table time_to_live_in_seconds Oui Peut différer
Index Clé primaire Oui Doit correspondre
Index distribution_key Oui Doit correspondre
Index clustering_key Oui Doit correspondre
Index event_time_column Oui Doit correspondre
Index bitmap_columns Oui Peut différer
Index dictionary_encoding_columns Oui Peut différer
Index binlog_level Oui Doit correspondre
Index proxima_vectors Oui Doit correspondre
Contrainte de colonne nullable (NOT NULL) Oui Doit correspondre
Contrainte de colonne Valeur par défaut Oui Doit correspondre

Étapes suivantes