Existe-t-il des outils pour effectuer une comparaison de données entre deux schémas différents?

11

Nous migrons notre base de données vers un nouveau schéma mais voulons valider que les données ont été déplacées correctement.

Les outils de comparaison de données traditionnels peuvent comparer deux bases de données pour les différences si les schémas sont les mêmes. Dans notre cas, il y a eu des changements dans les conceptions de table, mais toutes les données de l'ancien schéma sont dans le nouveau, il a juste été déplacé un peu et je dois m'assurer qu'il est correct. Nous avons des dizaines de millions de rangées, l'inspection manuelle n'est donc pas une option.

Existe-t-il des outils qui pourraient faciliter ce type de comparaison?

Sinon, existe-t-il des bibliothèques / frameworks qui pourraient aider à lancer le développement d'une solution personnalisée?

Je suis heureux d'utiliser une solution spécifique à la base de données si nécessaire, dans ce cas pour SQL Server 2008.

Mon soluton: je compare les deux ensembles de données en créant une VIEWde chaque table sur l'ancienne base de données avec les mêmes champs que la nouvelle table de base de données.

Je compare ensuite les données en utilisant la technique décrite ici: La façon la plus courte, la plus rapide et la plus simple de comparer deux tables dans SQL Server: UNION!

J'ai de la chance dans cette migration car la structure globale de la table est similaire à l'ancienne base de données, avec des champs déplacés d'une table à une autre, supprimés ou ajoutés. Dans le cas des éléments supprimés et ajoutés, il n'y a rien à comparer, pour les champs qui ont été déplacés ou agrégés, je fais des calculs en vue de fournir les informations correctes pour la comparaison.

La UNIONcomparaison ne me montre que les lignes avec des différences, donc dès que les données sont correctes, j'obtiens un jeu de résultats vide.

Tony
la source
1
Comment saurez-vous que les données sont correctes si les schémas ont changé? Que faire si une table a été divisée, combinée, etc.?
gbn
@AaronBertrand - Merci pour votre commentaire, mais à l'époque (il y a 3 ans), j'ai étudié la disponibilité des outils pour cela, mais n'en ai trouvé aucun qui pourrait effectuer une comparaison entre différents schémas. J'espérais que votre lien était vers un outil que je pourrais acheter car j'en ai encore besoin.
Tony
@Tony, vous pouvez certainement le faire avec l'outil de Red-Gate (pas sûr des autres), il vous suffit de faire un mappage manuel.
Aaron Bertrand
@Tony Schémas différents, même base de données? Ou différents schémas, différentes bases de données?
Aaron Bertrand

Réponses:

7

Il n'est pas impossible de comparer deux schémas différents, c'est un calcul de votre confiance dans le résultat. J'ai essentiellement emprunté aux techniques de rapprochement bancaire

Important: Cette réconciliation ne consiste pas à s'assurer que la destination correspond exactement à la source dans son contexte de données (il y a une raison pour laquelle vous migrez vers un nouveau système), mais vous devez expliquer toute divergence!

Base:

  1. Identifier les métriques que vous utiliserez pour mesurer (ie: nombre total d'utilisateurs, somme de tous leurs âges, liste des identifiants et de leurs codes postaux ...) J'essaie d'utiliser plusieurs métriques à partir de: Totaux, Moyennes & enregistrements / enregistrements détaillés
  2. Vider ces données dans un emplacement commun (via des vues / rapports / tout ce qui est raisonnable)
  3. Comparez vos données et assurez-vous que tout écart peut être expliqué

J'ai généralement divisé la comparaison en plusieurs méthodes (en particulier pour les métriques détaillées):

  • Par table: utilise généralement la table source comme définition, créant un ensemble de vues sur la base de données de destination pour essayer de reproduire les données de la table source
  • Par objet: en fonction de la base de données et de ce que vous stockez, il peut être plus judicieux de créer une vue globale des objets (c'est-à-dire: l'utilisateur) sur plusieurs tables, comme ci-dessus, en créant un ensemble de vues pour renvoyer cet objet en tant que ensemble de résultats
  • Par rapports: si la base de données source possède un bon ensemble complet de rapports de gestion, une autre technique consiste à reproduire ces rapports avec exactement le même formatage.

Techniques:

Peu importe la méthode que j'ai utilisée pour produire ce qui sera comparé, je me retrouve avec un ensemble de fichiers / vues / dbs qui contiennent les données source et destination conciliables, puis en fonction du support, je peux utiliser l'un des outils couramment disponibles pour les comparer. Mes propres préférences sont:

  1. Comparaison de fichiers
    Créez deux dossiers différents pour SourceDB et DestinationDB (horodatage / version horodaté afin que je sache quand j'ai fait la réconciliation) et videz la sortie de mes mesures sous forme de fichiers nommés de manière appropriée, puis utilisez un outil de comparaison (tel que CSDiff ) pour identifier les différences

  2. Comparaison Excel
    En particulier lorsque je traite des rapports de gestion, je vais créer un ensemble de classeurs Excel pour comparer les rapports (essentiellement en utilisant VLookups et en comparant les totaux)

  3. Comparaison des données
    Plutôt que d'exporter les données de rapprochement dans des fichiers ou des rapports, exportez-les vers des bases de données distinctes, puis utilisez quelque chose comme Redgate SQL Data Compare pour comparer les bases de données

Autres outils:

Je n'ai essayé aucun de ceux-ci, mais une recherche rapide sur Google sur les «outils de réconciliation des données» donne:

Il y en a d'autres, mais ce sont ceux qui avaient l'air raisonnables

Andrew Bickerton
la source
Merci pour les suggestions. Comme vous le dites, ce n'est pas impossible (je travaille actuellement sur une solution) c'est juste difficile. Je vais regarder les méthodes que vous mentionnez.
Tony
Pas de soucis @Tony, l'astuce que j'ai trouvée est d'essayer de la diviser en étapes plus petites, puis de trouver les outils existants pour chaque étape (vous devrez écrire des trucs personnalisés, il s'agit simplement de minimiser cet effort si possible)
Andrew Bickerton
6

Si vous souhaitez comparer des données dans deux conceptions de bases de données différentes, vous devez écrire du code SQL codé à la main pour comparer les données.

  • Que faire si une table a été divisée, combinée, etc.?
  • Et si vous aviez datetime, vous avez maintenant smalldatetime = les données seront différentes
  • ...

Il n'y a pas de bibliothèque de framework pour vérifier les données est la même dans deux bases de données disparates.

Vous seul savez ce que vous avez changé ou modifié

gbn
la source
J'en craignais autant mais pensais que je demanderais au cas où quelqu'un aurait fait une telle comparaison. J'espérais qu'il pourrait y avoir un outil pour accélérer l'écriture de la requête, mais comme vous le dites, je devrai probablement écrire quelque chose à partir de zéro.
Tony
1
@Tony: oui: c'est parce qu'aucun outil ne peut séparer "ce qui ne va pas" de "ce que nous avons changé"
gbn
5

Il vous sera impossible de comparer différents schémas. Pour résoudre votre problème, je déterminerais quelles données vous devez comparer. Je créerais ensuite une vue sur chaque serveur qui retirerait les données que je voulais comparer (en tenant compte des types de données et autres).

Une fois que les deux vues sont identiques, j'utiliserais un outil tiers comme Red Gate Data Compare pour voir quelles lignes sont différentes.

Cela ressemble à une douleur. Bonne chance!

SqlSandwiches
la source
1
Vous dites que c'est impossible et ensuite fournissez une solution possible :) En fait, la méthode sur laquelle je travaillais est similaire à votre suggestion, sauf que je ne compare pas le résultat à l'aide d'un outil externe mais que je fais tout cela en SQL. Merci.
Tony
2

Il y a quelques années, j'ai écrit un outil pour ce faire - une comparaison de données entre deux bases de données. Depuis lors, je l'ai converti en logiciel commercial et publié sur

www.sql-server-tool.com

  • une seule licence coûte 99 $, mais vous pouvez l'essayer gratuitement pendant 30 jours.

Le programme - nommé SCT pour "SQL Server Comparison Tool" (je n'ai jamais été doué pour nommer les choses :) - a beaucoup d'options de réglage fin, comme: ignorer les colonnes sélectionnées ou spécifier la méthode de comparaison (enregistrement par enregistrement ou clé primaire / comparaison d'index). Les "sessions" de comparaison peuvent être enregistrées et rejouées ultérieurement sans avoir à ressaisir les paramètres. Le paramètre de ligne de commande peut être utilisé pour automatiser entièrement les comparaisons.

Pour des dizaines de millions de lignes, cela peut être un peu lent - dans ce cas, je recommanderais de commencer avec un sous-ensemble de données plus petit - disons, ne comparez que les 1000 premières lignes - et voyez si un réglage fin du processus est nécessaire.

Dariusz Dziewialtowski-Gintowt

Dariusz Dziewialtowski-Gintowt
la source
Merci d'avoir recommandé votre application, je l'ai essayée mais elle ne compare pas les différents schémas, c'est ce que je dois faire. Il a échoué lors de l'obtention des données de la première table. Je ne suis pas sûr non plus que l'application gère la quantité de données dont je dispose car il ne semble pas y avoir de moyen de limiter le nombre de lignes comparées; le tableau sur lequel je l'ai testé compte 99 millions de lignes.
Tony