Чи є інструменти для порівняння даних між двома різними схемами?


11

Ми переносимо нашу базу даних на нову схему, але хочемо, щоб перевірити дані було переміщено правильно.

Традиційні засоби порівняння даних можуть порівнювати дві бази даних для відмінностей, якщо схеми однакові. У нашому випадку зміни дизайну таблиць були змінені, але всі дані зі старої схеми є в новій, її просто перемістили, і мені потрібно переконатися, що вона правильна. У нас є десятки мільйонів рядків, тому ручний огляд - це не варіант.

Чи є інструменти, які могли б допомогти у такому типі порівняння?

Якщо не існує бібліотек / рамок, які могли б допомогти розпочати розробку спеціального рішення?

Я радий використовувати рішення для бази даних, якщо це необхідно, в цьому випадку для SQL Server 2008.

Моє рішення: Я порівнюю два набори даних, створюючи VIEWкожну таблицю в старій базі даних з тими ж полями, що і нову таблицю бази даних.

Потім я порівнюю дані, використовуючи описану тут техніку: Найкоротший, найшвидший і найпростіший спосіб порівняння двох таблиць у SQL Server: UNION!

Мені пощастило в цій міграції, оскільки загальна структура таблиці схожа на стару базу даних, при цьому поля переміщуються з однієї таблиці в іншу, випадають або додаються. У випадку відхиленого та доданого немає для порівняння нічого, для полів, які перемістилися або були агреговані, я роблю розрахунки, щоб подати правильну інформацію для порівняння.

У UNIONпорівнянні показує мені тільки рядки з відмінностями, так як тільки дані вірні , я отримую порожній результуючий набір.


1
Як ви дізнаєтеся, що дані є правильними, якщо схеми змінилися? Що робити, якщо таблицю було розділено, або об’єднано тощо?
gbn


@AaronBertrand - Дякую за ваш коментар, але в той час (3 роки тому) я досліджував наявність інструментів для цього, але не знайшов жодного, який би виконував порівняння між різними схемами. Я сподівався, що ваше посилання стосується інструменту, який я можу придбати, оскільки мені це ще потрібно.
Тоні

@Тоні ви, звичайно, можете це зробити за допомогою інструмента Red-Gate (не впевнений ні в якому іншому), вам просто потрібно зробити ручне картографування.
Аарон Бертран

@Tony Різні схеми, однакова база даних? Або різні схеми, різні бази даних?
Аарон Бертран

Відповіді:


7

Неможливо порівняти дві різні схеми, це розрахунок того, наскільки ви впевнені в результаті. Я по суті запозичив техніку банківського примирення

Важливо: Це узгодження не полягає у тому, щоб місце призначення точно відповідало джерелу в його контексті даних (є причина, що ви переходите на нову систему), але вам потрібно пояснити будь-які розбіжності!

Основа:

  1. Визначте показники, які ви будете використовувати для вимірювання (тобто загальна кількість користувачів, сума всіх віків, список ідентифікаторів користувачів та їх поштових індексів ...) Я намагаюся використовувати кілька показників із: Усього, середні показники та вибірки / детальні записи
  2. Скиньте ці дані у загальне місцеположення (через перегляди / звіти / що є розумним)
  3. Порівняйте свої дані та переконайтесь, що будь-яку невідповідність можна пояснити

Я звичайно розділив порівняння на кілька методів (зокрема, для детальної метрики):

  • За таблицею: Зазвичай використовуючи Таблицю джерел як визначення, створюючи набір поглядів на цільовій БД для спробу та відтворення даних вихідної таблиці
  • За об'єктом: Залежно від БД і того, що ви зберігаєте, може бути більш доцільним створити цілісний вигляд об'єктів (тобто: користувача) в декількох таблицях, аналогічно вище, створюючи набір поглядів, щоб повернути цей об'єкт як набір результатів
  • За звітами: Якщо у вихідній БД є хороший всебічний набір звітів про управління, інша методика полягає у відтворенні цих звітів із точно таким же форматуванням

Методика:

Незалежно від того, яким методом я користувався, щоб створити порівняння, я закінчую набором файлів / поглядів / dbs, що містять дані, сумісні з джерелами та пунктом призначення, і в залежності від середовища я можу використовувати один із загальнодоступних інструментів щоб порівняти їх. Мої власні переваги:

  1. Порівняння файлів
    Створіть дві різні папки для SourceDB та DestinationDB (з печаткою часу / версії, тому я знаю, коли я здійснив узгодження) та скиньте вихід моїх показників у відповідних файлах, а потім використовуйте інструмент порівняння (наприклад, CSDiff ) для виявлення відмінностей

  2. Порівняння Excel
    Зокрема, стосуючись звітів про управління, я створити набір робочих книжок Excel для порівняння звітів (по суті, використовуючи VLookups та порівнюючи підсумки)

  3. Порівняння даних
    Замість того, щоб виводити дані звірів у файли чи звіти, виводити їх в окремі БД, а потім використовувати щось на зразок Redgate SQL Data Порівняти для порівняння БД

Інші інструменти:

Не пробував жодного з них, але швидкий пошук у Google у розділі "Інструменти узгодження даних" дає:

Є й інші, але це були ті, що виглядали розумними


Дякуємо за пропозиції. Як ви кажете, це неможливо (зараз я працюю над рішенням), це просто важко. Я перегляну методи, які ви згадуєте.
Тоні

Не хвилюйтесь @ Тоні, хитрість, яку я знайшов, - спробувати розбити його на більш дрібні етапи, а потім знайти існуючі інструменти для кожного кроку (вам потрібно буде написати деякі спеціальні речі, мова йде лише про мінімізацію цих зусиль, де це можливо)
Ендрю Бікертон,

6

Якщо ви хочете порівнювати дані у двох різних проектах баз даних, вам доведеться написати кодований SQL вручну для порівняння даних.

  • Що робити, якщо таблицю було розділено, або об’єднано тощо?
  • Що робити, якщо у вас була дата, тепер у вас є smalldatetime = дані будуть іншими
  • ...

У двох розрізнених базах даних немає бібліотеки фреймворку для перевірки даних.

Тільки ви знаєте, що ви змінили чи змінили


Я боявся стільки, але думав, що запитаю у випадку, якщо хтось зробив таке порівняння. Я сподівався, що може бути інструмент для прискорення написання запитів, але, як ви кажете, мені, мабуть, доведеться щось написати з нуля.
Тоні

1
@Tony: yep: це тому, що будь-який інструмент не може відокремити "що не так" від "що ми змінили"
gbn

5

Порівнювати різні схеми вам буде неможливо. Щоб вирішити вашу проблему, я б зрозумів, які дані вам потрібно порівняти. Тоді я створив би перегляд на кожному сервері, який би відкликав дані, які я хотів порівняти (враховувати типи даних тощо).

Після того, як обидва представлення збігаються, я використовую інструмент сторонніх розробників, наприклад Red Gate Data, порівняти, щоб побачити, чим відрізняються рядки.

Звучить як біль. Удачі!


1
Ви говорите, що це неможливо, і тоді надаєте можливе рішення :) Насправді метод, над яким я працював, схожий на вашу пропозицію, за винятком того, що я не порівнюю результат за допомогою зовнішнього інструменту, але роблю це все в SQL. Спасибі.
Тоні

2

Пару років тому я написав інструмент зробити саме це - порівняння даних між двома базами даних. Відтоді я перетворив його на комерційне програмне забезпечення та опублікував у

www.sql-server-tool.com

  • одна ліцензія коштує 99 доларів, але ви можете спробувати її безкоштовно протягом 30 днів.

Програма, названа SCT для "Інструменту порівняння SQL Server" (я ніколи не був хорошим в називанні речей :) - має безліч точних налаштувань, таких як: ігнорування вибраних стовпців або вказівка ​​методу порівняння (запис за записом або первинний ключ / порівняння індексу). Порівняльні "сеанси" можна зберегти та відтворити пізніше, не потребуючи повторного введення параметрів. Параметр командного рядка може використовуватися для повністю автоматизації порівнянь.

Для десятків мільйонів рядків це може бути трохи повільно - у такому випадку я б рекомендував почати з меншої підмножини даних - скажімо, порівняти лише перші 1000 рядків - і побачити, чи потрібна якась тонка настройка процесу.

Даріуш Дзевіалтовський-Гінтовт


Дякуємо, що рекомендували ваш додаток, я спробував це, але він не порівнює різні схеми, що мені потрібно зробити. Не вдалося отримати дані з першої таблиці. Я також не впевнений, чи додаток буде обробляти кількість даних, які я маю, оскільки, здається, не існує способу обмежити кількість порівняних рядків; таблиця, на якій я її тестував, має 99 мільйонів рядків.
Тоні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.