SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
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
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
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
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

………….
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
Con componentes nativos
Barajar las alternativas

α T-SQL

α Componentes propios de SSIS

α Háztelo tú mismo
Háztelo tu mismo: Unpivot
Con componentes nativos
Comparativas: Tiempos de ejecución




         5

         4
                                         Ejecucion 1
         3                               Ejecucion 2
         2                               Ejecucion 3
                                         Ejecucion 4
         1
                                         Ejecucion 5
         0
              Componente    Componente
                 SSIS         Casero
Running Totals
     DATE         PRODUCT   STOCKDIFF

     01/07/2010   Avena     15

     01/07/2010   Naranja   7

     01/07/2010   Melón     5

     02/07/2010   Avena     -5

     02/07/2010   Naranja   -7

     02/07/2010   Melón     4

     03/07/2010   Avena     4

     03/07/2010   Naranja   3

     03/07/2010   Melón     -8
Running Totals
 DATE         PRODUCT   STOCKDIFF   STOCK

 01/07/2010   Avena     15          15

 01/07/2010   Naranja   7           7

 01/07/2010   Melón     5           5

 02/07/2010   Avena     -5          10

 02/07/2010   Naranja   -7          0

 02/07/2010   Melón     4           9

 03/07/2010   Avena     4           14

 03/07/2010   Naranja   3           3

 03/07/2010   Melón     -8          1
Running Totals
     DATE         PRODUCT   STOCKDIFF

     01/07/2010   Avena     15

     01/07/2010   Naranja   7

     01/07/2010   Melón     5

     02/07/2010   Avena     -5

     02/07/2010   Naranja   -7

     02/07/2010   Melón     4

     03/07/2010   Avena     4

     03/07/2010   Naranja   3

     03/07/2010   Melón     -8
Running Totals
        DATE           PRODUCT        STOCKDIFF       STOCK
        01/07/2010     Avena          15              15
        01/07/2010     Naranja        7               7
        01/07/2010     Melón          5               5
        02/07/2010     Avena          -5              10
        02/07/2010     Naranja        -7              0
        02/07/2010     Melón          4               9
        03/07/2010     Avena          4               14
        03/07/2010     Naranja        3               3
        03/07/2010     Melón          -8              1


select b.idmovimiento,b.producto,SUM(b.Stockdiff) from Movimientos a
inner join
Movimientos b
on a.Producto=b.Producto and a.idmovimiento<=b.idmovimiento
group by b.idmovimiento,b.Producto
Running Totals
Running Totals MEC MEC
    DATE         PRODUCT   STOCKDIFF

    01/07/2010   Avena     15

    02/07/2010   Avena     -5

    03/07/2010   Avena     4

    01/07/2010   Naranja   7

    02/07/2010   Naranja   -7

    03/07/2010   Naranja   3

    01/07/2010   Melón     5

    02/07/2010   Melón     4

    03/07/2010   Melón     -8
Running Totals MEC MEC
 DATE         PRODUCT   STOCKDIFF   STOCK

 01/07/2010   Avena     15          15

 02/07/2010   Avena     -5          10

 03/07/2010   Avena     4           14

 01/07/2010   Naranja   7           7

 02/07/2010   Naranja   -7          0

 03/07/2010   Naranja   3           3

 01/07/2010   Melón     5           5

 02/07/2010   Melón     4           9

 03/07/2010   Melón     -8          1
Paralelismo en SSIS
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
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
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
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
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()
Métodos a implementar (Tiempo de diseño)
Componente personalizado
αMétodos a Implementar (Tiempo de ejecución)
public override void PreExecute()
public override void ProcessInput(int inputID,
PipelineBuffer buffer)
public override void PrimeOutput(int outputs,
int[] outputIDs, PipelineBuffer[] buffers)
Métodos a implementar (Tiempo de ejecución)
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
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
Interfaces Personalizadas
Modelo de comunicación



           UI



                Eventos




       Controlador                        Pipeline Component

                     Component Metadata
Interfaz personalizada
Francisco Gonzalez
                                    Mentor
                    Alexandre Bernárdez
                                       DPS
                       Sergio Carrillo Vila
                                       DPE
{fgonzalez,abernardez,scarrillo}@solidq.com
ETL: Transformaciones en SSIS que nunca pensé
ETL: Transformaciones en SSIS que nunca pensé

Más contenido relacionado

Similar a ETL: Transformaciones en SSIS que nunca pensé

Puntofunci
PuntofunciPuntofunci
Puntofuncicris_l
 
Patrones Arquitecturales: Pipes & Filters
Patrones Arquitecturales: Pipes & FiltersPatrones Arquitecturales: Pipes & Filters
Patrones Arquitecturales: Pipes & FiltersNacho Bongiovanni
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Luis Fernando Aguas Bucheli
 
Redmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de ProyectosRedmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de ProyectosEQ SOFT EIRL
 
Seguridad en PDF: Adobe ¬¬
Seguridad en PDF: Adobe ¬¬Seguridad en PDF: Adobe ¬¬
Seguridad en PDF: Adobe ¬¬Alejandro Ramos
 
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contableOpen ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contableOpen ERP Finanzas
 
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contableCursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contableAlex Rayón Jerez
 
Zeety open project manual de instalación
Zeety   open project manual de instalaciónZeety   open project manual de instalación
Zeety open project manual de instalacióngrupozeety
 
Zeety especificación casos de uso
Zeety   especificación casos de usoZeety   especificación casos de uso
Zeety especificación casos de usogrupozeety
 
24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea
24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea
24 HOP Español - Utilizando cdc para cargar dw on line - Miguel EgeaSpanishPASSVC
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxLuis Fernando Aguas Bucheli
 
Sumo Logic Cert Jam - Fundamentals (Spanish)
Sumo Logic Cert Jam - Fundamentals (Spanish)Sumo Logic Cert Jam - Fundamentals (Spanish)
Sumo Logic Cert Jam - Fundamentals (Spanish)Sumo Logic
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioOsvaldo
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioOsvaldo
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 

Similar a ETL: Transformaciones en SSIS que nunca pensé (20)

Puntofunci
PuntofunciPuntofunci
Puntofunci
 
Patrones Arquitecturales: Pipes & Filters
Patrones Arquitecturales: Pipes & FiltersPatrones Arquitecturales: Pipes & Filters
Patrones Arquitecturales: Pipes & Filters
 
Conociendo Nuestro Fua interno
Conociendo Nuestro Fua internoConociendo Nuestro Fua interno
Conociendo Nuestro Fua interno
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
TFS 10
TFS 10TFS 10
TFS 10
 
Redmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de ProyectosRedmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de Proyectos
 
Manual de eclipse
Manual de eclipseManual de eclipse
Manual de eclipse
 
Seguridad en PDF: Adobe ¬¬
Seguridad en PDF: Adobe ¬¬Seguridad en PDF: Adobe ¬¬
Seguridad en PDF: Adobe ¬¬
 
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contableOpen ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
Open ERP e-Ghost-03-cursillo e-ghost 2010 - open erp como sw de gestion contable
 
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contableCursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
Cursillos e-ghost Septiembre 2010. Open ERP como software de gestión contable
 
Zeety open project manual de instalación
Zeety   open project manual de instalaciónZeety   open project manual de instalación
Zeety open project manual de instalación
 
Zeety especificación casos de uso
Zeety   especificación casos de usoZeety   especificación casos de uso
Zeety especificación casos de uso
 
24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea
24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea
24 HOP Español - Utilizando cdc para cargar dw on line - Miguel Egea
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
Sumo Logic Cert Jam - Fundamentals (Spanish)
Sumo Logic Cert Jam - Fundamentals (Spanish)Sumo Logic Cert Jam - Fundamentals (Spanish)
Sumo Logic Cert Jam - Fundamentals (Spanish)
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudio
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudio
 
puntos de funcion.pptx
puntos de funcion.pptxpuntos de funcion.pptx
puntos de funcion.pptx
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 

Más de SolidQ

SolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration ServicesSolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration ServicesSolidQ
 
SolidQ Summit 2018 - Seguridad a nivel datos. RLS
SolidQ Summit 2018 - Seguridad a nivel datos. RLSSolidQ Summit 2018 - Seguridad a nivel datos. RLS
SolidQ Summit 2018 - Seguridad a nivel datos. RLSSolidQ
 
SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...
SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...
SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...SolidQ
 
SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...
SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...
SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...SolidQ
 
SolidQ Summit 2018 - Report Server: Nuevos mutantes
SolidQ Summit 2018 - Report Server: Nuevos mutantesSolidQ Summit 2018 - Report Server: Nuevos mutantes
SolidQ Summit 2018 - Report Server: Nuevos mutantesSolidQ
 
Cuando QueryStore no sirve, ¿qué opciones tenemos?
Cuando QueryStore no sirve, ¿qué opciones tenemos?Cuando QueryStore no sirve, ¿qué opciones tenemos?
Cuando QueryStore no sirve, ¿qué opciones tenemos?SolidQ
 
SQL Server 2017 en Linux
SQL Server 2017 en LinuxSQL Server 2017 en Linux
SQL Server 2017 en LinuxSolidQ
 
Columnstore en la vida real
Columnstore en la vida realColumnstore en la vida real
Columnstore en la vida realSolidQ
 
PowerApprízate
PowerApprízatePowerApprízate
PowerApprízateSolidQ
 
Jugando a ser rico: Machine Learning para predicción de stocks
Jugando a ser rico: Machine Learning para predicción de stocksJugando a ser rico: Machine Learning para predicción de stocks
Jugando a ser rico: Machine Learning para predicción de stocksSolidQ
 
Analizando tus Redes Sociales con Power BI
Analizando tus Redes Sociales con Power BIAnalizando tus Redes Sociales con Power BI
Analizando tus Redes Sociales con Power BISolidQ
 
Mantenimiento de SQL Server para Dummies
Mantenimiento de SQL Server para DummiesMantenimiento de SQL Server para Dummies
Mantenimiento de SQL Server para DummiesSolidQ
 
R en relacional
R en relacionalR en relacional
R en relacionalSolidQ
 
Cuando haces bot ya no hay stop!!
Cuando haces bot ya no hay stop!!Cuando haces bot ya no hay stop!!
Cuando haces bot ya no hay stop!!SolidQ
 
Arquitecturas lambda en Azure
Arquitecturas lambda en AzureArquitecturas lambda en Azure
Arquitecturas lambda en AzureSolidQ
 
Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018
Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018
Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018SolidQ
 
BIE2E en Azure - SolidQ Summit 2018
BIE2E en Azure - SolidQ Summit 2018BIE2E en Azure - SolidQ Summit 2018
BIE2E en Azure - SolidQ Summit 2018SolidQ
 
¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018
¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018
¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018SolidQ
 
Hilando fino en SSAS multidimensional - SolidQ Summit 2018
Hilando fino en SSAS multidimensional - SolidQ Summit 2018Hilando fino en SSAS multidimensional - SolidQ Summit 2018
Hilando fino en SSAS multidimensional - SolidQ Summit 2018SolidQ
 
Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...
Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...
Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...SolidQ
 

Más de SolidQ (20)

SolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration ServicesSolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
 
SolidQ Summit 2018 - Seguridad a nivel datos. RLS
SolidQ Summit 2018 - Seguridad a nivel datos. RLSSolidQ Summit 2018 - Seguridad a nivel datos. RLS
SolidQ Summit 2018 - Seguridad a nivel datos. RLS
 
SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...
SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...
SolidQ Summit 2018 - Todo lo que un integrador de datos debería tener... y pa...
 
SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...
SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...
SolidQ Summit 2018 - ¿Dificultades gestionando relaciones muchos a muchos? De...
 
SolidQ Summit 2018 - Report Server: Nuevos mutantes
SolidQ Summit 2018 - Report Server: Nuevos mutantesSolidQ Summit 2018 - Report Server: Nuevos mutantes
SolidQ Summit 2018 - Report Server: Nuevos mutantes
 
Cuando QueryStore no sirve, ¿qué opciones tenemos?
Cuando QueryStore no sirve, ¿qué opciones tenemos?Cuando QueryStore no sirve, ¿qué opciones tenemos?
Cuando QueryStore no sirve, ¿qué opciones tenemos?
 
SQL Server 2017 en Linux
SQL Server 2017 en LinuxSQL Server 2017 en Linux
SQL Server 2017 en Linux
 
Columnstore en la vida real
Columnstore en la vida realColumnstore en la vida real
Columnstore en la vida real
 
PowerApprízate
PowerApprízatePowerApprízate
PowerApprízate
 
Jugando a ser rico: Machine Learning para predicción de stocks
Jugando a ser rico: Machine Learning para predicción de stocksJugando a ser rico: Machine Learning para predicción de stocks
Jugando a ser rico: Machine Learning para predicción de stocks
 
Analizando tus Redes Sociales con Power BI
Analizando tus Redes Sociales con Power BIAnalizando tus Redes Sociales con Power BI
Analizando tus Redes Sociales con Power BI
 
Mantenimiento de SQL Server para Dummies
Mantenimiento de SQL Server para DummiesMantenimiento de SQL Server para Dummies
Mantenimiento de SQL Server para Dummies
 
R en relacional
R en relacionalR en relacional
R en relacional
 
Cuando haces bot ya no hay stop!!
Cuando haces bot ya no hay stop!!Cuando haces bot ya no hay stop!!
Cuando haces bot ya no hay stop!!
 
Arquitecturas lambda en Azure
Arquitecturas lambda en AzureArquitecturas lambda en Azure
Arquitecturas lambda en Azure
 
Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018
Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018
Bot Framework: otra manera de acceder a tus datos - SolidQ Summit 2018
 
BIE2E en Azure - SolidQ Summit 2018
BIE2E en Azure - SolidQ Summit 2018BIE2E en Azure - SolidQ Summit 2018
BIE2E en Azure - SolidQ Summit 2018
 
¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018
¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018
¿Qué viene GDPR? Mi SQL está preparado- SolidQ Summit 2018
 
Hilando fino en SSAS multidimensional - SolidQ Summit 2018
Hilando fino en SSAS multidimensional - SolidQ Summit 2018Hilando fino en SSAS multidimensional - SolidQ Summit 2018
Hilando fino en SSAS multidimensional - SolidQ Summit 2018
 
Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...
Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017...
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
  • 8. Con componentes nativos Barajar las alternativas α T-SQL α Componentes propios de SSIS α Háztelo tú mismo
  • 10. Con componentes nativos Comparativas: Tiempos de ejecución 5 4 Ejecucion 1 3 Ejecucion 2 2 Ejecucion 3 Ejecucion 4 1 Ejecucion 5 0 Componente Componente SSIS Casero
  • 11. Running Totals DATE PRODUCT STOCKDIFF 01/07/2010 Avena 15 01/07/2010 Naranja 7 01/07/2010 Melón 5 02/07/2010 Avena -5 02/07/2010 Naranja -7 02/07/2010 Melón 4 03/07/2010 Avena 4 03/07/2010 Naranja 3 03/07/2010 Melón -8
  • 12. Running Totals DATE PRODUCT STOCKDIFF STOCK 01/07/2010 Avena 15 15 01/07/2010 Naranja 7 7 01/07/2010 Melón 5 5 02/07/2010 Avena -5 10 02/07/2010 Naranja -7 0 02/07/2010 Melón 4 9 03/07/2010 Avena 4 14 03/07/2010 Naranja 3 3 03/07/2010 Melón -8 1
  • 13. Running Totals DATE PRODUCT STOCKDIFF 01/07/2010 Avena 15 01/07/2010 Naranja 7 01/07/2010 Melón 5 02/07/2010 Avena -5 02/07/2010 Naranja -7 02/07/2010 Melón 4 03/07/2010 Avena 4 03/07/2010 Naranja 3 03/07/2010 Melón -8
  • 14. Running Totals DATE PRODUCT STOCKDIFF STOCK 01/07/2010 Avena 15 15 01/07/2010 Naranja 7 7 01/07/2010 Melón 5 5 02/07/2010 Avena -5 10 02/07/2010 Naranja -7 0 02/07/2010 Melón 4 9 03/07/2010 Avena 4 14 03/07/2010 Naranja 3 3 03/07/2010 Melón -8 1 select b.idmovimiento,b.producto,SUM(b.Stockdiff) from Movimientos a inner join Movimientos b on a.Producto=b.Producto and a.idmovimiento<=b.idmovimiento group by b.idmovimiento,b.Producto
  • 16. Running Totals MEC MEC DATE PRODUCT STOCKDIFF 01/07/2010 Avena 15 02/07/2010 Avena -5 03/07/2010 Avena 4 01/07/2010 Naranja 7 02/07/2010 Naranja -7 03/07/2010 Naranja 3 01/07/2010 Melón 5 02/07/2010 Melón 4 03/07/2010 Melón -8
  • 17. Running Totals MEC MEC DATE PRODUCT STOCKDIFF STOCK 01/07/2010 Avena 15 15 02/07/2010 Avena -5 10 03/07/2010 Avena 4 14 01/07/2010 Naranja 7 7 02/07/2010 Naranja -7 0 03/07/2010 Naranja 3 3 01/07/2010 Melón 5 5 02/07/2010 Melón 4 9 03/07/2010 Melón -8 1
  • 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()
  • 24. Métodos a implementar (Tiempo de diseño)
  • 25. Componente personalizado αMétodos a Implementar (Tiempo de ejecución) public override void PreExecute() public override void ProcessInput(int inputID, PipelineBuffer buffer) public override void PrimeOutput(int outputs, int[] outputIDs, PipelineBuffer[] buffers)
  • 26. Métodos a implementar (Tiempo de ejecución)
  • 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
  • 29. Interfaces Personalizadas Modelo de comunicación UI Eventos Controlador Pipeline Component Component Metadata
  • 31.
  • 32. Francisco Gonzalez Mentor Alexandre Bernárdez DPS Sergio Carrillo Vila DPE {fgonzalez,abernardez,scarrillo}@solidq.com