-
insertion table de faits
Bonjour , j'essai de réaliser un datawerehouse à partir de données que je stocke d'abord telles quelles dans un ODS( datastore).
Ensuite ce que je fais c'est que je compare table par table mon datawarehouse avec l'ODS si la ligne de données n'existe pas je l'insère dans le datawarehouse sinon je fais un update des données existantes.
https://nsa39.casimages.com/img/2018...1440822875.png
Ceci est valable pour les dimensions mais comme on ne mets pas à jour une table des fait on ne fait qu'y inserer normalement(c'est juste??) je voulais savoir s'il fallait vérifier avant si la données existe dejà dans la table des faits ?
Merci
-
Hello Melnej,
En soi, tu as le droit de mettre à jour (et supprimer) des faits d'une table de fait mais, cela dépend comment et pourquoi !
Une des références du décisionnel Ralph Kimball a écrit beaucoup de chose à ce sujet, dont ceci : Fact Table Surrogate Keys
La partie ODS et/ou SA est une très bonne pratique qui permet de récupérer les données sans surcharger la production.
Ensuite, tu alimentes/mets à jour tes dimensions puis, une fois celles-ci terminées, tu peux passer à tes tables de fait.
Pour la façon optimale de gérer l'alimentation (insertion, mise à jour, suppression), il y a plusieurs méthodes à tester en fonction de ton environnement de production.
Voici un exemple pour gérer l'insertion et mise à jour : Comment gérer dans SSIS le mode d'alimentation Insert or Update ?
Dans tous les cas, il faut faire attention à plusieurs éléments consommateurs comme les tris, les lookups, etc. Il faut essayer de favoriser le SQL dans ta requête de base.
Elros
-
Je vous remercie pour votre réponse, je pense que je dois me documenter plus ,
mais je me demande est ce qu'il serait mieux d'effacer les données de mon datawarehouse et inserer de nouveau comme je le fais pour l'ods ou est ce que je verifie et j’insère dans la meme table de faits dejà remplie?? qu'est ce qui serait mieux à faire ??
-
Sauf cas extraordinaire, on ne supprime pas vraiment un fait, on l'historise. Souvent, on a un flag (booléen, char(1), autre) qui gère le passage du fait de "en cours" à "historiser". Le principe d'historisation est d'exclure le fait pour les outils de reporting.
Si tu fais une grosse insertion de données et que tu es certain de ce que tu insères (pas de doublons en source et cible), tu peux désactiver les index et faire une insertion massive (par bloc = bulk insert). Il faudra les réactiver et cela à un coût !
(Edit) Voici un article sur les index qui est très intéressant : https://use-the-index-luke.com/fr/sq...-a-jour/insert
Si tu as autant d'insertion que de mise à jour, tu as deux possibilités :
- Une visuelle qui exploite SSIS : Comment gérer dans SSIS le mode d'alimentation Insert or Update ?
- Une full SQL souvent plus performante que passer par plusieurs lookups : T-SQL : les joies de l’instruction MERGE, ou comment effectuer des opérations mixtes en un temps, deux mouvements
Elros
-
je vous remercie pour votre réponse
mon problème est que justement j'aurais peut surement des doublons si je ne fais qu'inserer dans ma table des faits , est ce que je dois verifier si le fait est dejà stoqué avant de l'inserer ? je ne vois pas vraiment comment procéder.
Autant pour les dimensions c'est clair je verifie si la donnée existe je fais un update sinon j'insère , pour la table de faits je ne sais pas si je procède de la meme manière
Merci