OSBI.FR - Open Source Business Intelligence

Réplication de données avec Kettle

Introduction

Dans toute organisation, la synchronisation de données entre plusieurs bases est un sujet assez récurrent. Avec Kettle, la mise en place est plutôt simple : encore faut-il l’avoir réalisée au moins une fois… !

Voici donc dans cet article un exemple de mise en place d’une réplication de données.

Vous allez constater à quel point Kettle vous simplifie (comme toujours) la mise en œuvre.

L’exemple à traiter

Description du besoin

Comme d’habitude, je vais prendre un exemple basique qu’il vous suffira d’adapter à vos propres besoins : je dispose de deux serveurs JasperSoft, un serveur de pré-production (Serveur A) et un serveur de production (Serveur B).

Mon besoin est tout bête : répliquer les comptes utilisateurs du serveur A vers le serveur B de manière à avoir une synchronisation complète des comptes.

Précision importante : le système de référence est le serveur A. Ainsi tout compte utilisateur créé, modifié ou supprimé sur ce serveur doit respectivement être créé, modifié ou supprimé sur le serveur B. Donc A est le serveur Maître et B le serveur Esclave : on ne réinjecte aucune modification effectuée directement sur B vers A.

En outre, à chaque réplication, je souhaite obtenir un fichier de synthèse me listant :

  • les comptes utilisateurs ajoutés depuis la dernière synchronisation
  • les comptes utilisateurs modifiés
  • les comptes utilisateurs supprimés

Pré-requis :

  • JasperServer Reports 6.0 Community Edition
  • Pentaho Data Integration 5.x

Mise en place

JasperServer repose sur une base de données PostgreSQL pour le stockage de ses objets internes tels que rapports, paramètres, sources de données, traitements planifiés, etc…

Cette base de données s’appelle « jasperserver » et contient 62 tables dont la table « jiuser » pour le stockage des informations utilisateurs : login, nom complet, email, mot de passe…

Bien sûr, une interface web d’administration (accessible depuis le menu « Gérer\Utilisateurs ») permet la création, l’édition et la suppression des comptes en ligne :

gestion_users_jasperserver

Voici un exemple de données « utilisateurs » stockées dans la table « jiuser » :

table_jiuser
Les étapes indispensables à la mise en place du traitement sont :

  • l’étape « Synchronisation de données » (Synchronize after merge)
  • l’étape « Comparaison lignes » (Merge rows)

 

Voilà à quoi doit ressembler la transformation sous PDI :

exemple_synchro_data_pdi

Cette transformation consiste en une extraction des données de la table « jiuser » sur chaque serveur A et B, suivi de l’étape « Comparaison lignes » configurée comme ci-dessous :

merge_rows

  • Dans la zone Clés à satisfaire, on spécifie la(les) champ(s) qui constituent la clée d’unicité des enregistrements (ici le champ « id »). Attention à bien effectuer un tri préalable sur ces clés dans les requêtes d’extraction !
  • Dans la zone Valeurs de comparaison, on renseigne les champs sur lesquels on veut que kettle nous signale une modification de l’enregistrement.
  • Le champ résultat nommé par défaut « flagfield » contiendra après l’exécution une des informations suivantes et ceci pour chaque ligne :
    • « new » pour un nouvel enregistrement
    • « changed » pour une modification sur un enregistrement
    • « deleted » pour une suppression
    • « identical » pour un enregistrement identique

L’étape « Synchronisation de données » permet ensuite de déterminer les opérations à effectuer sur le serveur B, en fonction de la valeur du champ « flagfield » :

L’onglet « Général » est identique à celui de l’étape « Insertion/Mise à jour table » :

synchronize_after_merge_2

L’onglet « Avancé » permet quant à lui de définir la stratégie de mise à jour en fonction de la valeur du champ « flagfield » :

synchronize_after_merge_1

La transformation se termine par la génération d’un fichier CSV qui permet de tracer les différences entre les serveurs A et B et ceci avant la synchronisation.  L’étape « filtrage ligne » permet de tracer tous les enregistrements sauf ceux qui sont identiques (flagfield= « indentical » )

Téléchargement

Récupérez vite la transformation exemple pour l’adapter à vos besoins !

A bientôt 😉

1 Comment

  1. Bonjour,

    Ceci ne concerne que la réplication de tables, mais ne fait pas de réplication de base de données.

    Remi

Les commentaires sont fermés.