L’entrepôt de données ou “datawarehouse” est un élément central de l’informatique décisionnelle. Afin de conserver la traçabilité des informations et des décisions prises, les informations stockées dans l’entrepôt ne devraient, dans la mesure du possible, ne jamais disparaître : il faut donc conserver les différentes évolutions des données.
En étudiant la question, on trouve rapidement une méthode appelée Slowly Changing Dimension : celle-ci vise à effectuer un versionnement des données qui changent lentement (rarement).
Comme son nom l’indique, elle concerne avant tout le rechargement des tables de dimensions.
Différentes approches sont possibles, chacune avec leurs avantages et inconvénients :
L’algorithme du SCD consiste alors à comparer directement les données de l’entrepôt avec les données opérationnelles, puis de créer une nouvelle version et mettre à jour l’ancienne en cas de changement.
Le rechargement des tables de fait apporte d’autres problématiques.
D’une part, la quantité de données est bien plus importante, et d’autre part, les changements effectués à posteriori par les utilisateurs de la base opérationnelle sont plus difficile à prendre en compte : utiliser une détection "enregistrement par enregistrement, colonne par colonne" comme dans l’algorithme du SCD n’est plus envisageable pour des raisons de vitesse d’exécution, et le versionnement ne peut pas être réalisé de la même manière.
Pour gérer ce problème, on peut procéder au rechargement périodique de la totalité des enregistrements, en tant que nouvelle version de données. Ceci ne semble pas une solution viable à long terme, aussi bien en terme de stockage que de rapidité de chargement.
On envisage alors un chargement incrémental : charger uniquement les nouvelles données et mettre à jour les données modifiées.
Le cas idéal se présente lorsque des clôtures sont effectuées régulièrement : on peut alors mettre en phase le rechargement de l’entrepôt avec la date de la dernière clôture, et se contenter de recharger le “delta” puisqu’on est assuré qu’aucun enregistrement datant d’avant le précédent rechargement n’a pu être modifié.
Lorsqu’il est possible d’avoir la main sur la base opérationnelle, il est également possible de mettre en place un système pour "mettre de coté" les enregistrements modifiés (ou ajoutés) depuis le dernier rechargement (ajouter un “flag” sur chaque enregistrement, une date de dernière mise à jour, un fichier de log...)
Mais comment faire lorsqu’il n’y a ni clôture ni possibilité d’adapter la base opérationnelle ?
On doit alors trouver des méthodes pour rendre la détection des modifications plus rapide. Une solution pourrait être de compter les enregistrements (si les nombres sont identiques, alors on a de fortes chances que les données n’aient pas été modifiées) ; ou encore d’effectuer des agrégations (somme, moyenne) à un niveau plus global, et de comparer ces valeurs. Mais ceci ne peut fonctionner que pour des changements portants sur des montants (heures, euros...). Dans tous les cas, ce n’est pas aussi précis que de comparer chaque enregistrement. Il faut peut être alors envisager de réaliser un compromis entre vitesse d’exécution, lourdeur de stockage et précision, en ajoutant une “marge d’erreur acceptable”.
Une fois toutes ces options étudiées, on peut se rendre compte que ce problème qui peut sembler trivial au premier abord, est finalement une des composantes complexes de la gestion d’un entrepôt de données.
Sources :
http://en.wikipedia.org/wiki/Slowly_changing_dimension
http://www.dmreview.com/issues/19980501/609-1.html
http://www.intelligententerprise.com/info_centers/data_warehousing/showArticle.jhtml ?articleID=59301280
Articles sur le même thème