Czy istnieją narzędzia do porównywania danych między dwoma różnymi schematami?

11

Przeprowadzamy migrację naszej bazy danych do nowego schematu, ale chcemy zweryfikować poprawność przeniesienia danych.

Tradycyjne narzędzia do porównywania danych mogą porównywać dwie bazy danych pod kątem różnic, jeśli schematy są takie same. W naszym przypadku nastąpiły zmiany w projektach tabel, ale wszystkie dane ze starego schematu znajdują się w nowym, po prostu zostały nieco przeniesione i muszę się upewnić, że są poprawne. Mamy dziesiątki milionów rzędów, więc ręczna kontrola nie jest opcją.

Czy są jakieś narzędzia, które mogłyby pomóc w tego rodzaju porównaniu?

Jeśli nie, czy są jakieś biblioteki / frameworki, które mogłyby pomóc w rozpoczęciu tworzenia niestandardowego rozwiązania?

W razie potrzeby chętnie skorzystam z rozwiązania specyficznego dla bazy danych, w tym przypadku dla SQL Server 2008.

Moje rozwiązanie: porównuję dwa zestawy danych, tworząc VIEWkażdą tabelę w starej bazie danych z tymi samymi polami, co nowa tabela bazy danych.

Następnie porównuję dane przy użyciu opisanej tutaj techniki: Najkrótszy, najszybszy i najłatwiejszy sposób porównania dwóch tabel w SQL Server: UNION!

Mam szczęście w tej migracji, ponieważ ogólna struktura tabeli jest podobna do starej bazy danych, a pola są przenoszone z jednej tabeli do drugiej, upuszczane lub dodawane. W przypadku upuszczonych i dodanych nie ma nic do porównania, dla pól, które zostały przeniesione lub zostały zagregowane, wykonuję obliczenia w celu zapewnienia poprawnych informacji do porównania.

Do UNIONporównania pokazuje mi tylko wiersze z różnic, tak szybko, jak dane są poprawne dostaję pusty zestaw wyników.

Tony
źródło
1
Skąd będziesz wiedzieć, że dane są poprawne, jeśli schematy uległy zmianie? Co się stanie, jeśli tabela zostanie podzielona lub połączona itp?
gbn
@AaronBertrand - Dziękuję za komentarz, ale w tym czasie (3 lata temu) sprawdziłem dostępność narzędzi do tego celu, ale nie znalazłem żadnego, który mógłby przeprowadzić porównanie różnych schematów. Miałem nadzieję, że twój link był do narzędzia, które mógłbym kupić, ponieważ wciąż go potrzebuję.
Tony
@ Tony z pewnością możesz to zrobić za pomocą narzędzia Red-Gate (nie jestem pewien co do pozostałych), wystarczy wykonać ręczne mapowanie.
Aaron Bertrand
@ Tony Różne schematy, ta sama baza danych? Lub różne schematy, różne bazy danych?
Aaron Bertrand

Odpowiedzi:

7

Nie jest niemożliwe porównanie dwóch różnych schematów, jest to obliczenie tego, jak pewny jesteś w wyniku. Zasadniczo pożyczyłem od technik uzgadniania banku

Ważne: to uzgodnienie nie polega na upewnieniu się, że miejsce docelowe dokładnie pasuje do źródła w kontekście danych (istnieje powód migracji do nowego systemu), ale musisz wyjaśnić wszelkie rozbieżności!

Podstawa:

  1. Zidentyfikuj metryki, których użyjesz do pomiaru (tj.: Całkowitą liczbę użytkowników, sumę wszystkich ich grup wiekowych, listę identyfikatorów użytkowników i ich kodów pocztowych ...) Staram się używać kilku metryk z: Totals, średnich i próbek / szczegółowych zapisów
  2. Zrzuć te dane do wspólnej lokalizacji (poprzez widoki / raporty / cokolwiek jest uzasadnione)
  3. Porównaj swoje dane i upewnij się, że można wyjaśnić wszelkie rozbieżności

Generalnie podzieliłem porównanie na kilka metod (w szczególności dla szczegółowych danych):

  • Według tabeli: zwykle przy użyciu tabeli źródłowej jako definicji, tworząc zestaw widoków na docelowej bazie danych, aby spróbować odtworzyć dane tabeli źródłowej
  • Według obiektu: w zależności od bazy danych i tego, co przechowujesz, sensowniejsze może być utworzenie całościowego widoku obiektów (tj. Użytkownika) w kilku tabelach, podobnie jak powyżej, tworzenie zestawu widoków w celu zwrócenia tego obiektu jako zestaw wyników
  • Według raportów: jeśli źródłowa baza danych ma dobry kompleksowy zestaw raportów zarządzania, inną techniką jest odtwarzanie tych raportów z dokładnie takim samym formatowaniem

Techniki:

Bez względu na to, jakiej metody użyłem do stworzenia tego, co zostanie porównane, otrzymam zestaw plików / widoków / dbs, które przechowują dane źródłowe i docelowe do uzgodnienia, a następnie w zależności od nośnika mogę użyć jednego z powszechnie dostępnych narzędzi aby je porównać. Moje własne preferencje to:

  1. Porównanie plików
    Utwórz dwa różne foldery dla SourceDB i DestinationDB (wytłoczony czas / wersja, więc wiem, kiedy dokonałem uzgodnienia) i zrzuć dane wyjściowe moich danych jako pliki o odpowiednich nazwach, a następnie użyj narzędzia porównawczego (takiego jak CSDiff ), aby zidentyfikować różnice

  2. Porównanie Excela
    W szczególności w przypadku raportów zarządzania utworzę zestaw Excela skoroszytów do porównania raportów (w istocie przy użyciu VLookupów i porównywania sum)

  3. Porównanie danych
    Zamiast wyprowadzać dane uzgadniania do plików lub raportów, wysyłaj je do oddzielnych baz danych, a następnie użyj czegoś takiego jak Redgate SQL Data Compare, aby porównać bazy danych

Inne narzędzia:

Nie wypróbowałem żadnego z nich, ale szybkie wyszukiwanie w Google w „Narzędziach do uzgadniania danych” daje:

Są inne, ale te wyglądały rozsądnie

Andrew Bickerton
źródło
Dziękuję za sugestie. Jak mówisz, nie jest to niemożliwe (pracuję obecnie nad rozwiązaniem), jest po prostu trudne. Zajrzę do metod, o których wspomniałeś.
Tony
Nie martw się @ Tony, sztuczka, którą znalazłem, polega na próbie podzielenia go na mniejsze kroki, a następnie znalezieniu istniejących narzędzi dla każdego kroku (trzeba będzie napisać niestandardowe rzeczy, w miarę możliwości trzeba tylko zminimalizować ten wysiłek)
Andrew Bickerton
6

Jeśli chcesz porównać dane w dwóch różnych projektach baz danych, będziesz musiał napisać ręcznie kodowany SQL, aby porównać dane.

  • Co się stanie, jeśli tabela zostanie podzielona lub połączona itp?
  • Co jeśli miałeś datetime, teraz masz smalldatetime = dane będą inne
  • ...

Nie ma biblioteki frameworka do sprawdzania danych w dwóch różnych bazach danych.

Tylko Ty wiesz, co zmieniłeś lub zmodyfikowałeś

gbn
źródło
Tak samo się obawiałem, ale pomyślałem, że zapytam na wypadek, gdyby ktoś dokonał takiego porównania. Miałem nadzieję, że może istnieć narzędzie przyspieszające pisanie zapytań, ale jak mówisz, prawdopodobnie będę musiał napisać coś od zera.
Tony
1
@Tony: tak: to dlatego, że żadne narzędzie nie może oddzielić „co jest nie tak” od „tego, co zmieniliśmy”
gbn,
5

Porównywanie różnych schematów będzie niemożliwe. Aby rozwiązać problem, ustalę, jakie dane należy porównać. Następnie stworzyłem widok na każdym serwerze, który wycofałby dane, które chciałem porównać (biorąc pod uwagę typy danych i tym podobne).

Gdy oba widoki będą takie same, skorzystam z narzędzia innej firmy, takiego jak Red Gate Data Compare, aby zobaczyć, które wiersze są różne.

Brzmi jak ból. Powodzenia!

SqlSandwiches
źródło
1
Mówisz, że to niemożliwe, a następnie podaj możliwe rozwiązanie :) W rzeczywistości metoda, nad którą pracowałem, jest podobna do twojej sugestii, tyle że nie porównuję wyniku za pomocą zewnętrznego narzędzia, ale robię to wszystko w SQL. Dzięki.
Tony
2

Kilka lat temu napisałem narzędzie, które właśnie to robi - porównanie danych między dwiema bazami danych. Od tego czasu przekonwertowałem go na oprogramowanie komercyjne i opublikowałem pod adresem

www.sql-server-tool.com

  • pojedyncza licencja kosztuje 99 $, ale możesz wypróbować ją za darmo przez 30 dni.

Program o nazwie SCT dla „SQL Server Compare Tool” (nigdy nie byłem dobry w nazywaniu rzeczy :) - ma wiele opcji dostrajających, takich jak: ignorowanie wybranych kolumn lub określanie metody porównania (rekord po rekordzie lub klucz podstawowy / porównanie indeksu). Porównanie „sesji” można zapisać i odtworzyć później bez konieczności ponownego wprowadzania parametrów. Parametru wiersza polecenia można użyć do pełnej automatyzacji porównań.

W przypadku dziesiątek milionów wierszy może to być nieco powolne - w takim przypadku zaleciłbym rozpoczęcie od mniejszego podzbioru danych - powiedzmy, porównajmy tylko pierwsze 1000 wierszy - i zobaczmy, czy konieczne jest jakiekolwiek dostrajanie procesu.

Dariusz Dziewialtowski-Gintowt

Dariusz Dziewialtowski-Gintowt
źródło
Dzięki za polecenie Twojej aplikacji, wypróbowałem ją, ale nie porównuje ona różnych schematów, co muszę zrobić. Nie udało się uzyskać danych z pierwszej tabeli. Nie jestem również pewien, czy aplikacja poradzi sobie z ilością danych, które mam, ponieważ wydaje się, że nie ma sposobu na ograniczenie liczby porównywanych wierszy; tabela, na której testowałem to ma 99 milionów wierszy.
Tony