none
Donde se hace el procesamiento de una ETL de SSIS? RRS feed

  • Pregunta

  • Siempre he tenido la duda sobre el funcionamiento de SSIS en las ETLs, el procesamiento de la transformación donde se ejecuta, en el servidor de la base de datos (Origen) o en el servidor de SSIS.

    Extraccion(Origen BD) - Transformacion(?) - Carga (Destino BD)?

    jueves, 27 de agosto de 2015 16:00

Respuestas

  • Hola Diego, la respuesta obvia es donde esté el servicio de SSIS, pero te resumo.

    La parte de extracción se realiza mediante consultas o lecturas de ficheros de lo que Integration services llama Sources. Imaginando que el origen es un SQL Server o un Oracle, la consulta se lanza desde la máquina SSIS pero la ejectua el servidor SQL o el servidor Oracle, los datos viajan por la red hasta el servidor SSIS y ahí se aplican las transformaciones que hayas hecho.

    SSIS actua con un mecanismo de buffering, es decir, no lee toda la fuente para empezar a procesar, sino que lee datos del origen y directamente comienza a transformarlos y enviarlos a destino, de esta forma yo tengo procesos que sincronizan más de 1800 millones de filas y procesa en un tiempo mucho mas que razonable. (yo no los tengo, los tiene un cliente mio, y mis compañeros y yo construimos originalmente esos etls)

    Entre las transformaciones más típicas de SSIS tienes

    * Derived Columns, básicamente es una operación en la que cambias columnas dentro de la misma fila por otras. esta transformación se realiza siempre usando CPU del servidor de SSIS

    * Conditional Split, en función de condiciones se dividen los flujos en varios, por ejemplo se usa mucho para distinguir registros nuevos, modificados y eliminados

    * Lookups, aquí hay varios sabores, dependiendo de si usas caché completa, o sin caché (hay otros mecanismos pero no viene al caso ahora mismo). Si usas cache completa, hay un query que se ejecuta y su contenido se carga por completo en memoria, luego cada fila de entrada de tu origen de datos se busca en este resultado. (es un mecanismo para unir un origen y un destino). Si por el contrario usas sin cache, cada fila de tu origen genera un comando select en la tabla en la que haces lookup, esto que parece una barbaridad no es tanto. Imagina que haces una carga completa de una tabla de 10.000.000 filas, el tiempo y la memoria de meter la clave primaria en cache merece la pena. Sin embargo si haces una carga incremental y aunque la tabla tenga 10 millones de filas se van a leer 1000 filas nuevas o modificadas, tiene mas sentido hacer un select por cada fila que cargar 10 millones de filas en caché. El componente se ejecuta por completo en SSIS, pero obviamente lanzará un query SQL o muchos al SQL u Oracle que tengas configurado, esos queries serán responsabilidad del servidor de base de datos

    * Merge. Si tienes dos orígenes que vienen ordenados puedes usar este componente para unir dos flujos. Se ejecuta por completo en SSIS

    *Unión all , conditional Split. Se ejecutan por completo en SSIS

    * Cualquier destination, SSIS envía una instrucción de inserción al destino, esa instrucción se ejecuta en el destino, aunque la instrucción se genera en SSIS

    Espero que esto te lo deje algo más claro.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    lunes, 31 de agosto de 2015 7:22
    Moderador
  • Hola DiegoDazaBI,

    En los procesos de ETL hay una área especial denominada "Staging Area" que no es mas que un área temporal para almacenar datos, y es una área intermedia entre el origen y el destino. Cuando haces la extracción los datos son cargados a está área, aquí es donde se transformar y una vez listo se procede a la carga desde el staging hacia el destino. Para que tengas mas claro el escenario te dejo una imagen


    OFF TOPIC:

    Máximas en el diseño de software:

    Principio 1: DRY (Don't repeat yourself) No repitas código, encapsula y reutiliza.

    Principio 2: KISS (Keep It Simple, Stupid) Hazlo simple, legible, evita la complejidad innecesaria.
    jueves, 27 de agosto de 2015 17:02

Todas las respuestas

  • Hola DiegoDazaBI,

    En los procesos de ETL hay una área especial denominada "Staging Area" que no es mas que un área temporal para almacenar datos, y es una área intermedia entre el origen y el destino. Cuando haces la extracción los datos son cargados a está área, aquí es donde se transformar y una vez listo se procede a la carga desde el staging hacia el destino. Para que tengas mas claro el escenario te dejo una imagen


    OFF TOPIC:

    Máximas en el diseño de software:

    Principio 1: DRY (Don't repeat yourself) No repitas código, encapsula y reutiliza.

    Principio 2: KISS (Keep It Simple, Stupid) Hazlo simple, legible, evita la complejidad innecesaria.
    jueves, 27 de agosto de 2015 17:02
  • Saludos 

    No es posible responder esto pues depende del origen y el destino y que sean y como estes haciendo, a nivel conceptual si existe el stagging pero en donde reside dependera enteramente de tu diseño.  

    jueves, 27 de agosto de 2015 17:06
  • Hola: Yo tengo entendido que depende mucho del objeto que estes utilizando, por ejemplo, si utilizas un For Each Loop Container o For Each Loop o Unión All o Script task por ejemplo, es del lado del SSIS server, si utilizas objetos de consultas a BDs estos los realiza el Server de BD.  Al menos eso es lo que he investigado en mis años de experiencia.

    SALUDOS!


    SERGIO SANCHEZ ARIAS
    facebook twitter blogger google

    jueves, 27 de agosto de 2015 17:27
  • Hola Diego, la respuesta obvia es donde esté el servicio de SSIS, pero te resumo.

    La parte de extracción se realiza mediante consultas o lecturas de ficheros de lo que Integration services llama Sources. Imaginando que el origen es un SQL Server o un Oracle, la consulta se lanza desde la máquina SSIS pero la ejectua el servidor SQL o el servidor Oracle, los datos viajan por la red hasta el servidor SSIS y ahí se aplican las transformaciones que hayas hecho.

    SSIS actua con un mecanismo de buffering, es decir, no lee toda la fuente para empezar a procesar, sino que lee datos del origen y directamente comienza a transformarlos y enviarlos a destino, de esta forma yo tengo procesos que sincronizan más de 1800 millones de filas y procesa en un tiempo mucho mas que razonable. (yo no los tengo, los tiene un cliente mio, y mis compañeros y yo construimos originalmente esos etls)

    Entre las transformaciones más típicas de SSIS tienes

    * Derived Columns, básicamente es una operación en la que cambias columnas dentro de la misma fila por otras. esta transformación se realiza siempre usando CPU del servidor de SSIS

    * Conditional Split, en función de condiciones se dividen los flujos en varios, por ejemplo se usa mucho para distinguir registros nuevos, modificados y eliminados

    * Lookups, aquí hay varios sabores, dependiendo de si usas caché completa, o sin caché (hay otros mecanismos pero no viene al caso ahora mismo). Si usas cache completa, hay un query que se ejecuta y su contenido se carga por completo en memoria, luego cada fila de entrada de tu origen de datos se busca en este resultado. (es un mecanismo para unir un origen y un destino). Si por el contrario usas sin cache, cada fila de tu origen genera un comando select en la tabla en la que haces lookup, esto que parece una barbaridad no es tanto. Imagina que haces una carga completa de una tabla de 10.000.000 filas, el tiempo y la memoria de meter la clave primaria en cache merece la pena. Sin embargo si haces una carga incremental y aunque la tabla tenga 10 millones de filas se van a leer 1000 filas nuevas o modificadas, tiene mas sentido hacer un select por cada fila que cargar 10 millones de filas en caché. El componente se ejecuta por completo en SSIS, pero obviamente lanzará un query SQL o muchos al SQL u Oracle que tengas configurado, esos queries serán responsabilidad del servidor de base de datos

    * Merge. Si tienes dos orígenes que vienen ordenados puedes usar este componente para unir dos flujos. Se ejecuta por completo en SSIS

    *Unión all , conditional Split. Se ejecutan por completo en SSIS

    * Cualquier destination, SSIS envía una instrucción de inserción al destino, esa instrucción se ejecuta en el destino, aunque la instrucción se genera en SSIS

    Espero que esto te lo deje algo más claro.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    lunes, 31 de agosto de 2015 7:22
    Moderador