Tous les produits
Search
Centre de documentation

Hologres:Hologres: Dynamic Partition Management

Dernière mise à jour :Aug 21, 2026

La fonctionnalité de partitionnement automatique de Hologres automatise la création et la gestion des partitions en fonction des règles que vous définissez pour une table partitionnée, éliminant ainsi le besoin d'une configuration préalable. Cette fonctionnalité déplace également les données éligibles vers le stockage froid, réduisant les coûts de stockage sans affecter les performances des requêtes.

Présentation

La fonctionnalité de partitionnement automatique a évolué au fil des différentes versions de Hologres :

  • Hologres V1.3 : Introduction du partitionnement automatique, qui exécute périodiquement des tâches planifiées pour précréer et supprimer des partitions selon des règles définies par l'utilisateur.

  • Hologres V1.3.37 : Ajout de la prise en charge du stockage hiérarchisé, qui archive automatiquement les données vers le stockage froid afin de réduire les coûts de stockage. Pour plus d'informations, consultez Stockage hiérarchisé.

  • À partir de Hologres V2.1.11, le partitionnement dynamique prend en charge le type Date comme clé de partition.

  • Hologres V2.2 : Ajout de la propriété schd_start_time à la configuration du partitionnement automatique, ce qui vous permet de personnaliser la planification de la création, de la suppression et de l'archivage des partitions.

  • Hologres V3.0.12 : Ajout du paramètre auto_partitioning_time_format pour spécifier le format de date et d'heure de la clé de partition, vous permettant ainsi de créer des partitions au format AAAA-MM-JJ.

Notes

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

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

  • La clé de partition doit être une colonne unique.

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

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

  • Pour le partitionnement dynamique, l'heure de planification (schd_start_time) s'applique uniquement à une table parente, et non à ses tables enfants.

  • Le paramètre auto_partitioning_time_format est immuable. Vous pouvez le spécifier dans l'instruction CREATE TABLE pour une nouvelle table, mais vous ne pouvez pas le modifier pour une table existante.

  • Les noms des tables enfants suivent le format de date spécifié par le paramètre auto_partitioning_time_format. Lorsque vous interrogez une table enfant, vous devez entourer son nom de guillemets doubles. Par exemple : SELECT xxx FROM "tbl_2024_11_22".

Configurer le partitionnement automatique

Syntaxe

Vous pouvez définir les propriétés de partitionnement automatique lors de la création d'une table partitionnée ou pour une table existante.

Utilisation de la clause WITH

  • Configurez les propriétés de partitionnement automatique lors de la création d'une table partitionnée.

    -- Configure automatic partitioning properties when you create a partitioned table.
    CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>)
    WITH (
       auto_partitioning_enable = 'xxx',
       auto_partitioning_time_unit = 'xxx',
       auto_partitioning_time_zone = 'xxx',
       auto_partitioning_num_precreate = 'xxx',
       auto_partitioning_num_retention = 'xxx',
       auto_partitioning_num_hot='xxx',
       -- Note: The auto_partitioning_schd_start_time property is supported in Hologres V2.2 and later.
       auto_partitioning_schd_start_time = 'xxx',
       -- Note: The auto_partitioning_time_format property is supported in Hologres V3.0.12 and later.
       auto_partitioning_time_format = 'xxx'
    );
  • Modifiez les propriétés de partitionnement automatique d'une table partitionnée existante.

    -- Modify automatic partitioning properties.
    ALTER TABLE [<schema_name>.]<table_name> SET (
       auto_partitioning_enable = 'xxx',
       auto_partitioning_time_unit = 'xxx',
       auto_partitioning_time_zone = 'xxx',
       auto_partitioning_num_precreate = 'xxx',
       auto_partitioning_num_retention = 'xxx',
       auto_partitioning_num_hot='xxx',
       -- Note: The auto_partitioning_schd_start_time property is supported in Hologres V2.2 and later.
       auto_partitioning_schd_start_time = 'xxx',
       -- Note: The auto_partitioning_time_format property is supported in Hologres V3.0.12 and later.
       auto_partitioning_time_format = 'xxx'
    );
    

Utilisation de la commande CALL

  • Configurez les propriétés de partitionnement automatique lors de la création d'une table partitionnée.

    -- Configure automatic partitioning properties when you create a partitioned table.
    BEGIN;
    CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>);
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.enable', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_unit', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_zone', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_precreate', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_retention', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_hot', 'xxx');
    -- Note: The auto_partitioning.schd_start_time property is supported in Hologres V2.2 and later.
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');
    -- Note: The auto_partitioning.time_format property is supported in Hologres V3.0.12 and later.
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');
    COMMIT;
  • Modifiez les propriétés de partitionnement automatique d'une table partitionnée existante.

    -- Modify automatic partitioning properties.
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.enable', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_precreate', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_retention', 'xxx');
    -- Note: The auto_partitioning.time_format property is supported in Hologres V3.0.12 and later.
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');

Paramètres

Important

Lorsque vous utilisez la syntaxe CREATE TABLE WITH pour configurer le partitionnement automatique, vous devez remplacer les points (.) dans les noms de propriétés par des traits de soulignement (_). Par exemple, remplacez auto_partitioning.enable par auto_partitioning_enable.

Paramètre

Obligatoire

Description

Mise à jour possible

Version requise

auto_partitioning_enable/auto_partitioning.enable

Non

Indique si le partitionnement automatique est activé. Valeurs possibles :

  • true : active le partitionnement automatique.

  • false (par défaut) : désactive le partitionnement automatique.

Oui

Hologres V1.3 et versions ultérieures

auto_partitioning_time_unit/auto_partitioning.time_unit

Oui

Spécifie l'unité de temps utilisée pour le partitionnement. Valeurs possibles :

  • HOUR

  • DAY

  • MONTH

  • QUARTER

  • YEAR

Par exemple, si vous définissez cette propriété sur DAY, les partitions sont créées et supprimées quotidiennement.

Non

auto_partitioning_time_zone/auto_partitioning.time_zone

Non

Spécifie le fuseau horaire utilisé pour le partitionnement. La valeur par défaut correspond au fuseau horaire de la session actuelle. Une fois cette propriété configurée, la gestion des partitions s'effectue selon le fuseau horaire indiqué.

Exécutez l'instruction SQL suivante pour afficher les fuseaux horaires disponibles. La colonne name du résultat, par exemple Asia/Shanghai, indique une valeur de fuseau horaire valide.

SELECT * FROM pg_timezone_names;

Non

auto_partitioning_num_precreate/auto_partitioning.num_precreate

Non

Spécifie le nombre de partitions à précréer. Valeurs possibles :

  • 0 : aucune partition n'est précréée.

  • Un entier compris entre 1 et 512 : précrée un nombre de partitions futures à partir de l'unité de temps actuelle. Nous recommandons une valeur supérieure ou égale à 2. Valeur par défaut : 4.

Remarque

Par exemple, si la date actuelle est le 10/01/2022 et que vous définissez time_unit = DAY, num_precreate = 3, Hologres crée les partitions pour les dates 10/01/2022, 11/01/2022 et 12/01/2022.

Important

La précréation de partitions influence le comportement de la fonction MAX_PT. Avant d'utiliser cette propriété, vérifiez son impact sur toute application qui dépend de la fonction MAX_PT.

Oui

auto_partitioning_num_retention/auto_partitioning.num_retention

Non

Spécifie le nombre de partitions historiques à conserver. Valeurs possibles :

  • 0 : aucune partition historique n'est conservée.

  • -1 (par défaut) : conserve toutes les partitions historiques.

  • Un entier positif : conserve N partitions historiques. La valeur maximale est 512.

Vous pouvez exécuter set hg_experimental_auto_part_max_maintained_partitions=<value>; pour ajuster le nombre maximal de partitions conservées jusqu'à 8 760.

Remarque

Par exemple, si la date actuelle est le 10/01/2022 et que time_unit = DAY, num_retention = 3, Hologres conserve les partitions pour les dates 09/01/2022, 08/01/2022 et 07/01/2022. Les partitions créées avant le 07/01/2022 sont supprimées.

Oui

auto_partitioning_num_hot/auto_partitioning.num_hot

Non

Spécifie le nombre de partitions chaudes à conserver. Les partitions chaudes correspondent aux partitions stockées dans le stockage chaud. Valeurs possibles :

  • 0 : aucune partition chaude n'est conservée.

  • -1 (par défaut) : conserve toutes les partitions chaudes.

  • Un entier positif : conserve N partitions chaudes. La valeur maximale est 512.

Oui

Hologres V1.3.37 et versions ultérieures

auto_partitioning_schd_start_time/auto_partitioning.schd_start_time

Non

Spécifie une heure personnalisée pour l'exécution de la tâche de partitionnement. Par défaut, cette tâche s'exécute au début de chaque heure si auto_partitioning.time_unit est défini sur HOUR, et à 00:00:01 pour toutes les autres unités de temps.

Utilisez cette propriété pour modifier l'horaire de planification. Pour connaître les formats pris en charge, consultez la page Formats d'heure. Si vous définissez une heure future, la planification prend effet à ce moment précis.

Oui

Hologres V2.2 et versions ultérieures

auto_partitioning_time_format/auto_partitioning.time_format

Non

Spécifie le format de chaîne de la valeur de la clé de partition.

  • Formats par défaut : YYYYMMDDHH24 (HOUR), YYYYMMDD (DAY), YYYYMM (MONTH), YYYYQ (QUARTER) et YYYY (YEAR).

  • Formats facultatifs : YYYY-MM-DD-HH24 (HOUR), YYYY-MM-DD (DAY), YYYY-MM (MONTH) et YYYY-Q (QUARTER).

Non

Hologres V3.0.12 et versions ultérieures

Règles de nommage des tables enfants

Lorsque vous définissez la propriété auto_partitioning.time_unit sur HOUR, DAY, MONTH, QUARTER ou YEAR, Hologres nomme les nouvelles tables enfants en ajoutant un suffixe temporel au nom de la table parente. Le format utilisé est {parent_table}_{time_suffix}. Ce suffixe est généré selon la planification du partitionnement automatique et le modèle de format correspondant à l'unité de temps spécifiée. Le tableau ci-dessous détaille ces correspondances.

Unité de temps

Format du suffixe temporel

Exemple de suffixe

Heure de planification

HOUR

YYYYMMDDHH24

2024112221

Au début de chaque heure. Par exemple : 21:00:01 le 22 novembre 2024.

YYYY-MM-DD-HH24

2024-11-22-21

DAY

YYYYMMDD

20241122

À 00:00:01 chaque jour. Par exemple : 00:00:01 le 22 novembre 2024.

YYYY-MM-DD

2024-11-22

MONTH

YYYYMM

202411

À 00:00:01 le premier jour de chaque mois. Par exemple : 00:00:01 le 1er novembre 2024.

YYYY-MM

2024-11

QUARTER

YYYYQ

20241, 20242, 20243 et 20244 représentent les quatre trimestres de 2024.

À 00:00:01 le premier jour de chaque trimestre. Par exemple : 00:00:01 le 1er janvier 2024.

YYYY-Q

2024-1, 2024-2, 2024-3 et 2024-4 représentent les quatre trimestres de 2024.

YEAR

YYYY

2023 et 2024 représentent les partitions pour les années 2023 et 2024.

À 00:00:01 le premier jour de chaque année. Par exemple : 00:00:01 le 1er janvier 2023.

Exemples

L'exemple suivant crée une table partitionnée par jour. La configuration prévoit la précréation des partitions pour les trois jours suivants, la conservation des partitions historiques pendant deux jours et l'utilisation du fuseau horaire Asia/Shanghai.

Utilisation de la clause WITH

  1. Créez la table partitionnée tbl1.

    -- Create a partitioned table and configure automatic partitioning.
    CREATE TABLE tbl1 (
        c1 TEXT NOT NULL,
        c2 TEXT 
    )
    PARTITION BY LIST (c2)
    WITH (
       auto_partitioning_enable = 'true',
       auto_partitioning_time_unit = 'DAY',
       auto_partitioning_time_zone = 'Asia/Shanghai',
       auto_partitioning_num_precreate = '3',
       auto_partitioning_num_retention = '2'
    );
    
  2. Insérez des données.

    INSERT INTO tbl1 (c1, c2) VALUES ('Data 1', '20231212');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 2', '20231213');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 3', '20231214');
  3. Interrogez les données.

    SELECT * FROM tbl1 WHERE c2='20231212';

    Le résultat suivant est renvoyé :

    c1	     c2
    Data 1   20231212

Utilisation de la commande CALL

  1. Créez la table partitionnée tbl1.

    -- Create a partitioned table and configure automatic partitioning.
    BEGIN;
    CREATE TABLE tbl1 (
        c1 TEXT NOT NULL,
        c2 TEXT 
    )
    PARTITION BY LIST (c2);
    CALL set_table_property ('tbl1', 'auto_partitioning.enable', 'true');
    CALL set_table_property ('tbl1', 'auto_partitioning.time_unit', 'DAY');
    CALL set_table_property ('tbl1', 'auto_partitioning.time_zone', 'Asia/Shanghai');
    CALL set_table_property ('tbl1', 'auto_partitioning.num_precreate', '3');
    CALL set_table_property ('tbl1', 'auto_partitioning.num_retention', '2');
    COMMIT;
  2. Insérez des données.

    INSERT INTO tbl1 (c1, c2) VALUES ('Data 1', '20231212');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 2', '20231213');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 3', '20231214');
  3. Interrogez les données.

    SELECT * FROM tbl1 WHERE c2='20231212';

    Le résultat suivant est renvoyé :

    c1	     c2
    Data 1   20231212

Le tableau ci-dessous décrit la logique de création et de suppression des partitions.

Heure

Événement

Résultat

2023-12-12 09:00:00

Exécutez l'instruction SQL précédente pour créer la table partitionnée.

  • Table parente créée : tbl1

  • Tables enfants créées : tbl1_20231212, tbl1_20231213, tbl1_20231214

2023-12-13 00:00:00

Le système crée automatiquement une table enfant.

  • Table enfant créée : tbl1_20231215

2023-12-14 00:00:00

Le système crée automatiquement une table enfant.

  • Table enfant créée : tbl1_20231216

2023-12-15 00:00:00

Le système crée automatiquement une table enfant et en supprime une ancienne.

  • Table enfant créée : tbl1_20231217

  • Table enfant supprimée : tbl1_20231212

2023-12-16 00:00:00

Le système crée automatiquement une table enfant et en supprime une ancienne.

  • Table enfant créée : tbl1_20231218

  • Table enfant supprimée : tbl1_20231213

Cas d'utilisation

Conserver des tables enfants spécifiques

Par défaut, Hologres crée et supprime automatiquement les tables enfants en fonction des règles de partitionnement automatique configurées, en supprimant celles qui ne sont plus dans la plage de conservation. Toutefois, dans certains scénarios, vous pouvez avoir besoin de conserver des données importantes, par exemple pour analyser l'évolution annuelle des ventes lors des festivals commerciaux annuels dans le secteur du e-commerce. Pour conserver des tables enfants spécifiques, définissez la propriété keep_alive sur ces tables. La syntaxe est la suivante.

  • Syntaxe pour Hologres V2.1 et versions ultérieures :

    -- Retain a child table.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'true');
    -- Stop retaining a child table. After you remove this property, automatic partitioning immediately triggers a cleanup of expired data.
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'false');
    
  • Syntaxe pour toutes les versions :

    -- Retain a child table.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'true');
    -- Stop retaining a child table. After you remove this property, automatic partitioning immediately triggers a cleanup of expired data.
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'false');
    Remarque

    Remplacez table_name par le nom de la table enfant.

Gérer les niveaux de stockage pour les tables partitionnées

Lorsque vous gérez des tables partitionnées, le nivellement du stockage vous aide à équilibrer les coûts et les performances. Par exemple, vous pouvez conserver les N dernières partitions historiques dans un stockage chaud pour des requêtes fréquentes, puis stocker les M partitions plus anciennes dans un stockage froid afin de réduire les coûts. Combinée au partitionnement automatique, cette fonctionnalité vous permet de définir une politique pour supprimer automatiquement les données en dehors de la période de rétention N+M.

Créer une table avec partitionnement automatique

L'exemple suivant crée une table partitionnée par jour. La politique conserve les 7 derniers jours de partitions dans le stockage chaud et les 23 jours précédents dans le stockage froid. Les partitions datant de plus de 30 jours sont automatiquement supprimées.

BEGIN;
CREATE TABLE tbl2(	
  c1 text not null, 
  c2 text
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl2', 'auto_partitioning.enable', 'true');
CALL set_table_property('tbl2', 'auto_partitioning.time_unit', 'DAY');
CALL set_table_property('tbl2', 'auto_partitioning.num_precreate', '3');
CALL set_table_property('tbl2', 'auto_partitioning.num_hot', '7');
CALL set_table_property('tbl2', 'auto_partitioning.num_retention', '30');
COMMIT;

Le résultat est illustré dans la figure suivante.

效果

Modifier la politique de nivellement du stockage

Vous pouvez modifier la politique de stockage chaud en changeant la valeur du paramètre auto_partitioning.num_hot . Notez que si vous modifiez cette politique, Hologres ne déplace pas automatiquement les tables enfants déjà présentes dans le stockage froid vers le stockage chaud. Supposons que la date actuelle soit le 1er juillet 2022 et que vous créiez la table partitionnée suivante.

BEGIN;
CREATE TABLE tbl_p(
  c1 text not null,
  c2 text
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl_p', 'auto_partitioning.enable', 'true');
CALL set_table_property('tbl_p', 'auto_partitioning.time_unit', 'DAY');
CALL set_table_property('tbl_p', 'auto_partitioning.num_precreate', '3');
CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '3');
CALL set_table_property('tbl_p', 'auto_partitioning.num_retention', '10');
COMMIT;

Cela peut entraîner les deux scénarios suivants pour la distribution des données :

  • Scénario 1 : Augmenter le nombre de partitions chaudes

    Pour modifier la politique de partition chaude afin de conserver quatre partitions, exécutez le code suivant :

    CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '4');

    Étant donné que les tables enfants déjà présentes dans le stockage froid ne sont pas automatiquement déplacées vers le stockage chaud, l'effet de la modification est illustré dans la figure suivante.示例

  • Scénario 2 : Réduire le nombre de partitions chaudes

    Si vous devez modifier la politique de partition chaude pour ne conserver que deux partitions, exécutez le code suivant :

    CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '2');

    Les tables enfants présentes dans le stockage froid ne sont pas automatiquement déplacées vers le stockage chaud. Cependant, Hologres déplace les données qui répondent désormais aux critères du stockage froid vers ce niveau de stockage. L'effet de la modification est illustré dans la figure suivante.示例

Convertir une table froide en table avec partitionnement automatique

Pour convertir une table partitionnée depuis le stockage froid vers une table avec partitionnement automatique et déplacer les partitions des sept derniers jours vers le stockage chaud, procédez comme suit.

  1. Préparez les données.

    -- Specify the cold storage tier when you create the table.
    BEGIN;
    CREATE TABLE tbl2(	
      c1 TEXT NOT NULL, 
      c2 TEXT 
    )
    PARTITION BY LIST(c2);
    CALL set_table_property('tbl2', 'storage_mode', 'cold');
    CREATE TABLE tbl2_20230808 PARTITION OF tbl2 FOR VALUES IN('20230808');
    CREATE TABLE tbl2_20230809 PARTITION OF tbl2 FOR VALUES IN('20230809');
    CREATE TABLE tbl2_20230810 PARTITION OF tbl2 FOR VALUES IN('20230810');
    CREATE TABLE tbl2_20230817 PARTITION OF tbl2 FOR VALUES IN('20230817');
    COMMIT;
  2. Convertissez la table en table avec partitionnement automatique et définissez les partitions des sept derniers jours sur le stockage chaud.

    BEGIN;
    CALL set_table_property('tbl2', 'storage_mode', 'hot'); -- Set the parent table to hot storage.
    CALL set_table_property('tbl2_20230810', 'storage_mode', 'cold'); -- Set the child tables that do not need to be moved to hot storage to cold storage.
    CALL set_table_property('tbl2_20230809', 'storage_mode', 'cold');
    CALL set_table_property('tbl2_20230808', 'storage_mode', 'cold');
    CALL set_table_property('tbl2', 'auto_partitioning.enable', 'true');
    CALL set_table_property('tbl2', 'auto_partitioning.time_unit', 'DAY');
    CALL set_table_property('tbl2', 'auto_partitioning.num_precreate', '3');
    CALL set_table_property('tbl2', 'auto_partitioning.num_hot', '7');
    CALL set_table_property('tbl2', 'auto_partitioning.num_retention', '10');
    COMMIT;

Consulter les configurations et planifications du partitionnement automatique

Pour interroger les informations et les configurations des tables avec partitionnement automatique dans la base de données actuelle, exécutez l'instruction SQL suivante.

SELECT
    nsp_name AS schema_name,
    tbl_name AS table_name,
    ENABLE,
    time_unit,
    time_zone,
    num_precreate,
    num_retention,
    b.usename AS create_user,
    cret_time,
    schd_start_time,
    options
FROM
    hologres.hg_partitioning_config AS a
    LEFT JOIN pg_user AS b ON a.cret_user = b.usesysid;

Le tableau suivant décrit les champs du résultat de la requête.

Paramètre

Description

schema_name

Nom du schéma de la table.

table_name

Nom de la table.

ENABLE

Indique si le partitionnement automatique est activé.

time_unit

Unité de temps pour le partitionnement automatique.

time_zone

Fuseau horaire pour le partitionnement automatique.

num_precreate

Nombre de partitions précréées.

num_retention

Nombre de partitions historiques à conserver.

create_user

Utilisateur ayant créé la configuration.

cret_time

Date et heure de création de la configuration.

schd_start_time

Dernière planification d'exécution de la tâche de partitionnement.

Le bloc de code suivant présente un exemple de résultat de requête.

 schema_name |       table_name       | enable | time_unit | time_zone | num_precreate | num_retention |   create_user    |          cret_time          |     schd_start_time      | options
-------------+------------------------+--------+-----------+-----------+---------------+---------------+------------------+-----------------------------+--------------------------+---------
 public      | test_auto_part_daily      | t      | day       | PRC       |             4 |            -1 | 1534141793071340 | 2022-04-01 11:45:33+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_hourly     | t      | hour      | PRC       |             4 |            -1 | 1534141793071340 | 2022-04-01 11:44:39+08 | 2050-01-03 18:00:00+08 | {}
 public      | test_auto_part_weekly     | t      | week      | PRC       |             2 |             3 | 1534141793071340 | 2022-04-01 11:45:43+08 | 2050-01-03 00:00:00+08 | {}
 public      | test_auto_part_monthly    | t      | month     | PRC       |             1 |             0 | 1534141793071340 | 2022-04-01 11:45:55+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_quarterly  | t      | quarter   | PRC       |             2 |            -1 | 1534141793071340 | 2022-04-01 11:46:09+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_yearly     | t      | year      | PRC       |             1 |            -1 | 1534141793071340 | 2022-04-01 11:46:18+08 | 2050-01-01 00:00:00+08 | {}
(6 rows)

Consulter les journaux des tables enfants

Le journal des requêtes (Query Log) n'enregistre pas les journaux relatifs à la création ou à la purge des tables enfants. Vous pouvez exécuter l'instruction SQL suivante pour interroger ces journaux.

SELECT                           
    relname,
    relowner,
    schdtime,
    trigtime,
    status,
    message,
    precreate,
    discard
FROM
    hologres.hg_partitioning_log 

Le tableau suivant décrit les champs du résultat de la requête.

Paramètre

Description

relname

Nom du schéma et de la table au format schema.table.

relowner

Propriétaire de la table partitionnée.

schdtime

Heure planifiée.

trigtime

Heure réelle de déclenchement.

status

Statut.

message

Détails d'exécution ou messages d'erreur.

precreate

Noms des tables enfants créées.

discard

Noms des tables enfants purgées.

Le bloc de code suivant présente un exemple de résultat de requête.

   relname   |     relowner     |        schdtime        |        trigtime        | status  | message |          precreate           |     discard
-----------+------------------+------------------------+------------------------+---------+---------+------------------------------+------------------
 public.tbl1 | 1534141793071340 | 2022-04-01 11:00:00+08 | 2022-04-01 11:24:22+08 | SUCCESS |         | {tbl1_2022032713,tbl1_2022032714} | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 12:00:00+08 | 2022-04-01 12:38:31+08 | SUCCESS |         | {tbl2_2022040112}                 | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 13:00:00+08 | 2022-04-01 13:00:00+08 | SUCCESS |         | {tbl2_2022040113}                 | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 14:00:00+08 | 2022-04-01 14:00:00+08 | SUCCESS |         | {tbl2_2022040114}                 | {tbl2_2022040112}
(4 rows)

FAQ

Activer le partitionnement automatique pour les tables existantes

Pour activer le partitionnement automatique sur une table partitionnée existante, exécutez l'une des instructions SQL suivantes.

-- Example for Hologres V2.1 and later
ALTER TABLE auto_part_old SET (
   auto_partitioning_enable = 'true',
   auto_partitioning_time_unit = 'HOUR',
   auto_partitioning_time_zone = 'PRC',
   auto_partitioning_num_precreate = '4',
   auto_partitioning_num_retention = '-1',
   auto_partitioning_num_hot = '-1'
);
-- Example for all Hologres versions
BEGIN;
CALL set_table_property('auto_part_old', 'auto_partitioning.enable', 'true');
CALL set_table_property('auto_part_old', 'auto_partitioning.time_unit', 'HOUR');
CALL set_table_property('auto_part_old', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_retention', '-1');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_hot', '-1');
COMMIT;
Important

Les propriétés auto_partitioning.time_unit et auto_partitioning.time_zone sont des paramètres fondamentaux du partitionnement automatique. Une fois définies, ces propriétés ne peuvent pas être modifiées.

Nettoyage automatique des tables enfants existantes

Le système détermine s'il doit supprimer une table enfant en fonction de son nom. Si le nom d'une table enfant correspond à la convention de nommage {parent_table}_{time_suffix} , elle est éligible au nettoyage. Dans le cas contraire, elle n'est pas affectée.

Création différée des num_precreate tables enfants

Lorsque vous activez le partitionnement automatique pour la première fois sur une table, la tâche de création ne s'exécute pas instantanément. Le système vérifie toutes les 10 minutes par défaut s'il existe des partitions à créer. Par conséquent, le système crée vos tables enfants dans ce délai de 10 minutes.