¿Existen herramientas para realizar la comparación de datos entre dos esquemas diferentes?

11

Estamos migrando nuestra base de datos a un nuevo esquema, pero queremos validar que los datos se hayan movido correctamente.

Las herramientas tradicionales de comparación de datos pueden comparar dos bases de datos por diferencias si los esquemas son los mismos. En nuestro caso, ha habido cambios en los diseños de la tabla, pero todos los datos del esquema anterior están en el nuevo, simplemente se han movido un poco y necesito asegurarme de que sean correctos. Tenemos decenas de millones de filas, por lo que la inspección manual no es una opción.

¿Hay alguna herramienta que pueda ayudar en este tipo de comparación?

Si no, ¿hay alguna biblioteca / marco que pueda ayudar a iniciar el desarrollo de una solución personalizada?

Me complace utilizar una solución específica de la base de datos si es necesario, en este caso para SQL Server 2008.

Mi solución: estoy comparando los dos conjuntos de datos creando uno VIEWde cada tabla en la base de datos anterior con los mismos campos que la nueva tabla de base de datos.

Luego comparo los datos usando la técnica descrita aquí: La forma más corta, rápida y fácil de comparar dos tablas en SQL Server: ¡UNION!

Tengo suerte en esta migración, ya que la estructura general de la tabla es similar a la base de datos anterior, con campos movidos de una tabla a otra, eliminados o agregados. En el caso de los descartados y agregados no hay nada que comparar, para los campos que se han movido o agregado, hago cálculos en la vista para proporcionar la información correcta para la comparación.

La UNIONcomparación me muestra solo las filas con diferencias, por lo que en cuanto los datos son correctos, obtengo un conjunto de resultados vacío.

Tony
fuente
1
¿Cómo sabrá que los datos son correctos si los esquemas han cambiado? ¿Qué pasa si una tabla se ha dividido o combinado, etc.?
gbn
@AaronBertrand - Gracias por tu comentario, pero en ese momento (hace 3 años) investigué la disponibilidad de herramientas para esto, pero no encontré ninguna que realizara una comparación entre diferentes esquemas. Esperaba que su enlace fuera a una herramienta que pudiera comprar, ya que todavía necesito una.
Tony
@Tony ciertamente puedes hacer eso con la herramienta de Red-Gate (no estoy seguro de ninguno de los otros), solo tienes que hacer un mapeo manual.
Aaron Bertrand
@ Tony Diferentes esquemas, misma base de datos? ¿O diferentes esquemas, diferentes bases de datos?
Aaron Bertrand

Respuestas:

7

No es imposible comparar dos esquemas diferentes, es un cálculo de la confianza que tiene en el resultado. Esencialmente tomé prestado de las técnicas de reconciliación bancaria

Importante: Esta conciliación no se trata de asegurarse de que el destino coincida exactamente con la fuente en su contexto de datos (hay una razón por la que está migrando a un nuevo sistema), ¡pero sí necesita explicar cualquier discrepancia!

Base:

  1. Identifique las métricas que usará para medir (es decir: número total de usuarios, suma de todas sus edades, lista de ID de usuario y sus códigos postales ...) Intento usar varias métricas de: Totales, promedios y muestras / registros detallados
  2. Volcar estos datos en una ubicación común (a través de vistas / informes / lo que sea razonable)
  3. Compare sus datos y asegúrese de que se pueda explicar cualquier discrepancia.

Generalmente he dividido la comparación en varios métodos (en particular para las métricas detalladas):

  • Por tabla: generalmente se usa la tabla de origen como definición, creando un conjunto de vistas en la base de datos de destino para intentar reproducir los datos de la tabla de origen
  • Por objeto: según la base de datos y lo que esté almacenando, podría tener más sentido crear una vista holística de los objetos (es decir, el usuario) en varias tablas, de forma similar a la anterior, creando un conjunto de vistas para devolver ese objeto como conjunto de resultados
  • Por informes: si la base de datos de origen tiene un buen conjunto completo de informes de administración, otra técnica es reproducir esos informes con el mismo formato exacto

Técnicas:

No importa qué método haya usado para producir lo que se comparará, termino con un conjunto de archivos / vistas / dbs que contienen los datos de origen y destino reconciliables, luego, dependiendo del medio, puedo usar una de las herramientas comúnmente disponibles para compararlos Mis propias preferencias son:

  1. Comparación de archivos
    Cree dos carpetas diferentes para SourceDB y DestinationDB (hora / versión estampada para que sepa cuándo hice la conciliación) y descargue el resultado de mis métricas como archivos con nombres relevantes, luego use una herramienta de comparación (como CSDiff ) para identificar diferencias

  2. Comparación de Excel
    En particular, cuando trate con informes de administración, crearé un conjunto de Excel de libros de trabajo para comparar los informes (en esencia, utilizando VLookups y comparando totales)

  3. Comparación de datos
    En lugar de enviar los datos de reconciliación a archivos o informes, envíelos a bases de datos separadas, luego use algo como Redgate SQL Data Compare para comparar las bases de datos

Otras herramientas:

No probé ninguno de estos, pero una búsqueda rápida en Google en 'Herramientas de reconciliación de datos' proporciona:

Hay otros, pero esos fueron los que parecían razonables

Andrew Bickerton
fuente
Gracias por las sugerencias Como usted dice, no es imposible (estoy trabajando en una solución en este momento) es simplemente difícil. Revisaré los métodos que mencionas.
Tony
No te preocupes @Tony, el truco que encontré es intentar dividirlo en pasos más pequeños y luego encontrar las herramientas existentes para cada paso (deberás escribir algunas cosas personalizadas, se trata de minimizar ese esfuerzo siempre que sea posible)
Andrew Bickerton
6

Si desea comparar datos en dos diseños de bases de datos diferentes, entonces tendría que escribir SQL codificado a mano para comparar datos.

  • ¿Qué pasa si una tabla se ha dividido o combinado, etc.?
  • ¿Qué pasaría si tuvieras datetime, ahora tienes smalldatetime = los datos serán diferentes?
  • ...

No hay una biblioteca de marco para verificar que los datos sean iguales en dos bases de datos dispares.

Solo tú sabes lo que has cambiado o modificado

gbn
fuente
Temí tanto pero pensé en preguntar en caso de que alguien hubiera hecho tal comparación. Esperaba que pudiera haber una herramienta para acelerar la escritura de la consulta, pero como usted dice, probablemente tendré que escribir algo desde cero.
Tony
1
@Tony: sip: es porque cualquier herramienta no se puede separar "lo que está mal" de "lo que hemos cambiado"
gbn
5

Te será imposible comparar diferentes esquemas. Para resolver su problema, averiguaría qué datos necesita comparar. Luego crearía una vista en cada servidor que retiraría los datos que quería comparar (tener en cuenta los tipos de datos y demás).

Una vez que ambas vistas son iguales, usaría una herramienta de terceros como Red Gate Data Compare para ver qué filas son diferentes.

Suena como un dolor. ¡Buena suerte!

SqlSandwiches
fuente
1
Dices que es imposible y luego proporcionas una posible solución :) De hecho, el método en el que estaba trabajando es similar a tu sugerencia, excepto que no estoy comparando el resultado usando una herramienta externa sino haciéndolo todo en SQL. Gracias.
Tony
2

Hace un par de años escribí una herramienta para hacer precisamente eso: una comparación de datos entre dos bases de datos. Desde entonces lo convertí en un software comercial y lo publiqué en

www.sql-server-tool.com

  • una sola licencia cuesta 99 $, pero puede probarla gratis durante 30 días.

El programa, llamado SCT para "Herramienta de comparación de SQL Server" (nunca fui bueno para nombrar cosas :), tiene muchas opciones de ajuste fino, como: ignorar las columnas seleccionadas o especificar el método de comparación (registro por registro o clave principal / comparación de índice). Las "sesiones" de comparación pueden guardarse y reproducirse más tarde sin necesidad de volver a ingresar los parámetros. El parámetro de línea de comando se puede usar para automatizar completamente las comparaciones.

Para decenas de millones de filas puede ser un poco lento, en ese caso, recomendaría comenzar con un subconjunto de datos más pequeño, digamos comparar solo las primeras 1,000 filas, y ver si se necesita un ajuste fino del proceso.

Dariusz Dziewialtowski-Gintowt

Dariusz Dziewialtowski-Gintowt
fuente
Gracias por recomendar su aplicación, la probé pero no compara diferentes esquemas, que es lo que debo hacer. Falló al obtener los datos de la primera tabla. Tampoco estoy seguro de si la aplicación manejará la cantidad de datos que tengo, ya que no parece haber una forma de limitar el número de filas comparadas; la tabla en la que lo probé tiene 99 millones de filas.
Tony