0% encontró este documento útil (0 votos)
190 vistas37 páginas

Integration Services

Este documento describe varios componentes de Integration Services para transformar y manipular datos. Se crean tablas y se insertan registros de ejemplo. Luego, se usan componentes como Conditional Split, Derived Column y Lookup para filtrar, calcular nuevas columnas y buscar datos. También se usan Merge, Union All y Sort para combinar conjuntos de datos. Finalmente, se muestran ejemplos de uso de componentes como Multicast, OLE DB Command y Rowcount.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
190 vistas37 páginas

Integration Services

Este documento describe varios componentes de Integration Services para transformar y manipular datos. Se crean tablas y se insertan registros de ejemplo. Luego, se usan componentes como Conditional Split, Derived Column y Lookup para filtrar, calcular nuevas columnas y buscar datos. También se usan Merge, Union All y Sort para combinar conjuntos de datos. Finalmente, se muestran ejemplos de uso de componentes como Multicast, OLE DB Command y Rowcount.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 37

INTEGRATION SERVICES

Sequence Container
Creamos una tabla
create table Demo (
ID int identity,
Categoria varchar(15),
Monto float
)

Insertamos 6 registros

insert into Demo (Categoria, Monto) values ('BBB', 743.13), ('YYY', 4754.32), ('LLL',
865.23), ('QQQ', 74.32), ('DDD', 3.23), ('SSS', 34.32)

Creamos una tabla para renombrar a la tabla Demo


create table DemoDest (
ID int identity,
Categoria varchar(15),
Monto float
)

Creamos un Contenedor de Secuencias

En eliminar tabla -> SQLStatement (drop table Demo)

En renombrar tabla -> SQLStatement (sp_rename ‘DemoDest’, ‘Demo’)

Si ejecutamos el ETL el transactionOption cambiamos a Requerid para que si algo falla no se ejecute todo el
proceso (ROLLBACK)
Si cambiamos a NoSupported entonces se ejecutara hasta donde no falle el proceso (COMMIT)

Validamos y notamos que se eliminan los registros de la tabla Demo

Foreach loop
Alter table FIFA add PieEsp varchar(10)

select ID, PiePreferido from FIFA

select top 100 ID from FIFA where PieEsp is null

update FIFA
set PieEsp = case when PiePreferido = 'Left' then 'Izquierdo'
else 'Derecho'
end
where ID = ?

select * from FIFA

alter table FIFA add RangoAltura varchar(20)

select * from FIFA


Creamos 2 variables

Datos de tipo Object

ID de tipo int

Creamos una tarea SQL cambiamos el ResultSet

el resultado se guarda en una variable


En el contenedor foreach Loop

Se mapea la columna ID con el índice dentro del foreach se pone 0 para que lo recorra completo
Creamos otra tarea SQL dentro del contenedor Foreach Loop (ResultSet ninguno)
Validamos que cambian los 100 primeros

For Loop
Creamos la tabla contadores
create table contadores (Contador int not null, Hora Time)

creamos variable

Contador tipo int


Metemos una Tarea SQL en el contenedor

En el Contenedor For Loop


Validamos

Send Mail Task


Para enviar un correo

Insertamos una Tarea Script

Dar en editar script


Agregamos 2 librerias:
using System.Net;
using System.Net.Mail;

y el codigo para enviar correo

MailMessage msg = new MailMessage("[email protected]", "[email protected]", "SSIS -


FIN CARGA PRIMERO PROYECTO", "carga finalizada");
SmtpClient smtcli = new SmtpClient("smtp.live.com", 25); smtcli.EnableSsl = true;
smtcli.DeliveryMethod = SmtpDeliveryMethod.Network;
smtcli.Credentials = new NetworkCredential("[email protected]", "528808832103");
smtcli.Send(msg);

Dts.TaskResult = (int)ScriptResults.Success;

DATA FLOWS
Aggregate
Este componente puede ser de mucha utilidad cuando queramos transformar datos a escalas
menores, de forma agregada (sumarizados, promediados, etc.)
delete Promedios;
delete JugadoresPorNacionalidad;

Creamos un dataFlow

- Origen de datos
Invocar tabla FIFA

create table Promedios (PiePref varchar(10), PromedioPesoKg float)


create table JugadoresPorNacionalidad (Nacionalidad varchar(100), CantidadJugadores int)

- Aggregate
Se va agregar dos conjuntos de datos marcamos advance para agregar
las salidas al control.

Vamos a calcular el peso promedio por pie preferido (en peso vamos a
marcar average)
En JugadoresPorPaises ID -> count
Agregamos 2 destinos OLEDB

1. TABLA Promedios
2. TABLA JugadoresPorNacionalidad
Validamos ETL

Conditional Split
El Conditional Split  es un componente que nos va a permitir evaluar expresiones para cada
columna de un set de datos. El componente evalúa expresiones y basado en el resultado de
estas dirige los datos a una salida en específico. 

Creamos las tablas


select top 0 ID, NombreCompleto, FechaNacimiento
into MayoresAa1990
from FIFA

select top 0 ID, NombreCompleto, FechaNacimiento


into MenoresAa1990
from FIFA

En el origen de Datos insertar la sentencia


select ID, NombreCompleto, FechaNacimiento from FIFA

Creamos un conditional Split


Creamos un destino OLEDB
1 Para insertar los datos a la tabla MayoresAa1990
2 Para insertar los datos a la tabla MenoresAa1990

Validamos

select min(datepart(year, FechaNacimiento)) as Minima


from MayoresAa1990

select max(datepart(year, FechaNacimiento)) as Maxima


from MenoresAa1990
Derived Column
Tres componentes para trabajar sobre columnas de forma específicas ya sea copiándolas,
creándolas, sustituyéndolas o cambiando su tipo de datos.

Creamos la tabla

create table EdadJugadores (


ID int,
NombreCompleto varchar(150),
Edad int
)

Creamos el origen de datos


select ID, NombreCompleto, FechaNacimiento from FIFA

Creamos la columna derivada (para calcular la edad de un jugador de acuerdo a su año de


nacimiento)

Creamos el destino OLEDB con la tabla EdadJugadores


Validamos

Lookup transformation
Lookup nos ayuda a realizar búsquedas de filas de un set de datos dentro de otro

se borra 1000 registros de la tabla EdadJugadores


delete top (1000) from EdadJugadores

creamos un origen de datos


select ID, NombreCompleto, FechaNacimiento from FIFA

insertamos el Lookup
Marcamos No cache por que no vamos a trabajar con un archivo [al lookup le decimos que busque
dentro de la tabla EdadJugadores cada uno de los registros que vienen desde la tabla FIFA
(origen de datos) a través de la columna ID que es con la que estoy haciendo el JOIN]

Los que no hacen match redirigirlo a un output


Realizamos la conexión e insertamos la tabla de destino

Marcamos la ID por que es la columna por la cual vamos a hacer la comparación.

Cuando conectemos con la columna derivada escoger la opción que no hace match
En columna derivada (CALCULA EDAD)

E insertamos el destino INSERTAR EDAD


Ponemos la tabla EdadJugadores como destino

EJEMPLO 2: El cache transform no se puede utilizar dentro de un dataflow que ya este


utilizando Lookup, se necesita un dataflow que cargue los datos a cache y un segundo a
dataflow que va realizar la búsqueda y la inserción final de la data

En el primer dataflow (CARGAR DATOS)


Creamos origen
select ID, NombreCompleto, Edad from EdadJugadores
insertamos un cache transform

En columnas asignamos al ID la posición de índice el valor 1, ya que es por ella por la que
vamos a realizar la busqueda
En el segundo dataflow (BUSCAR)

Crear Origen de datos


select ID, NombreCompleto, Edad from EdadJugadores

en el Lookup
FLUJO
Merge, Union all y sort
Tres componentes que nos permiten agrupar distintos sets de datos, cada uno tiene sus
particularidades y dependencias.

Creamos la tabla FifaMerged


select top 0 * into FIFAMerged from MenoresAa1990

Creamos el origen de datos 1 (Mayores 1990)


Insertamos la tabla MayoresAa1990

Creamos el origen de datos 2 (Menores 1990)


Insertamos la tabla MenoresAa1990

Antes de crear un Merge debo ordenar los datos con el componente Sort
En el primer sort

En el segundo sort
Unimos los sort en el componente Merge

Luego creamos el destino OLEDB la tabla FifaMerged

Validamos que se mezclan las 2 tablas mayores y menores en la tabla FifaMerged

Si queremos unir mas tablas utilizamos el UNION ALL


Merge Join
Este componente nos permite generar un set de datos final luego de regalizar relaciones o
joins entre dos o más datasets tal como lo hacemos con código T-SQL

Primero

select top 0 * into EdadNacimientoJugadores


from EdadJugadores

alter table EdadNacimientoJugadores add FechaNacimiento date

select * from EdadNacimientoJugadores

Creamos el origen EDADJUGADORES


Con la table EdadJugadores

Creamos el origen FIFA


Con la tabla FIFA

En el primero sort

En el segundo sort solo marcamos FechaNacimiento y el ID


Creamo el Merge Join y unimos los sorts

Insertamos un destino OLEDB


A la tabla EdadNacimientoJugadores
Validamos

Multicast
El multicast distruye un data set de entrada en uno o más datasets de salidas. Su
comportamiento es similar al del Conditional Split. Ambas transformacinoes reciben una
entrada de datos y las distribuyen en varias. La diferencia básicamente es que el conditional
Split envía una fila  una única salida mientras que el multicast envía todas las filas
existentes a cada una de las salidas definidas.

Creamos la tabla
create table NombresUno (
Nombre varchar(150)
)

Creamos el origen de datos


select Nombre from FIFA

creamos un destino OLEDB


a la tabla NombresUno

Creamos un componente de archive plano


Validamos tabla y archivo plano
Ole db command
El Ole db command nos brinda la facilidad de ejecutar una instrucción SQL para cada una de
las filas del data flow. 

--ALTURA MAYOR O IGUAL A 160 = ALTO


--ALTURA ENTRE 161 Y 169 = MEDIO
--ALTURA MENOR O IGUAL A 160 = BAJO

Insertamos un origen de datos


select ID, AlturaCM
from FIFA
where RangoAltura is null

En columna derivada
En OLEDB Command

RangoAltura com parámetro 0 porque es el primer parámetro en la consulta update FIFA set
RangoAltura = ? where ID = ?
Validamos

Rowcount
Con este componente podemos contar los registros o filas que pasan a través de un data flow.
Agregaremos al ETL del capítulo OLE DB Command, un paso adicional para almacenar un log de
ejcución de nuestro ETL, donde utilizaremos además algunas variables del sistema.

Creamos una tabla

create table LogEjecucion (


PaqueteID uniqueidentifier,
PaqueteNombre varchar(100),
FechaHora smalldatetime default getdate(),
PC varchar(100),
CantidadRegistros int
)

Creamos una variable


Contador1

Creamos un countrow y escogemos la variable contador1 para contar la cantidad de filas que
van a pasar por el dataflow
Creamos una tarea SQL
validamos

Row y Percentage Sampling


Muchas veces necesitamos trabajar solo con una parte de los datos; ya sea para manipular menos
datos desde un ambiente de desarrollo o porque estamos realizando un ejercicio estadístico, Row y
Percentage Sampling nos permiten elegir de manera aleatoria datos de un dataset, ya sea de forma
absoluta especificando la cantidad de filas a requerir o de manera relativa eligiendo una muestra basada
en un porcentaje

Creamos las tablas


create table AleatoriosAbsolutos (ID int, nombre varchar(150))
create table AleatoriosAbsolutosNoElegidos (ID int, nombre varchar(150))
create table AleatoriosRelativos (ID int, nombre varchar(150))
create table AleatoriosRelativosNoElegidos (ID int, nombre varchar(150))

Creamos dos orígenes OLEDB (ABSOLUTO, RELATIVO)

select ID, Nombre from FIFA

Creamos el row sampling


Creamos el percentage sampling

Creamos 4 destinos

Tabla AleatoriosAbsolutos

Tabla AleatoriosAbsolutosNoElegidos

Tabla AleatoriosRelativos

Tabla AleatoriosRelativosNoElegidos
Validamos

Slowly changing dimension - Dimensiones


Lentamente Cambiantes
Uno de los componentes más cautivadores, SCD por sus siglas en inglés, Slowly Changing Dimensions,
se refiere a los datos de las dimensiones que van cambiando a través del tiempo. Las dimensiones
pueden ser estáticas como los años y meses, o cambiar lentamente como los nombres de los países, o
cambiar más rápidamente como la clasificación de los productos. 

Creamos un esquema DW y la tabla DW.FIFA


create schema DW

create table DW.FIFA(


ID int identity,
IDKey int,
Nombre varchar(255),
FechaInicio date default getdate(),
FechaFin date
)
En el origen de datos
select *
from FIFA
where ID<5000

Creamos un Slowly changing dimension


Validamos
--Club original JUVENTUS
update FIFA
set Club = 'PSG'
where ID=1179

También podría gustarte