sql >> Base de Datos >  >> RDS >> Database

Carga incremental en SSIS

La gente cada vez tiene más prisa. Quieren sus datos casi ahora mismo. Y aún más, los datos son cada vez más grandes. Entonces, no puedes usar buenas técnicas antiguas porque son "suficientemente buenas". Tiene que ser rápido. Y los pasos de ETL no son una exención. Aquí es donde entra en juego la carga incremental. Y si está en esta página, probablemente esté buscando carga incremental en SSIS.

Y ese es nuestro enfoque en este artículo. Vamos a hacer comparaciones y ejemplos para explicar la carga de datos incrementales en SSIS paso a paso. Y tenga la seguridad de que no se romperá la cabeza si se da cuenta de esto.

Esto es lo que te espera:

  • ¿Qué son la carga completa y la carga incremental en ETL?
  • ¿Qué es la carga de datos incremental en SSIS?
  • Las diferencias entre carga completa y carga incremental en SSIS
  • Carga incremental en SSIS usando CDC o Change Data Capture
  • Carga incremental en SSIS usando columnas DateTime
  • Cómo hacer una carga incremental en SSIS usando Lookup
  • La mejor herramienta para cargar datos SSIS

Cada sección tendrá subsecciones. Puede saltar al tema que necesita haciendo clic en los enlaces.

Antes de comenzar con los ejemplos, comparemos la carga incremental con su opuesto, la carga completa.

¿Qué son la carga completa y la carga incremental en ETL

Independientemente de las herramientas ETL que utilice, las cargas completas e incrementales tienen el mismo significado. Vamos a describirlos a continuación.

Carga completa en ETL

Como sugiere el nombre, Full Load en ETL está cargando TODOS los datos desde el origen hasta el destino. Una tabla de destino se trunca antes de cargar todo desde el origen. Por eso esta técnica también se conoce como Carga Destructiva . Esta técnica también es más fácil de hacer. Y esto también garantiza la máxima integridad de los datos. Pero el tamaño de sus datos hoy es mayor que ayer. Por lo tanto, si usa esto en datos en constante crecimiento, el proceso se volverá más lento con el tiempo.

Casos de uso de carga completa de ETL

  • El tamaño de los datos de origen es pequeño y no crecerá significativamente en los próximos años. Los ejemplos incluyen una lista de colores, algunas categorías/clasificaciones, una lista de países y ciudades, y muchos más.
  • Es difícil decir cuál es nuevo o cambiado en la fuente.
  • Los datos deben ser exactamente iguales desde el origen hasta el destino
  • El historial de los datos es irrelevante y se sobrescribe con mayor frecuencia

Carga incremental en ETL

Mientras tanto, Incremental Load también es como sugiere el nombre. Solo los datos que cambiaron se cargarán desde el origen hasta el destino. Esto se hace gradualmente con el tiempo. Los que no cambiaron permanecerán como están. Esto es un poco difícil de hacer. Debe asegurarse de que todos los cambios se hayan recopilado y cargado en el destino. Pero esto funcionará más rápido que Carga completa en datos muy grandes.

Casos de uso de carga incremental de ETL

  • El tamaño de los datos es muy grande y las consultas serán muy lentas para conjuntos de resultados grandes
  • Los cambios son fáciles de consultar
  • Los datos eliminados deben conservarse en el destino, como un sistema de auditoría

¿Qué es la carga incremental en SSIS

Los componentes básicos de una carga incremental en SSIS se muestran en la Figura 1.

La carga incremental en SSIS tiende a ser más compleja según sus requisitos. Pero la sencilla “tarjeta de recetas” de la Figura 1 incluye lo que necesita para “cocinar” los datos en incrementos. La captura de cambios en los datos es la parte desafiante. Puedes estropear el destino si no tienes cuidado.

En las secciones siguientes, verá cómo realizar una carga incremental en SSIS con ejemplos. Estos incluyen el uso de ChangeData Capture (CDC), columnas DateTime y búsquedas. También verá cómo se hace esto usando los componentes Devart SSIS.

Comparemos la carga incremental con la carga completa en SSIS en la siguiente sección.

La diferencia entre carga completa y carga incremental en SSIS

Ya vio cómo se ve la carga incremental en SSIS (Figura 1). Mientras tanto, así es como funciona con la carga completa de SSIS en la Figura 2 a continuación.

La diferencia entre carga completa y carga incremental en SSIS está en el diseño del paquete. Un diseño de carga completa necesita menos componentes arrastrados al paquete SSIS. Es tan simple que hay poco pensamiento involucrado. Es por eso que, por un falso sentido de productividad, algunos desarrolladores tienden a recurrir a esta técnica la mayor parte del tiempo.

Pero ejecutar un paquete de diseño de carga completa todas las noches no es recomendable para grandes datos, digamos 15 TB. ¿Crees que terminará a tiempo antes de que lleguen los usuarios por la mañana? Eso no sucederá porque está tratando de volver a insertar los registros que no cambiaron en absoluto. Si eso es alrededor del 70% de los datos, necesita más tiempo de inactividad dependiendo de los recursos del servidor.

Eso es inaceptable.

Por lo tanto, cuanto más necesite usar carga incremental en estos escenarios. En las siguientes secciones, aprenderá cómo cargar datos más rápido mediante la carga incremental.

Carga incremental en SSIS mediante CDC

Primero, consideremos usar Change Data Capture (CDC). Tenga en cuenta que de aquí a los siguientes 3 ejemplos, usaremos ejemplos simples. Por lo tanto, el diseño del paquete no desdibujará el objetivo.

Antes de comenzar con el ejemplo, esta sección cubrirá lo siguiente:

  • Primero, cómo habilitar CDC en una base de datos y una tabla
  • Luego, crear el paquete SSIS para la carga incremental de SSIS mediante CDC
  • Finalmente, ejecutar y verificar los resultados

La Figura 3 muestra los constituyentes de este ejemplo.

Change Data Capture (CDC) registra inserciones, eliminaciones y actualizaciones en una tabla. Antes de que pueda hacer que este ejemplo funcione, necesita una base de datos y una tabla que esté configurada para CDC.

Cómo habilitar CDC en una base de datos y una tabla

La configuración predeterminada de la base de datos y la tabla es sin CDC. Para hacer que una base de datos esté habilitada para CDC, esta es la sintaxis de T-SQL:

-- point to the database you need to CDC-enable
USE SportsCarSales
GO

-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO

Luego, para verificar si CDC está realmente habilitado, ejecute esto:

select name from sys.databases
where is_cdc_enabled=1

Si aparece el nombre de la base de datos que habilitó para CDC, está listo para comenzar. Su base de datos ahora está habilitada para CDC.

Pero no termina aquí. Debe indicar qué tabla desea rastrear para cualquier cambio. La sp_cdc_enable_table hará el truco. A continuación se muestra un ejemplo de eso.

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'sportsCarSales',
@role_name     = NULL,
@supports_net_changes = 1
GO

Ejecutar el código anterior debería generar mensajes similares a continuación:

Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.

Esos mensajes son los 2 nuevos trabajos del Agente SQL Server creados después de habilitar una tabla para CDC. Es por eso que necesita el Agente SQL Server para que CDC funcione. Vea una captura de pantalla en la Figura 4.

Hacer inserciones, eliminaciones y actualizaciones en sportsCarSales table registrará automáticamente los cambios en otra tabla llamada cdc.dbo_sportsCarSales_CT . Esta tabla tiene columnas como la original. Vea una captura de pantalla en la Figura 5.

La _$operación La columna de la tabla de la izquierda es de particular interés. Los valores posibles para esta columna son 1 (Eliminar), 2 (Insertar), 3 y 4 (Actualizar). La actualización usa 2 valores:uno para los valores de columna before la actualización (eso es 3). Y el otro para valores de columna después la actualización (eso es 4). Puede verificar esta columna cuando verifique los valores antes de ejecutar su paquete SSIS. El CDCSource y divisor de CDC Los componentes utilizan esta tabla para identificar cambios. Más sobre esto en la siguiente sección.

Creación del paquete SSIS para la carga incremental de SSIS mediante CDC

Estos son los pasos para crear el paquete SSIS con carga incremental mediante CDC. Esto supone que ya tiene un paquete en blanco en Visual Studio 2019. Nuestro objetivo aquí es cargar las filas de sportsCarSales tableinto the FactSportsCarSales tabla de hechos en un almacén de datos.

El siguiente es el resumen de los pasos:

PASO 1. Crear 2 administradores de conexión de base de datos
PASO 2. Arrastre 2 tareas de control de CDC al flujo de control
PASO 3. Arrastre una tarea de flujo de datos y conéctese a la tarea de control de CDC

PASO #1. Crear 2 administradores de conexión de base de datos

Necesitamos 2 conexiones de base de datos aquí. Una es la conexión ADO.Net que debe apuntar a la base de datos habilitada para CDC. Y luego, cree una conexión OLE DB a un almacén de datos como destino. Ambos son bases de datos de SQL Server 2019. Consulte las Figuras 6 y 7 correspondientes. En este ejemplo, ambas bases de datos están en la misma máquina. Y estamos usando la autenticación de Windows para conectarnos.

Entonces, en los Administradores de conexión ventana, haga clic derecho y seleccione Nueva conexión ADO.Net . Luego, complete la configuración del servidor, la autenticación y la base de datos como se ve en la Figura 6 a continuación.

Luego, cree una conexión OLE DB al almacén de datos. En la ventana Administrador de conexiones, haga clic con el botón derecho y seleccione Nueva conexión OLE DB. . Luego, complete el nombre del servidor, la autenticación y la base de datos. Especifique el almacén de datos aquí.

PASO #2. Arrastre 2 tareas de control de CDC al flujo de control

Hay 2 cosas que debemos hacer después de arrastrar una tarea de control de CDC en el flujo de control.

Marcar inicio CDC

Primero, necesitamos configurar la tarea de control de CDC para marcar el inicio de CDC. Y luego, cree una tabla de estado de CDC. Esto se puede hacer en una ventana de configuración. Consulte la Figura 8 a continuación.

Siguiendo los pasos numerados en la Figura 9, los siguientes son los detalles.

  1. Seleccione la conexión ADO.Net que creamos en la Figura 6.
  2. Luego, seleccione Marcar como inicio de CDC .
  3. Haga clic en Nuevo para crear una variable de estado CDC. Luego, aparecerá una ventana. Haz clic en Aceptar para crear el nombre de variable predeterminado Usuario::CDC_State .
  4. Seleccione la conexión ADO.Net para que podamos almacenar el estado de CDC en esa base de datos.
  5. Haga clic en Nuevo para crear una tabla para almacenar el estado. El script ya está creado para usted. Por lo tanto, simplemente haga clic en Ejecutar en la siguiente ventana.
  6. Luego, seleccione CDC_State como el nombre del estado.
  7. Finalmente, haga clic en Aceptar .

Después de configurar esta tarea de control de CDC, ejecute el paquete. Todavía no verá los registros copiados en la otra base de datos. Pero la tabla de estado (dbo.cdc_state ) se completará con valores iniciales.

Desde aquí, puede optar por deshabilitar esta tarea de control de CDC o sobrescribirla nuevamente con nuevos valores en la siguiente tarea.

Obtener rango de procesamiento

Puede arrastrar una nueva tarea de control de CDC al flujo de control o sobrescribir la anterior. La configuración es la misma que en la Figura 9, excepto por la Operación de Control CDC (#2). Esta vez, seleccione Obtener rango de procesamiento . Luego, haga clic en Aceptar . Conéctelo a la tarea de flujo de datos en el PASO 3 más adelante.

Marcar rango procesado

Configure la otra tarea de control de CDC como la primera, excepto que esta vez, seleccione Marcar rango procesado para la Operación de Control CDC. Conecte la Tarea de Flujo de Datos en el PASO #3 a esto.

Paso #3. Arrastre una tarea de flujo de datos y conéctese a la tarea de CDCControl

Esta tarea de flujo de datos realizará la extracción y la carga como se ve en la Figura 3 anterior. Antes de profundizar en los detalles de cada paso, he aquí un resumen:

A. Agregar una fuente de CDC
B. Agregue un divisor de CDC y conéctelo a la fuente de CDC
C. Agregue un comando OLE DB para eliminar registros
D. Agregar un destino OLE DB para insertar registros
E. Agregar otro comando OLE DB para actualizar registros

Ahora, vamos a sumergirnos.

A. Agregar una fuente de CDC

Arrastre una fuente de CDC componente con la configuración que se muestra en la Figura 9 a continuación.

Siguiendo los pasos numerados en la Figura 9, los siguientes son los detalles:

  1. Primero, seleccione la conexión ADO.Net que creamos en la Figura 6.
  2. Luego, seleccione la tabla habilitada para CDC sportsCarSales .
  3. Seleccione la instancia de captura dbo_SportsCarSales .
  4. Luego, seleccione Neto para el modo de procesamiento CDC. Esto devolverá cambios netos solamente. Para obtener una descripción detallada de cada modo de procesamiento, consulte este enlace. También puede hacer clic en Vista previa para ver qué filas se incluirán.
  5. Seleccione la variable Estado de CDC que creamos anteriormente (Figura 9).
  6. Finalmente, haga clic en Aceptar .
B. Agregue un divisor de CDC y conéctelo a la fuente de CDC

El único requisito de un divisor CDC es una fuente de los CDC que lo precede. Por lo tanto, conecte la fuente de CDC anterior a este componente. Esto separará los cambios en inserciones, actualizaciones y eliminaciones.

C. Agregue un comando OLE DB para eliminar registros

Primero, debe etiquetar este componente como Eliminar registros (consulte la figura 3). Luego, conéctelo al CDC Splitter. Cuando aparezca un mensaje, seleccione Eliminar salida. para la salida y haga clic en OK .

Luego, configure el comando OLE DB Administradores de conexión pestaña. Consulte la figura 10.

A continuación, en las Propiedades del componente pestaña, especifique el comando DELETE para el SQLCommand propiedad. El comando debería ser así:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Vea una captura de pantalla en la Figura 11 a continuación.

El signo de interrogación creará un parámetro para SalesID . Cada SalesID valor proveniente del CDCSplitter se usará para eliminar filas en FactSportsCarSales mesa.

Luego, en las Asignaciones de columnas pestaña, asigne el SalesID columna de la tabla al parámetro (Param_0 ) Consulte la figura 12.

Finalmente, haga clic en Aceptar.

D. Agregue un destino OLE DB para insertar registros

Primero, arrastre un Destino OLE DB . Luego, etiquételo como Insertar registros . Conéctelo al divisor CDC . Luego, seleccione Insertar salida cuando aparece un indicador de ventana. Consulte la Figura 14 para ver la configuración básica.

Siguiendo los pasos numerados en la Figura 13, a continuación se encuentran los detalles:

  1. Primero, seleccione la conexión OLE DB que creamos en la Figura 7.
    Luego, seleccione FactSportsCarSales tabla de hechos.
  2. Finalmente, haga clic en Aceptar .
E. Agregar un comando OLE DB para actualizar registros

Arrastre otro comando OLE DB y etiquételo como Actualizar registros. Luego, conéctelo al divisor CDC . Elegirá automáticamente el UpdateOutput producción. Los Administradores de conexiones la configuración de la pestaña debe ser la misma que en la Figura 11.

Pero el Component PropertiesSQLCommand debería tener un valor como este:

UPDATE [dbo].[FactSportsCarSales]
   SET [ClientID] = ?
      ,[SportsCarID] = ?
      ,[PurchaseDate] = ?
      ,[Quantity] = ?
      ,[UnitPrice] = ?
 WHERE [SalesID]= ?

El número de signos de interrogación en el código anterior le indicará cuántos parámetros usar a partir de Param_0 .La posición de los parámetros de Param_0 a Param_5 se organiza en función de su lugar en el código. Entonces, Param_0 es para ID de cliente , Param_1 es para SportCarID , y así sucesivamente.

Consulte las asignaciones de columnas en la figura 15.

Después de configurar CDC en el nivel de base de datos y tabla, la forma de probar si CDC funciona es agregando y cambiando filas. Entonces, agreguemos algunos registros a la tabla.


USE SportsCarSales
GO

INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
	VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
	(5, 1920, '01/22/2022', 1, 845000.0000),
		(54, 1920, '01/15/2022', 1, 845000.0000),
		(62, 1920, '02/04/2022', 1, 845000.0000);
GO

Para ver si esto está registrado en CDC, consulte cdc.dbo_sportsCarSales_CT mesa.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Consulte los resultados en la captura de datos modificados después del comando INSERT en la Figura 15.

Entonces, grabó las inserciones. Eso es bueno.

Ahora, intente ejecutar el paquete SSIS antes. El resultado debe ser el mismo que el de la Figura 16 a continuación.

Figura 16 . Resultado del tiempo de ejecución del paquete SSIS para la carga incremental mediante CDC.

Y por último, consultando los resultados en el FactSportsCarSales la tabla revela el mismo conjunto de 4 registros.

Carga incremental en SSIS mediante columnas de fecha y hora

La carga incremental en SSIS mediante DateTimecolumns es otra forma de recopilar datos en incrementos. Si hace ETL en una tabla sin CDC, esta es su próxima opción.

La tabla de origen puede tener un Modificado o Última actualización columna como la de la Figura 17.

Consultar los cambios es conocer el máximo Modificado valor de la columna del destino. Luego, consulte todos los registros de la fuente que tengan más de Modificado valor de columna del destino.

Los ingredientes típicos de esta técnica se muestran en la Figura 18.

Siga las instrucciones sobre cómo cocinar este tipo de carga incremental. Los siguientes son los subtemas de esta sección:

  • Crear el paquete para realizar una carga incremental de SSIS con columnas DateTime
  • Resultados del tiempo de ejecución del paquete

Creación del paquete para realizar cargas incrementales de SSIS con columnas de fecha y hora

Nuestro objetivo es cargar los SportsCars tabla en dimSportsCars tabla de dimensiones en otra base de datos. El siguiente es un resumen de los pasos:

PASO 1. Crear 2 administradores de conexión OLE DB
PASO 2. Crear 2 variables de paquete
PASO 3. Agregar una Ejecutar tarea SQL en el Flujo de Control
PASO 4. Agregar una tarea de flujo de datos

Comencemos.

PASO #1. Cree 2 administradores de conexión OLE DB

La primera conexión OLE DB es de una base de datos transaccional. Y la configuración es simple, como se muestra en la Figura 19.

Luego, cree otra conexión OLE DB al almacén de datos. Debería ser igual que en la Figura 7.

PASO #2. Crear 2 variables de paquete

La primera variable contendrá la última fecha de modificación de dimSportsCars tabla de dimensiones Luego, el segundo contendrá la consulta SQL personalizada.

A. Cree la variable Usuario::sportsCars_lastUpdate
  1. En las Variables ventana, haga clic en Agregar variable .
  2. Nombralo sportsCars_lastupdate .
  3. Establezca el tipo de datos en DateTime .
B. Cree la variable Usuario::sqlCommand
  1. En las Variables ventana, haga clic en Agregar variable .
  2. Nómbrelo sqlCommand .
  3. Establezca el tipo en Cadena .
  4. Haga clic en el botón de puntos suspensivos para crear la Expresión . Consulte la Figura 21 para el Generador de expresiones ventana y la expresión de cadena real.
  5. Haga clic en Aceptar .

La cadena SQL debería ser así:

"SELECT  SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified 
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate]  + "' 
ORDER BY SportsCarID;"

Tenga en cuenta que establecemos la cláusula WHERE en Modified mayor que Usuario::sportsCars_lastupdate .

Habrá más detalles sobre la configuración de las 2 variables en los pasos siguientes.

PASO #3. Agregue una tarea Ejecutar SQL en el flujo de control

Esta tarea consultará la tabla de destino para obtener el último Modificado valor de la fecha Arrastre una Ejecutar tarea SQL al Flujo de Control. Luego, etiquételo como Obtener la última fecha de modificación de DW . Luego, vea la configuración en la Figura 21.

Las propiedades importantes a establecer aquí son la Conexión , Declaración SQL y Conjunto de resultados propiedades.

Establecer la Conexión propiedad a la segunda conexión OLE DB establecida en el PASO #1. Luego, configure la SQLStatement propiedad al código de abajo.

select max(modified) as LastUpdate from dimSportsCars

Luego, configure el ResultSet propiedad a una fila única .

Finalmente, debe asignar la Última actualización alias de columna (consulte el código anterior) al Usuario::sportsCars_lastupdate variable. Vea una captura de pantalla en la Figura 22.

Finalmente, haga clic en Aceptar para guardar la nueva configuración.

PASO #4. Agregar una tarea de flujo de datos

Arrastre una tarea de flujo de datos al flujo de control y conecte la ejecutar tarea SQL lo. Luego, etiquete la tarea de flujo de datos Actualizar la dimensión dimSportsCars . Luego, siga los pasos para agregar componentes a la tarea de flujo de datos .

La tarea de flujo de datos tiene varios pasos dentro de él:

A. Agregar una fuente OLE DB
B. Agregar una transformación de búsqueda para comparar el origen con el destino
C. Agregar un comando OLE DB para actualizar registros
D. Agregar un destino OLE DB para insertar registros

Ahora, comencemos.

A. Agregar una fuente OLE DB

Esta fuente OLE DB consultará la tabla de origen para los registros modificados. Consulte la configuración en la Figura 23.

Siguiendo los números de la Figura 23, estos son los detalles:

  1. Primero, especifique la conexión OLE DB que creamos. Consulte la figura 20.
  2. Luego, configure el Modo de acceso a datos a comando SQL de la variable .
  3. Luego, seleccione la variable User::sqlCommand que creamos anteriormente. Consulte la figura 21.
  4. Finalmente, haga clic en Aceptar .
B. Agregue una transformación de búsqueda para comparar el origen con el destino

Ahora, necesitamos tener una forma de comparar las tablas de origen y de destino. Podemos usar la búsqueda Transformationcomponent para hacer eso. Esto realizará una unión entre las 2 tablas.

Por lo tanto, arrastre una búsqueda Transformación en el flujo de datos y asígnele el nombre Clasificar el cambio . Luego, conéctelo a la Fuente OLE DB más temprano. Haz doble clic en él. Consulte la Figura 24 para configurar el General página.

Establezca el menú desplegable en Redirigir filas para resultados sin coincidencia como se ve en la Figura 24. Esto significa que vamos a usar las filas que no tienen coincidencia. Y en este caso, esto es para detectar filas presentes en el origen pero no en el destino.

A continuación, haga clic en Conexión en el panel izquierdo del Editor de transformación de búsqueda . Luego, vea la Figura 25 sobre qué configurar.

En la Figura 26, debe especificar la conexión OLE DB para la tabla de destino. (Ver Figura 7). Y luego, establezca la consulta SQL en el código a continuación.

SELECT SportsCarID from dimSportsCars

Solo necesitamos el SportsCarID columna para comparar, así que usamos una consulta en lugar de la tabla completa.

A continuación, haga clic en Columnas para establecer la asignación de la columna de clave de consulta de origen al destino. Vea la Figura 26 para el mapeo.

Como se ve en la Figura 26, debe haber una línea desde el origen hasta el destino utilizando el SportsCarID columna clave. Ambas columnas clave se utilizarán para la comparación.

Finalmente, haga clic en Aceptar .

C. Agregue un comando OLE DB para actualizar registros

Esta parte actualizará los registros que coincidan con SportsCarID valores clave de la búsqueda Transformación.

Entonces, arrastre un comando OLE DB en el Flujo de datos y asígnele el nombre Actualizar dimSportsCars . Luego, conéctelo a la búsqueda Transformación anterior. Cuando aparezca un aviso, configure la Salida para buscar resultado de coincidencia . Luego, haga clic en Aceptar .

Haga doble clic en el comando OLE DB y establezca las propiedades en los Administradores de conexión pestaña. Consulte la figura 27.

La Figura 27 muestra que debe configurar el Administrador de conexión a la base de datos de destino (consulte la figura 8). Luego, haga clic en Propiedades del componente pestaña. Consulte la Figura 28 para ver la configuración de las propiedades.

La propiedad SQLCommand se establece en:

UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?

Ya hicimos algo similar antes. Los signos de interrogación son marcadores de posición de parámetros. Y si asignamos la columna de origen correcta, se establecerá la columna de destino correspondiente. Consulte las asignaciones en la Figura 29.

Finalmente, haga clic en Aceptar .

D. Agregue un destino OLE DB para insertar registros

Esta parte insertará nuevos registros encontrados en los SportsCars mesa en el dimSportsCars tabla de dimensiones.

Entonces, arrastre un Destino OLE DB componente y asígnele el nombre Insertar nuevos registros en dimSportsCars. Haga doble clic en él y establezca la conexión y la tabla de destino. Consulte la figura 30.

Como se muestra en la Figura 30, establezca la conexión con el almacén de datos (Figura 8) y seleccione dimSportsCars tabla de dimensiones.

A continuación, haga clic en Asignaciones página para ver si las columnas se asignan en consecuencia. Dado que los nombres de las columnas son los mismos tanto en el origen como en el destino, se asignarán automáticamente.

Finalmente, haga clic en Aceptar .

Resultados del tiempo de ejecución del paquete

Ahora que el paquete está completo, aquí hay una captura de pantalla del resultado en la Figura 31.

El proceso actualizó 8 filas e insertó 1 fila nueva en dimSportsCars tabla de dimensiones.

Carga incremental en SSIS mediante búsqueda

Otro método para realizar una carga incremental es comparar el origen con el destino para ver qué se debe insertar, actualizar y eliminar. Y esta es su opción si no hay una columna DateTime ni CDCon en ambas tablas. Una forma de hacerlo es usar Buscar Transformación.

Los ingredientes típicos de este enfoque se muestran en la Figura 32.

Tenga en cuenta que el enfoque simple de la Figura 32 se aplica a las tablas que no permiten eliminaciones permanentes. Si es necesario manejar las eliminaciones, se puede aplicar una unión de fusión usando una unión completa.

Hay 2 subtemas para esta sección:

Crear el paquete SSIS para la carga incremental de SSIS mediante Lookup
Resultados del tiempo de ejecución del paquete

Vamos a sumergirnos.

Creación del paquete SSIS para la carga incremental de SSIS mediante búsqueda

Nuestro objetivo aquí es cargar las filas de Fabricantes tabla en los dimManufacturers tabla de dimensiones.

Esto supone que tiene un paquete SSIS en blanco listo.

El siguiente es el resumen de los pasos:

PASO 1. Crear 2 conexiones OLE DB
PASO 2. Agregar una tarea de flujo de datos

Comencemos con el ejemplo.

PASO #1. Crear 2 conexiones OLE DB

Puede consultar la Figura 19 para el origen y la Figura 7 para el destino. Estamos usando los mismos administradores de conexión aquí.

PASO #2. Agregar una tarea de flujo de datos

Arrastre una tarea de flujo de datos en el Flujo de control y asígnele el nombre Actualizar tabla de dimensiones de fabricantes. Haz doble clic en él y sigue los siguientes pasos. A continuación se resumen los pasos dentro de la tarea de flujo de datos .

A. Agregar una Fuente OLE DB
B. Agregar una búsqueda Transformación para buscar nuevos registros
C. Agregar un Destino OLE DB para insertar registros.
D. Agregar otra búsqueda Transformación para buscar cambios
E. Agregar un comando OLE DB para actualizar la tabla de destino

A. Agregue una fuente OLE DB

Arrastre una Fuente OLE DB y etiquételo como Fabricantes . Configurar el Administrador de conexiones como se ve en la Figura 33.

B. Agregar una transformación de búsqueda para buscar nuevos registros

Esta búsqueda La transformación buscará registros que no existen en el objetivo según el ID del fabricante columna clave. Y todas las filas que no coinciden son candidatas para insertar en la tabla.

Arrastre una búsqueda transformación y asígnele el nombre Buscar dimFabricantes. Luego, haga doble clic en él.

La configuración para General La página debe ser la misma que en la Figura 24. Mientras tanto, establezca la conexión con el almacén de datos y use una consulta para las Conexiones configuración de página. Consulte la figura 34.

C. Agregue un destino OLE DB para insertar registros

Arrastre un Destino OLE DB y asígnele el nombre Insertar nuevos registros. Conéctelo a la búsqueda Transformación y seleccione Buscar resultado sin coincidencia cuando aparece un aviso. Haga doble clic en él y configure la conexión y la tabla de destino como se ve en la Figura 35.

Las tablas de origen y de destino tienen los mismos nombres de columna y se asignarán automáticamente. Consulte la figura 36.

Finalmente, haga clic en Aceptar .

D. Agregar otra transformación de búsqueda para buscar cambios

A diferencia de la búsqueda anterior Transformación, esta buscará cambios en el Fabricante columna. Y si hay cambios, será un candidato para la actualización de la tabla.

Arrastre otra búsqueda Transformación y asígnele el nombre Registros de búsqueda que cambiaron. Conéctelo a la primera búsqueda Transformación. El General La página para esta búsqueda debe ser la misma que en la Figura 24.

Mientras tanto, la Conexión La página debería parecerse a la Figura 37 a continuación.

Mientras tanto, observe las asignaciones en la Figura 38.

La Figura 38 muestra asignaciones a través de Fabricante nombre. Si no es igual, hay un cambio en la fuente. Y debe copiarse en el destino.

E. Agregue un comando OLE DB para actualizar la tabla de destino

La configuración debe ser la misma que en la Figura 29, excepto por SQLCommand . El comando ACTUALIZAR debería ser así:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Ajuste las asignaciones de columnas a los parámetros en consecuencia.

Resultados del tiempo de ejecución del paquete

¿Hecho? Luego, ejecute el paquete. Verá resultados de tiempo de ejecución iguales a los de la Figura 39.

La mejor herramienta para cargar datos SSIS

Todos los ejemplos que teníamos anteriormente usan los componentes listos para usar que vienen de Microsoft. Si bien es lo suficientemente bueno para algunos proyectos, ¿qué sucede si tiene que integrar las fuentes de la nube y la base de datos a través de SSIS?

Aquí es donde entran en juego los componentes Devart SSIS. Estos componentes de SSIS son cómodos de usar. Y ofrecen carga de datos de alto rendimiento mediante optimizaciones específicas de fuentes de datos y almacenamiento en caché avanzado. También tienen más de 40 fuentes de datos, incluidos los favoritos de RDBMS como MySQL, PostgreSQL y Oracle. También se incluyen servicios en la nube como Salesforce, HubSpot, Google Analytics y mucho más. Por lo tanto, vale la pena intentar cargar millones de registros en SSIS usando Devart SSIS Components.

¿Por qué no un ejemplo?

Uso de componentes Devart SSIS para realizar cargas incrementales

Intentemos replicar los dimManufacturers tabla en MySQL y use Lookup de Devart y Destino componentes para MySQL. La receta se muestra en la Figura 40.

Comencemos agregando un nuevo paquete SSIS a su proyecto de Visual Studio Integration Services. Luego, agregue una Tarea de flujo de datos y haga doble clic en él. Luego, siga los pasos a continuación.

Antes de eso, aquí hay un resumen de los pasos:

PASO 1. Agregar una Fuente OLE DB
PASO 2. Agregue un Administrador de conexiones Devart MySQL
PASO 3. Agregue una búsqueda Devart MySQL para buscar nuevos registros
PASO 4. Agregue otra búsqueda Devart MySQL Transformación para buscar cambios
PASO #5. Agregue un destino Devart MySQL para insertar registros
PASO #6. Agregar otro Destino Devart MySQL para actualizar registros

STEP #1. Add an OLE DB Source

This will connect to the SQL Server database we had earlier. Please refer to Figure 8. Then, set the table to dimManufacturers .

STEP #2. Add a Devart MySQL Connection Manager

We need this connection for the destination database and table. So, in the Connection Managers window, right-click and select New Connection . Then, select the DevartMySQL Connection Manager type. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.

I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.

STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records

Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager más temprano. Now, follow the configuration in Figure 42.

Following the numbers in Figure 42, the following are the details:

  1. First, select the Devart MySQL Connection Manager created in STEP #2.
  2. Then, select the dimmanufacturers table.
  3. In Lookup Columns , mark checked the ManufacturerID column.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

NOTA :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.

STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes

This second MySQL Lookup will scan forrecords that changed.

Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .

The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .

STEP #5. Add a Devart MySQL Destination to Insert Records

This step will insert records from thesource that have no match in the target.

So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.

In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.

After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.

Finally, click OK .

STEP #6. Add Another Devart MySQL Destination to UpdateRecords

Unlike the other Devart MySQLDestination , this will update records that changed from the source.

So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Transformación. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.

Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.

Package Runtime Results

See the runtime results in Figure 46.

Conclusión

That’s it.

You learned 3 ways to do incremental load in SSIS by using the following:

  • Change Data Capture
  • DateTime Columns
  • Lookup Transformation

You also learned how to do it using DevartSSIS Components.

Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.

Anyway, if you like this post, please shareit on your favorite social media platforms.