Tous les produits
Search
Centre de documentation

Hologres:Subscribe to Hologres binlogs

Dernière mise à jour :Aug 11, 2026

Hologres propose une fonctionnalité de journalisation binaire (binlog) pour capturer les événements de base de données. Exploitez ces événements pour la réplication des données, la synchronisation ou comme flux de messages destiné aux consommateurs en aval. La consommation des journaux binaires de Hologres améliore la réutilisation des données et réduit la latence du traitement de bout en bout. Cette rubrique explique comment s'abonner aux journaux binaires de Hologres et réaliser les opérations associées.

Journaux binaires

À l'instar des bases de données traditionnelles telles que MySQL, Hologres prend en charge les journaux binaires pour enregistrer tous les événements de modification des données. Les journaux binaires de Hologres permettent de mettre en œuvre la réplication et la synchronisation des données. Toutefois, ils sont généralement réservés à la synchronisation, contrairement aux journaux binaires des bases de données classiques qui servent également à des scénarios de haute disponibilité, tels que la synchronisation entre instances primaire et réplique ou la récupération des données. Leurs implémentations diffèrent donc sur plusieurs aspects clés :

  • Les journaux binaires de Hologres n'enregistrent pas les opérations DDL.

  • La configuration des journaux binaires est flexible et spécifique à chaque table. Activez-les ou désactivez-les au cas par cas et définissez un délai de conservation (TTL) distinct pour chaque table.

  • En tant qu'entrepôt de données en temps réel distribué, Hologres utilise un système de journaux binaires distribué.

  • L'interrogation des journaux binaires de Hologres est simple.

Dans les scénarios Big Data, Flink peut consommer directement les journaux binaires de Hologres. Comparée à l'architecture traditionnelle en couches d'entrepôt de données, la combinaison de Flink et des journaux binaires de Hologres permet de mettre en place une architecture entièrement pilotée par les événements. Cette approche assure un traitement en temps réel depuis le magasin de données opérationnelles (ODS) vers la couche de détail des données (DWD), puis de la couche DWD vers la couche de services de données (DWS). Elle favorise la gouvernance des données grâce à cette structuration en couches tout en unifiant le stockage, en améliorant la réutilisation des données et en réduisant la latence de traitement de bout en bout. Il s'agit d'une solution complète d'entrepôt de données en temps réel.

Limites

Tenez compte des limites suivantes lors de l'abonnement aux journaux binaires de Hologres :

  • Seules les versions Hologres V0.9 et ultérieures prennent en charge l'abonnement aux journaux binaires. Si votre instance exécute une version antérieure, rejoignez le groupe de support en ligne sur DingTalk. Pour plus de détails, consultez la rubrique Comment obtenir davantage de support en ligne ?.

  • Sur les versions Hologres V0.9 et V0.10, il est impossible d'activer les journaux binaires sur des tables existantes en modifiant leurs propriétés. Vous devez recréer la table. À partir de la version V1.1, vous pouvez activer les journaux binaires à la demande.

  • Avant les versions Hologres V1.3.14 et V1.1.82, seul un Superuser pouvait consommer le journal binaire. L'utilisation d'un compte disposant de privilèges restreints entraînait l'erreur permission denied for table hg_replication_slot_properties. À partir des versions V1.3.14 et V1.1.82, un compte a uniquement besoin de l'autorisation SELECT sur la table pour consommer le journal binaire avec Flink. Pour consommer le journal binaire via JDBC, le compte doit disposer du rôle Replication Role.

  • Hologres prend en charge les journaux binaires au niveau de la table, aussi bien pour les tables orientées lignes que pour les tables orientées colonnes. Le tableau suivant répertorie les méthodes de consommation prises en charge.

    |
    **Catégorie Flink**
    |
    **Table orientée lignes**
    |
    **Table orientée colonnes**
    |
    **Table hybride lignes-colonnes (pris en charge à partir de la version V1.1)**
    | | --- | --- | --- | --- | |
    Blink
    |
    Pris en charge
    |
    Pris en charge
    |
    Pris en charge
    | |
    Realtime Compute for Apache Flink
    |
    Pris en charge
    |
    Pris en charge
    |
    Pris en charge
    | |
    Apache Flink
    |
    Non pris en charge
    |
    Non pris en charge
    |
    Non pris en charge
    | |
    JDBC
    |
    Pris en charge à partir de la version V1.1
    |
    Pris en charge à partir de la version V1.1
    |
    Pris en charge à partir de la version V1.1
    |







































  • Lors de la consommation des journaux binaires de Hologres, Blink ne prend pas en charge le type de données TIMESTAMP. Utilisez le type TIMESTAMPTZ lors de la création des tables dans Hologres. D'autres types spéciaux, tels que SMALLINT, ne sont pas non plus pris en charge.

  • Vous ne pouvez pas consommer les journaux binaires de la table parente d'une table partitionnée. Utilisez une table enfant ou une table classique (non partitionnée). À partir de Hologres V1.3.24, vous pouvez modifier le TTL du journal binaire d'une table enfant à la demande. Si vous ne spécifiez pas explicitement de TTL pour le journal binaire d'une table enfant, celle-ci hérite du TTL de sa table parente. Notez que le TTL du journal binaire n'est pas un minuteur précis. Le système ne garantit pas la suppression immédiate du journal binaire dès son expiration. La suppression intervient quelque temps après l'expiration.

  • Pour les charges de travail intensives en écriture, l'activation des journaux binaires sur une table orientée colonnes engendre théoriquement plus de surcharge que sur une table orientée lignes. Par conséquent, privilégiez une table orientée lignes lorsque vous activez les journaux binaires. Si la table sert également à des requêtes OLAP, optez pour le format de stockage hybride lignes-colonnes. Pour plus d'informations, consultez la rubrique Formats de stockage des tables.

  • Seules les tables internes de Hologres prennent en charge les journaux binaires. Les tables externes ne les prennent pas en charge.

Format et principes des journaux binaires

Un enregistrement de journal binaire contient des champs système et les colonnes de la table utilisateur. Le tableau ci-dessous décrit ces champs.

Nom du champ

Type

Description

hg_binlog_lsn

BIGINT

Champ système du journal binaire représentant le numéro de séquence du journal (LSN). La valeur augmente de manière monotone, mais n'est pas garantie continue au sein d'un shard. Elle n'est pas non plus garantie unique ou ordonnée entre les shards.

Remarque

Pour plus d'informations sur la distribution des données des journaux binaires entre les shards, consultez la rubrique Clé de distribution.

hg_binlog_event_type

BIGINT

Champ système du journal binaire indiquant le type d'événement de modification.

  • Les valeurs valides pour hg_binlog_event_type sont :

    • 5 (INSERT) : l'enregistrement du journal binaire correspond à l'insertion d'une nouvelle ligne.

    • 2 (DELETE) : l'enregistrement du journal binaire correspond à la suppression d'une ligne existante.

    • 3 (BEFORE_UPDATE) : l'enregistrement du journal binaire correspond à l'état d'une ligne existante avant une mise à jour.

    • 7 (AFTER_UPDATE) : l'enregistrement du journal binaire correspond à l'état d'une ligne existante après une mise à jour.

hg_binlog_timestamp_us

BIGINT

Champ système du journal binaire représentant l'horodatage système en microsecondes (µs).

user_table_column_1

Défini par l'utilisateur

Colonne de la table utilisateur.

...

...

...

user_table_column_n

Défini par l'utilisateur

Colonne de la table utilisateur.

  • Une opération UPDATE génère deux enregistrements dans le journal binaire : l'un pour l'état de la ligne avant la mise à jour et l'autre pour l'état après la mise à jour. La fonctionnalité d'abonnement aux journaux binaires garantit que ces deux enregistrements sont consécutifs, l'enregistrement « avant mise à jour » apparaissant en premier.

  • Lorsque vous effectuez une opération UPDATE avec un connecteur Hologres, tel que Holo Client, Flink Connector ou Data Integration, le connecteur traduit l'événement BEFORE_UPDATE en événement DELETE et l'événement AFTER_UPDATE en événement INSERT. Par conséquent, vous verrez les valeurs 2 et 5 dans le champ hg_binlog_event_type. Toutefois, le connecteur garantit la cohérence finale des données.

  • Le champ hg_binlog_event_type enregistre les événements BEFORE_UPDATE et AFTER_UPDATE uniquement lorsque vous exécutez une instruction UPDATE en SQL pur.

Considérez un journal binaire Hologres comme une table orientée lignes spéciale. Activer les journaux binaires pour une table revient à créer une nouvelle table orientée lignes où hg_binlog_lsn est la clé, et les colonnes de la table d'origine, ainsi que hg_binlog_event_type et hg_binlog_timestamp_us, forment conjointement la valeur. La table du journal binaire possède un schéma fixe, ou fortement typé. L'ordre des colonnes utilisateur correspond à celui défini dans le DDL de la table. C'est pourquoi il est recommandé d'utiliser des tables orientées lignes ou hybrides lignes-colonnes pour les tables activées avec les journaux binaires afin d'optimiser les performances de lecture.

Activation des journaux binaires

Par défaut, la fonctionnalité de journalisation binaire est désactivée dans Hologres. Activez-la en définissant les propriétés de table binlog.level et binlog.ttl. Les exemples suivants montrent comment activer les journaux binaires. Pour plus d'informations sur les paramètres de création de table, consultez la rubrique CREATE TABLE.

Remarque

Théoriquement, l'activation des journaux binaires sur une table orientée colonnes coûte plus cher que sur une table orientée lignes. Si vous mettez fréquemment la table à jour, nous vous recommandons d'activer les journaux binaires sur une table orientée lignes.

  • Syntaxe pour la version V2.1 et ultérieures :

    Les noms des propriétés de table binlog.level et binlog.ttl ont été mis à jour en binlog_level et binlog_ttl.

    CREATE TABLE test_message_src (
        id int PRIMARY KEY,
        title text NOT NULL,
        body text
    )
    WITH (
        orientation = 'row',
        clustering_key = 'id',
        binlog_level = 'replica',
        binlog_ttl = '86400' -- The TTL of the binlog, in seconds.
    );
  • Syntaxe prise en charge dans toutes les versions :

    begin;
    create table test_message_src(
      id int primary key, 
      title text not null, 
      body text);
    call set_table_property('test_message_src', 'orientation', 'row');--Create a row-oriented table named test_message_src.
    call set_table_property('test_message_src', 'clustering_key', 'id');--Create a clustered index on the id column.
    call set_table_property('test_message_src', 'binlog.level', 'replica');--Set a table property to enable the binlog feature.
    call set_table_property('test_message_src', 'binlog.ttl', '86400');--The TTL of the binlog, in seconds.
    commit;

Le tableau suivant décrit les paramètres.

Paramètre

Description

binlog_level ou binlog.level

Indique si les journaux binaires sont activés. Valeurs possibles :

  • replica : activé.

  • none : désactivé.

binlog_ttl ou binlog.ttl

Durée de conservation (TTL) du journal binaire, en secondes. Valeur par défaut : 2592000 (30 jours).

Activation des journaux binaires à la demande

À partir de Hologres V1.1, vous pouvez activer ou désactiver les journaux binaires. Vous pouvez également configurer la durée de conservation (TTL) pour répondre à différentes exigences de rétention. Il est possible d'activer les journaux binaires sur une table existante sans avoir à la recréer.

Remarque

Les fonctionnalités suivantes sont disponibles uniquement sur Hologres V1.1 et versions ultérieures. Si vous utilisez une version antérieure, consultez la rubrique Résolution des échecs de préparation à la mise à niveau ou contactez-nous via le groupe DingTalk Hologres. Pour plus d'informations, consultez la rubrique Comment obtenir davantage de support en ligne ?.

  • Activation des journaux binaires

    Utilisez les instructions suivantes pour activer les journaux binaires sur une table existante et définir la durée de conservation (TTL) du journal binaire.

    -- Set table properties to enable binlogs.
    begin;
    call set_table_property('<table_name>', 'binlog.level', 'replica');
    commit;
    -- Set table properties to configure the binlog TTL in seconds.
    begin;
    call set_table_property('<table_name>', 'binlog.ttl', '2592000');
    commit;

    table_name correspond au nom de la table pour laquelle vous souhaitez activer les journaux binaires.

  • Désactivation des journaux binaires

    Utilisez l'instruction suivante pour désactiver les journaux binaires d'une table.

    -- Set table properties to disable binlogs.
    begin; 
    call set_table_property('<table_name>', 'binlog.level', 'none'); 
    commit; 

    table_name correspond au nom de la table pour laquelle vous souhaitez désactiver les journaux binaires.

  • Modification de la durée de conservation (TTL) du journal binaire

    Utilisez l'instruction suivante pour modifier la durée de conservation (TTL) d'une table dont les journaux binaires sont activés.

    Remarque

    À partir de Hologres V1.3.24, vous pouvez définir la durée de conservation (TTL) du journal binaire pour une table enfant d'une table partitionnée. Si vous ne définissez pas explicitement la TTL du journal binaire pour une table enfant, celle-ci hérite de la TTL de la table parente.

    call set_table_property('<table_name>', 'binlog.ttl', '8640000'); -- The unit is seconds.

    table_name correspond au nom de la table pour laquelle vous souhaitez modifier la durée de conservation (TTL) du journal binaire.

Interrogation des journaux binaires

Les données des journaux binaires de Hologres sont fortement typées. Pour interroger les journaux binaires d'une table spécifique, combinez les champs système intégrés des journaux binaires avec les colonnes de la table d'origine. Hologres fournit également des fonctions permettant d'interroger le journal binaire le plus ancien ou le plus récent, ou d'obtenir des informations sur le journal binaire à partir d'un LSN ou d'un horodatage connu.

Interrogation par champs intégrés

Utilisez l'instruction suivante pour interroger le journal binaire en combinant les champs intégrés du journal binaire avec les champs de la table d'origine.

SELECT hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* FROM test_message_src;

Le code suivant présente un exemple de résultat.

postgres=# select hg_binlog_lsn, hg_binlog_event_type, hg_binlog_timestamp_us, * from test_message_src ;
 hg_binlog_lsn | hg_binlog_event_type | hg_binlog_timestamp_us | id |  title  |       body
---------------+----------------------+------------------------+----+---------+-------------------
          1081 |                    5 |       1626856018921653 |  1 | title 1 | body 1
          1092 |                    3 |       1626856054284918 |  1 | title 1 | body 1
          1093 |                    7 |       1626856054284918 |  1 | title 1 | body after update
          1095 |                    2 |       1626856059747536 |  1 | title 1 | body after update
(4 rows)

Interrogation du journal binaire le plus ancien ou le plus récent

Utilisez la fonction hg_get_binlog_cursor pour interroger le journal binaire le plus ancien ou le plus récent sur un shard spécifique. La syntaxe est présentée ci-dessous.

-- OLDEST: Query the earliest binlog on this shard.
SELECT * FROM hg_get_binlog_cursor('<table_name>','OLDEST',<shard_id>);
-- LATEST: Query the latest binlog on this shard.
SELECT * FROM hg_get_binlog_cursor('<table_name>','LATEST',<shard_id>);

Le code suivant fournit un exemple.

SELECT * FROM hg_get_binlog_cursor('test_message_src','OLDEST',0);

Le code suivant présente un exemple de résultat.

test=# select * from hg_get_binlog_cursor('test_message_src','OLDEST',0);
 hg_shard_id | hg_binlog_lsn | hg_binlog_timestamp_us
-------------+---------------+------------------------
           0 |           152 |       1716204893791755
(1 row)

Interrogation de l'horodatage par LSN

Utilisez la fonction hg_get_binlog_cursor_by_lsn pour interroger l'horodatage d'un journal binaire. Cette fonction renvoie les informations relatives au premier enregistrement de journal binaire dont le LSN est supérieur ou égal au LSN spécifié. Si le LSN spécifié n'existe pas, le champ hg_binlog_timestamp_us du résultat renvoie l'heure actuelle. La syntaxe est présentée ci-dessous.

SELECT * FROM hg_get_binlog_cursor_by_lsn('<table_name>',<lsn>,<shard_id>);--The LSN value must be of the BIGINT type.

Le code suivant fournit un exemple.

SELECT * FROM hg_get_binlog_cursor_by_lsn('test_message_src',152,0);

Le code suivant présente un exemple de résultat.

test=# select * from hg_get_binlog_cursor_by_lsn('test_message_src',152,0);
 hg_shard_id | hg_binlog_lsn | hg_binlog_timestamp_us
-------------+---------------+------------------------
           0 |           152 |      1716204893791755
(1 row)

Interrogation du LSN par horodatage

Utilisez la fonction hg_get_binlog_cursor_by_timestamp pour interroger le LSN d'un journal binaire. Cette fonction renvoie les informations relatives au premier enregistrement de journal binaire dont l'horodatage est supérieur ou égal à l'heure spécifiée. Si l'heure spécifiée est postérieure à la dernière entrée du journal binaire, le champ hg_binlog_timestamp_us du résultat renvoie l'heure actuelle, et le champ hg_binlog_lsn renvoie le LSN qui sera attribué à la prochaine ligne insérée. La syntaxe est présentée ci-dessous.

Remarque

Si l'horodatage fourni est postérieur à l'heure actuelle renvoyée par la fonction now(), la fonction lève une exception « get binlog cursor in future time ».

SELECT * FROM hg_get_binlog_cursor_by_timestamp('<table_name>',<timestamp>,<shard_id>);

Le code suivant fournit un exemple.

SELECT *,to_timestamp(hg_binlog_timestamp_us/1000000.0) FROM hg_get_binlog_cursor_by_timestamp('test_message_src','2024-05-20 19:34:53.791+08',0);

Le code suivant présente un exemple de résultat.

test=# select *, to_timestamp(hg_binlog_timestamp_us/1000000.0) from hg_get_binlog_cursor_by_timestamp('test_message_src','2024-05-20 19:34:53.791+08',0);
 hg_shard_id | hg_binlog_lsn | hg_binlog_timestamp_us |          to_timestamp
-------------+---------------+------------------------+-------------------------------
           0 |           152 |    1716204893791755 | 2024-05-20 19:34:53.791755+08
(1 row)

Consommation des journaux binaires en temps réel

Consommez les journaux binaires de Hologres avec Flink, Blink et JDBC (y compris Holo Client). Pour plus d'informations, consultez les rubriques suivantes :

Affichage des tables avec journaux binaires activés

Utilisez l'instruction SQL suivante pour identifier les tables dont les journaux binaires sont activés.

SELECT
    *
FROM
    hologres.hg_table_properties
WHERE
    property_key = 'binlog.level'
    AND property_value = 'replica';

Voici un exemple de résultat. La requête renvoie quatre colonnes : table_namespace, table_name, property_key et property_value. Ces colonnes fournissent des informations sur toutes les tables dont les journaux binaires sont activés.

Affichage de la taille de stockage des journaux binaires

  • Utilisez la fonction pg_relation_size pour obtenir la taille de stockage d'une table, qui inclut la taille de stockage des journaux binaires. Pour plus d'informations, consultez la rubrique Interroger la taille de stockage d'une table.

  • À partir de Hologres V2.1, utilisez la fonction hologres.hg_relation_size pour afficher les détails de stockage d'une table, y compris les données et les journaux binaires. Pour plus d'informations, consultez la rubrique Interroger les détails de stockage d'une table.

Désactivation des journaux binaires lors des opérations DML

Utilisez le paramètre GUC suivant pour empêcher la session actuelle de générer des journaux binaires lors des opérations DML. Définissez ce paramètre au niveau de la session avant d'exécuter une instruction DML.

-- Enable at the session level.
SET hg_experimental_generate_binlog=off;