Este documento trata sobre las transformaciones en SSIS que nunca se pensaron posibles. Se discuten varios temas como usar componentes nativos de SSIS, correr totales, y crear componentes personalizados desde cero con código. El documento también compara el rendimiento de componentes SSIS frente a componentes personalizados.
Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...
ETL: Transformaciones en SSIS que nunca pensé
1.
2.
3. BIN-303
ETL: Transformaciones en SSIS que
nunca pensé
Francisco González
Mentor
Sergio Carrillo
DPE
Alexandre Bernárdez
DPS
{fgonzalez,abernardez,scarrillo}@solidq.com
4. Transformaciones en SSIS
Agenda
α Con componentes nativos
β Conocer el problema
β Tipos de componetnes
β Barajar alternativas
α Running Totals
α Con código desde cero
β Motivación
β Métodos en tiempo de diseño
β Métodos en tiempo de ejecución
β Interfaces personalizadas
5. Con componentes nativos
Conocer el problema
α Sistemas antiguos
β Bases de datos basadas en columnas
γ Arrastrar modelos de información
γ Almacenamiento histórico de la información
β Utilización de ficheros planos
α Necesidades del negocio
β Granularidad tablas de hechos
β Nuevas líneas de negocio
6. Con componentes nativos
Tipos de componentes
Síncrono No bloqueante Asíncrono Semibloqueante Asíncrono Bloqueante
Conditional Split Data Mining Query Aggregate
Derived Column Merge Sort
Lookup Merge Join Term Extraction
Multicast Pivot Fuzzy Grouping
Script Component Unpivot Fuzzy Lookup
Ole DB Command Union All Row Sampling
Row Count Term Lookup
Character Map
Slowly Changing Dimension
………….
7. Con componentes nativos
Tipos de componentes
No bloqueante Semibloqueante Bloqueante
Síncrono o Asíncrono Síncrono Asíncrono Asíncrono
Filas entrada y salida 1:1 1:N 1: N
Creación nuevo buffer No Si Si
Leer todas las entradas No No Si
antes de generar salida
19. Con código desde cero
Motivación (I)
α Extender las funcionalidades de SSIS no es fácil
β Dificultad
β Costes temporales
α Cuando sea posible debemos hacer uso de la tarea de
Script
β Fácil
β Rápido
20. Con código desde cero
Motivación (y II)
α Utilizamos Script cuando
β La funcionalidad es especifica de un paquete individual
α Utilizaremos un componente personalizado cuando
β La funcionalidad es genérica y se podría utilizar en otros paquetes y
por otros desarrolladores.
β Si el código se reutiliza dentro del mismo paquete.
β Si la implementación cambia con el tiempo
21. Pasos para elaborar un
componente personalizado
Desarrollo
• Creación de un proyectos de librería de clases
• Heredar de las clases adecuadas
• Construir interfaz gráfica
Generación
• Compilación
• Firmar el ensamblado
Implementación
• Instalar el ensamblado en la GAC
Instalación en SSIS
• Agregar DLL a la carpeta adecuada
• Agregar a la barra de herramientas
Pruebas
• Probar el componente con un paquete
22. Componente personalizado
Clases de las que heredar
Objeto Personalizado Clase Base Atributo Métodos importantes
Tarea Task DtsTaskAttribute Execute
Administrador de ConnectionManagerBase DtsConnectionAttribute AcquireConnection,
Conexiones ReleaseConnection
Proveedor de Registro LogProviderBase DTsLogProviderAttribute OpenLog, Log, CloseLog
Enumerador ForEachEnumerator DtsForEachEnumeratorAt GetEnumerator
tribute
Componente de flujo de PipelineComponent DtsPipelineComponentA ProvideComponentProp
datos ttribute erties, PrimeOutput,
ProcessInput
23. Componente personalizado
αMétodos a Implementar (Tiempo de diseño)
public override void
ProvideComponentProperties()
public override DTSValidationStatus Validate()
public override IDTSInputColumn100
SetUsageType(int inputID, IDTSVirtualInput100
virtualInput, int lineageID, DTSUsageType
usageType)
public override void ReinitializeMetaData()
27. Resumiendo
Métodos a implementar (Tiempo de ejecución)
α PreExecute
β Se ejecuta el primero
β Recopilación de información sobre la localización
α PrimeOutput
β Añade a los buffers de salidas las filas de datos
α ProcessInput
β Lleva la lógica del componente
β Se llama cada vez que hay un buffer de entrada lleno
28. Interfaces Personalizados
Clases de las que heredar
Objeto Personalizado Clase base interfaz Comportamiento si no
usuario se proporcion UI
Tarea IDtsTaskUI Ventana de Propiedades
Administrador de IDtsConnectionManager Ventana de Propiedades
Conexiones UI
Proveedor de Registro IDtsLogProviderUI Cuadro de texto en la
columna configuración
Enumerador ForEachEnumeratorUI Ventana de propiedades
Componente de flujo de IDtsComponentUI Editor Avanzado
datos