Вы находитесь на странице: 1из 47

Automatizao de dados com o SSIS

O artigo descreve conceitos fundamentais e exemplos bem simples


sobre o tema Automatizao da Extrao de Dados com o
Integration Services.
Automatizao de dados com o SSIS
Neste artigo so explorados conceitos sobre o mdulo Integration Services
!SSIS" presente na ferramenta #usiness Intelligence Development Studio !#IDS"
da empresa $icrosoft. Aps de%ni&es sobre os principais conceitos e
aplicabilidades da ferramenta e seus componentes' so detal(ados conceitos da
extrao de dados' a primeira fase do E)*. +or %m' , feita uma concluso
descrevendo a import-ncia e os benef.cios em con(ecer a automatizao da
extrao de dados no processo de E)*.
Em que situao o tema til
A aplicao de conceitos de extrao do processo de E)* !Extrao'
)ransformao e /arga" , recomendada para empresas de todos os segmentos'
em especial' empresas com diversas fontes de dados' para 0ue possam fazer o
recebimento e carregamento de dados de forma automatizada e popule o seu
armaz,m de dados !data 1are(ouse" ou datamart' facilitando o processo'
aumentando a produtividade e diminuindo a margem de erro.
Atualmente vivemos em uma era onde a produo de informao , constante'
diversas empresas possuem muitas fontes de dados nos mais diversos
formatos. $ediante tal situao surge a necessidade de integr23los de forma
r2pida' pr2tica e produtiva.
)rabal(ar com dados de diferentes fontes e formatos pode ser uma tarefa
complicada' principalmente 0uando (2 necessidade de integr23los para utiliz23
los como uma 4nica base de consulta.
Saber automatizar este processo , de vital import-ncia para as empresas' pois
(2 um grande gan(o de tempo nas consultas e obteno das informa&es 0ue
por sua vez so importantes nas tomadas de decis&es gerenciais.
Neste artigo apresentaremos na pr2tica o uso da extrao de dados. O pro5eto
foi desenvolvido a partir de uma necessidade real de uma empresa. O mesmo
resolveu o problema de recebimento de informa&es 0ue c(egavam de forma
manual' aumentou a produtividade e demonstrou3se muito e%caz.
+ara tanto' ser2 demonstrado como realizar o processo de extrao de forma
automatizada. Ser2 utilizada a ferramenta #IDS 0ue possui o mdulo SSIS'
espec.%co para este tipo de operao.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
+ara %ns de ilustrao' foram utilizadas bases de dados de um concurso p4blico
da @niversidade Aederal de Buiz de Aora !@ABA" e seus resultados foram
divulgados em formato +DA' conforme cargo e localidade. As bases de dados
so p4blicas e podem ser encontradas no site da @niversidade Aederal de Buiz
de Aora' o camin(o pode ser obtido no endereo indicado na seo Links.
+ara 0ue o processo possa ser feito corretamente' depois de baixar todos os
ar0uivos' devero ser retirados todos os seus acentos e caracteres especiais !"
e incluir um adendo ao %nal do nome do ar0uivo 0ue ir2 referenciar a cidade
0ue o candidato escol(eu para concorrer ao cargo. +ara a cidade de Buiz de Aora'
os ar0uivos receberam CD5fE e para a cidade de Fovernador Galadares CDgvE.
Isso foi feito devido ao fato de 0ue o nome do ar0uivo ser2 o nome da tabela
0ue ir2 abrigar os dados.
/onceitos iniciais sobre o Integration Services
O SSIS , parte integrante do #IDS desde o SH* Server 7??:. No SH* Server
7??= I7 , encontrado a partir da verso Standard' 0ue permite trabal(ar com
os conceitos de E)* nos dados a partir de uma fonte de dados 0ual0uer para
outra 0ual0uer' mesmo 0ue se5am distintas.
O uso do SSIS vem para solucionar problemas de integrao de dados
complexos' com a %nalidade de copiar ou baixar ar0uivos' enviar mensagens de
e3mail em resposta a eventos' atualizar data 1are(ouses ou datamarts' fazer
limpeza' minerao e gerenciamento de dados do SH* Server.
Os pacotes podem funcionar sozin(os ou integrados ao gerenciador de tarefas
do SH* Server para resolver necessidades complexas de tratamento de dados.
O SSIS pode manipular uma ampla variedade de fontes de dados' como
ar0uivos J$*' ar0uivos )J)' /SG' IAK e fontes de dados de bancos relacionais
e transferir dados para um ou mais destinos.
O SSIS inclui um con5unto variado de tarefas e componentes para extrao'
transformao e carga de dados contidos em pacotes de manipulao de dados.
+ode3se usar as ferramentas gr2%cas do SSIS para criar solu&es sem utilizar
uma 4nica lin(a de cdigo' ou pode3se fazer uso de scripts 0ue trabal(am com
SH* e as linguagens de programao G#.Net e /L.
+asso inicial
+ara seguir em frente , necess2rio 0ue o SH* Server 7??= I7 este5a instalado e
con%gurado ade0uadamente na m20uina em 0ue ser2 feito o pro5eto de
integrao de dados.
Outro item necess2rio , criar uma pasta para receber e guardar os ar0uivos do
pro5eto' se poss.vel numa segunda unidade do disco r.gido' caso a mesma
exista. No exemplo ser2 usada a unidade D' de acordo com a con%gurao da
m20uina do usu2rio pode ser E ou A. /aso ocorra algum problema de segurana
se a pasta for criada diretamente na unidade /' , bom assegurar 0ue esse tipo
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
de 0uesto no pre5udi0ue o funcionamento do pro5eto' ento , necess2rio
a5ustar as propriedades de segurana da unidade / caso se5a necess2rio.
Na unidade escol(ida para se trabal(ar' deve3se criar a pasta devmedia e a
subpasta SSIS' provavelmente o seu camin(o %car2 da seguinte formaM
DMNdevmediaNSSIS. )amb,m , necess2rio criar uma pasta dentro de devmedia
com o nome de Scripts 0ue ir2 conter o script necess2rio para criar o banco 0ue
vai receber os dados. /rie tamb,m uma pasta c(amada database para conter o
banco de dados.
/riadas as pastas' agora , necess2rio criar o banco de dados no SH* Server
para armazenar os dados 0ue sero obtidos nos ar0uivos +DA. )al banco ser2
criado a partir do script contido na Listagem 1. /opie o cdigo para o SH*
Server' atualize a unidade de trabal(o contida no script e depois salve3o dentro
de DMNdevmediaNScripts.
Listagem 1. /ria o banco de dados Importa.
USE master
GO
CREATE DATABASE Importa
ON
( NAME = Importa_dat,
--Atual!ar a u"dade a#a$o de a%ordo %om a &ue
--est' se"do tra#al(ada
)I*ENAME=+D,-de.meda-data#ase-mportadat/md0+,
SI1E = 23,
MA4SI1E = 53,
)I*EGRO6T7 = 5
8
*OG ON
( NAME =+Importa_lo9+,
--Atual!ar a u"dade a#a$o de a%ordo %om a &ue
--est' se"do tra#al(ada
)I*ENAME=+D,-de.meda-data#ase-mportalo9/md0+,
SI1E = 5MB,
MA4SI1E = :5MB,
)I*EGRO6T7 = 5MB
8
GO
Extract
Em seguida temos a fase Extract onde , necess2rio obter os dados 0ue iro
alimentar' no caso do pro5eto' um pe0ueno banco de dados multidimensional.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
Assim' avalia3se como os dados sero obtidos' como ser2 feita a conexo entre
os dados e o soft1are de transformao de dados' se5am estes ar0uivos 0ue
podem estar em diversos formatos' ou at, mesmo em formato +DA' desde 0ue
estes no ten(am sido feitos a partir de imagens.
Agora execute o #IDS' crie um novo pro5eto no menu
AileONe1O+ro5ectO#usiness Intelligence +ro5ects e por %m Integration Services
+ro5ect. O pro5eto dever2 ter o nome de +ro5E)*. Aeito isso' selecione a pasta
criada anteriormente com o nome de devmedia para 0ue o pro5eto se5a gravado
dentro da subpasta SSIS' desmar0ue a opo create directorP for solution e
con%rme a operao. A primeira viso do pro5eto ser2 o /ontrol Alo1
demonstrado na Figura 1.
6
7
8
9
:
;
<
=
>
6?
66
67
/ontrol Alo1
Este , respons2vel pelo Quxo de todas as tarefas do processo de E)*. Ele
permite 0ue se5am inseridas tarefas e componentes necess2rios R execuo. Em
relao a este pro5eto' ele vai conter os componentes 0ue vo fazer o do1nload
dos ar0uivos +DA para uma pasta a ser de%nida' converso dos ar0uivos +DA
para )J) por meio de um programa de terceiros' extrao dos dados dos
ar0uivos )J)' criao e insero dos dados em tabelas do SH* Server e
posteriormente o tratamento dos dados e insero dos mesmos em um banco
de modelo multidimensional.
Neste contexto' nosso prximo passo ser2 adicionar a primeira tarefa do /ontrol
Alo1. +ara isso' basta arrastar o item Aile SPstem )asS para o /ontrol Alo1'
conforme a Figura 1.
Figura 1. File System Task.
Aile SPstem )asS
O Aile SPstem )asS realiza opera&es em ar0uivos e pastas no sistema de
ar0uivos de um computador com Kindo1s. +or exemplo' o Aile SPstem )asS
pode criar' mover ou apagar ar0uivos e pastas. )amb,m , poss.vel us23lo para
de%nir atributos em ar0uivos e pastas. O Aile SPstem )asS pode tornar ar0uivos
em ocultos ou somente para leitura.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
)odas as opera&es do Aile SPstem )asS usam uma fonte' 0ue pode ser um
ar0uivo ou uma pasta. A fonte pode ser especi%cada ao usar um gerenciador de
conex&es de ar0uivo 0ue aponta para a pasta ou ar0uivo ou fornece um nome
de uma vari2vel 0ue cont,m o camin(o de origem.
Aocando novamente no componente' sero necess2rios seis Aile SPstem )asS'
conforme a Figura 2. Eles sero respons2veis por excluir a pasta 0ue conter2
os ar0uivos do tipo +DA !baixados por meio do Aile )ransfer +rotocol 3 A)+".
T importante ligar os componentes corretamente conforme , ilustrado
na Figura 2' pois a ordem em 0ue os mesmos sero executados pode provocar
erros no pro5eto.
A pasta 0ue conter2 os ar0uivos do tipo )J) !convertidos de +DA pelo soft1are
+DA7)ext+ilot' 0ue ser2 abordado mais a frente" e a pasta 0ue conter2 os scripts
de SH* para manipulao de tabelas no banco de dados. Depois de exclu.das'
as pastas sero recriadas pelo Aile SPstem )asS. Isso foi necess2rio no pro5eto
para 0ue 0uando o mesmo fosse executado novamente no ten(a res0u.cios
dos ar0uivos anteriores.
Figura 2. /on5unto de File System Task interligados por constraints.
/ada Aile SPstem )asS foi renomeado para tornar f2cil a compreenso do 0ue
cada um far2 no /ontrol Alo1. T poss.vel fazer isso ao clicar com o boto direito
sobre cada um e no menu 0ue aparecer2' selecionar a opo Iename ou com o
componente selecionado' clicar uma vez sobre o mesmo' ento o nome %car2
marcado para 0ue se5a feita a sua alterao.
No exemplo ser2 usada como pasta principal uma 52 criada anteriormente com o
nome devmedia. Dentro dela ser2 criada a subpasta c(amada 6aAase 0ue
conter2 a subpasta +DA' %cando da seguinte forma DMNdevmediaN6aAaseN+DA.
Agora , necess2rio de%nir o 0ue cada componente ir2 fazer. +ara isso' deve3se
realizar alguns passos. +rimeiro' cli0ue duas vezes sobre o Aile SPstem )asS de
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
nome /ria pasta +DA' ou cli0ue com o boto direito sobre o mesmo e selecione
a opo Edit... no menu 0ue ir2 aparecer.
Ser2 aberta uma nova 5anela de nome Aile SPstem )asS Editor. *ocalize a opo
Operation' selecione3a' cli0ue sobre o combobox 0ue ir2 aparecer e depois em
/reate DirectorP. Aeito isso' localize a opo Source/onnection' selecione3a'
cli0ue sobre o combobox 0ue ir2 aparecer e seleciona a opo Ne1
connection...Ser2 aberta uma nova 5anela de nome Aile /onnection manager
Editor' em @sage tPpe. Selecione a opo /reate Aolder. Ao clicarmos no boto
bro1se' aparecer2 a 5anela +rocurar pasta. /rie ou selecione a pasta 0ue
armazenar2 os ar0uivos +DA 0ue sero baixados por A)+' como demonstra
a Figura .
Figura . +ropriedades do File System Task.
Aps a concluso de todos os passos ser2 criado na guia /onnection managers
uma conexo c(amada +DA 0ue ligar2 o Aile SPstem )asS R pasta em 0uesto.
Depois de criada a conexo' selecione a tarefa /riar pasta +DA' pressione A9' v2
at, o menu R direita 0ue ir2 aparecer e procure a opo DelaP Galidation. Ative3
a alterando seu valor para )rue. Isso deve ser feito' pois no momento em 0ue o
pro5eto for ser executado' a pasta vai existir. Se essa opo estiver como Aalse'
ser2 apresentado um erro no pro5eto por0ue ele valida antes tudo 0ue ser2
feito. Dessa forma' atrasa3se o processo de validao e no ocorre nen(um erro
durante a execuo.
Esses passos foram executados para criar uma pasta a partir do Aile SPstem
)asS. +ara excluir a pasta o processo , muito parecido. DU dois cli0ues sobre o
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
Aile SPstem )asS de nome Deleta pasta +DA ou cli0ue com o boto direito sobre
o mesmo e selecione a opo Edit... no menu 0ue ir2 aparecer.
Ser2 aberta uma nova 5anela de nome Aile SPstem )asS Editor. *ocalize a opo
Operation' selecione3a' cli0ue sobre o combobox 0ue ir2 aparecer e selecione a
opo Delete DirectorP. Agora localize a opo Source/onnection' selecione3a'
cli0ue sobre o combobox 0ue ir2 aparecer e selecione a opo Ne1
connection... Ser2 aberta uma nova 5anela de nome Aile /onnection manager
Editor. Em @sage tPpe selecione a opo Existing Aolder. Ao clicar no boto
bro1se' aparecer2 a 5anela +rocurar pasta' selecione a pasta 0ue armazenar2 os
ar0uivos +DA 0ue sero baixados por A)+.
Note 0ue 52 foi criada uma nova conexo na aba /onnection $anagers com um
nome gen,rico. Aps con%rmar a operao em todas as 5anelas' este nome vai
mudar para +DA6. Sugere3se 0ue se5a alterado para Deletar +DA e a conexo
respons2vel por criar a pasta renome23la para /riar +DA.
T necess2rio repetir os mesmos passos para criar e deletar a subpasta )J)
dentro da pasta 6aAase e da mesma forma criar e deletar a subpasta SH* na
pasta 6a Aase !a 4nica coisa 0ue vai mudar , o nome' o processo ser2 o
mesmo". )amb,m devemos renomear as conex&esM )J) para /riar )J) e )J) 6
para Deletar )J) e' por 4ltimo' SH* para /riar SH* e SH* 6 para Deletar SH*.
No se es0uea da ativao da opo DelaP Galidation para as tarefas de criar
pasta.
Em seguida vamos criar a tarefa 0ue vai fazer o do1nload dos ar0uivos direto
de um servidor A)+' para isso ser2 usado o A)+ )asS.
A)+ )asS
O A)+ )asS tem a funo de fazer do1nload ou upload de ar0uivos a partir de
um determinado endereo de A)+. +or exemplo' um pacote pode baixar os
ar0uivos de dados a partir de um servidor remoto ou uma localizao na
Internet como parte de um Quxo de trabal(o do pacote do SSIS.
Em tempo de execuo' a tarefa se conecta a um servidor para usar um
gerenciador de conex&es. O gerenciador de conex&es de A)+ est2 con%gurado
separadamente da tarefa' e depois , referenciado na mesma. O gerenciador de
conex&es inclui as con%gura&es do servidor' as credenciais para acessar o
servidor A)+ e op&es tais como o tempo de espera e o n4mero de tentativas
para se conectar ao servidor.
+ara o modo de con%gurao do A)+ )asS' arraste uma tarefa do mesmo para o
/ontrol Alo1' ligue o 4ltimo Aile SPstem )asS ao A)+ )asS' dU um duplo cli0ue
sobre o mesmo para iniciar a con%gurao. Ser2 aberta uma 5anela do A)+ )asS
Editor' selecione a opo do A)+ /onnection e em seguida Ne1 /onnection. Na
nova 5anela A)+ /onnection $anager Editor' na opo Server name deve ser
informado o servidor de A)+ 0ue vai conter os ar0uivos a serem baixados. Em
Server port deve ser informada a porta !provavelmente deve %car com a padro
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
96
0ue , a 76". Em @sername deve ser informado o usu2rio para se conectar ao
servidor A)+ e em +ass1ord a sen(a do usu2rio em 0uesto.
A no ser 0ue (a5a con%gura&es espec.%cas para o servidor de A)+' as
informa&es de servidor' porta' usu2rio e sen(a sero su%cientes para baixar os
ar0uivos. Aps preenc(er as con%gura&es' basta clicar em )est /onnection
para veri%car se a conexo pode ser estabelecida com sucesso' conforme
a Figura !.
Figura !. /on%gura&es do A)+ )asS.
Aps isso' caso no ten(a dado certo' veri%0ue se o endereo' usu2rio e sen(a
para o servidor de A)+ esto corretos. Neste exemplo foi usado o AileVilla !o
camin(o para fazer o do1nload do mesmo est2 na seo Links" para criar um
servidor local para efetuar os testes.
Na aba /onnection $anagers deve aparecer uma nova conexo com o nome
A)+ /onnection $anager' 0ue vai abrigar as con%gura&es informadas
anteriormente' em relao ao pro5eto de exemplo' a mesma foi renomeada para
/nxA)+.
De%nida a conexo de A)+' agora , necess2rio de%nir de 0ue pasta e ar0uivo
vai ser feito o do1nload e para onde o mesmo vai ser baixado.
/om dois cli0ues no A)+ )asS' selecione a opo Aile )ransfer R es0uerda e
novas op&es aparecero no 0uadro R direita. Altere a opo Operation' 0ue
dever2 ser marcada para Ieceive Ailes.
O prximo passo , de%nir o local 0ue vai receber os ar0uivos ou o ar0uivo. +ara
isso' selecione a opo *ocal+at( e Ne1 /onnection. Aparecer2 uma nova 5anela
Aile /onnection $anager Editor' cli0ue no boto bro1se e escol(a a pasta +DA
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
!criada anteriormente" para receber os ar0uivos no computador local. Aps
con%rmar' o prximo passo , de%nir de onde ser2 feito o do1nload dos
ar0uivos. Selecione a opo Iemote +at(O#ro1se for Aile. /aso este5a tudo
certo' 52 est2 dentro da pasta do servidor de A)+' basta agora selecionar o
ar0uivo 0ue dese5a fazer o do1nload.
O local onde se encontra os ar0uivos 0ue sero baixados no importa muito.
/aso realmente exista um camin(o de A)+ 0ue possa receber esses ar0uivos na
rede onde o computador 0ue armazenar2 o pro5eto' colo0ue os +DAs na pasta
do A)+' seno crie um servidor no computador local por meio do AileVilla.
+or 4ltimo' no caso do pro5eto exemplo tamb,m foi con%gurado para )rue a
opo Over1riteAileAtDest para 0ue a cada do1nload de um ar0uivo existente'
o mesmo ser2 substitu.do. Aps con%rmar os dados nas 5anelas' o componente
A)+ )asS 52 estar2 con%gurado como na Figura ".
Figura ". Dados de Remote Pat( e LocalPath.
Agora deve3se alterar o label do A)+ )asS para #aixar o ar0uivo do A)+' mas isso
%ca a crit,rio de cada um.
A t,cnica utilizada no exemplo foi escol(ida devido a uma necessidade real em
um pro5eto de migrao de dados. /aso o leitor no ten(a um servidor A)+
con%gurado ou no ten(a conseguido con%gurar um em sua m20uina !neste
pro5eto foi usado o AileVilla como servidor A)+"' basta copiar os ar0uivos +DA
para a pasta +DA criada anteriormente' pois no pre5udicar2 os componentes
seguintes. +ara isso' basta deixar o componente A)+ )asS desabilitado
5untamente com os componentes de criao e deleo da pasta +DA.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
@m passo simples' mas muito importante , testar o pro5eto at, este ponto' pois
se (ouver algo errado ser2 muito mais f2cil corrigir. +ara efetuar os testes basta
acessar o menu DebugOStart Debugging ou pressionar A:. /aso tudo este5a
correto' todos os componentes %caro verdes e uma mensagem na parte
inferior do /ontrol Alo1 ser2 exibida informando se a execuo foi feita com
sucesso. Se der erro' um dos componentes %car2 vermel(o e na 5anela output'
0ue aparecer2 na parte inferior' mostrar2 uma mensagem informando o erro
ocorrido durante a execuo.
Agora 0ue 52 , poss.vel fazer o do1nload dos ar0uivos +DA para a m20uina
local' , necess2rio converter os mesmos para ar0uivo no formato texto' por0ue
o SSIS at, a verso do $S SH* Server 7??=I7 no lU ar0uivos no formato +DA.
+ara isso foi utilizado um programa a parte' c(amado de +DA7)ext +ilot !o
camin(o para fazer o do1nload do mesmo est2 na seo Links"' 0ue funciona
por lin(a de comando e pode ser executado dentro de um script pelo SSIS.
/erti%car3se 0ue o programa est2 funcionado para no ter problemas ao ser
executado por meio de um script dentro do SSIS. O soft1are em 0uesto exige
0ue se ten(a uma verso atualizada do .net frame1orS. )amb,m , necess2rio
0ue o mesmo este5a com o seu camin(o dentro das vari2veis do sistema para
0ue ao acessar o mesmo por meio do script' de 0ual0uer camin(o ele possa ser
executado para realizar a converso dos ar0uivos.
Iecapitulando' faa o do1nload do +DA7)ext +ilot !ve5a a #ota $e%&an 1"'
atualize seu .net frame1orS' e colo0ue o camin(o do execut2vel dentro de +at(
em vari2veis do sistema do Kindo1s.
#ota $e%&an 1. '$F2(e)t'ilot
PDF2Text Pilot , um soft1are open source' cu5a funo , transformar ar0uivos
do formato +DA para texto e pode ser utilizado em lote e por lin(a de comando.
T uma boa pr2tica test23lo antes de usar no script cL para veri%car como , o
funcionamento do mesmo.
)este o mesmo tanto em sua forma gr2%ca' 0uanto em modo texto para se
familiarizar com a ferramenta. T necess2rio reiniciar o computador para 0ue as
con%gura&es ten(am efeito.
Script )asS
Este item permite 0ue scripts se5am criados dentro do SSIS utilizando a
linguagem G#.Net ou /L. /om o Script )asS , poss.vel aplicar v2rias
transforma&es para dados em vez de utilizar v2rias transforma&es no Quxo de
dados. +or exemplo' um script pode adicionar os valores em duas colunas e' em
seguida' calcular a m,dia da soma. T poss.vel utilizar frmulas e fun&es
personalizadas' al,m das fun&es e operadores 0ue o SSIS fornece. +or
exemplo' validar n4meros de carto de cr,dito.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
T poss.vel validar os dados de coluna e pular registros 0ue contUm dados
inv2lidos. +or exemplo' um script pode avaliar o valor de um montante e pular
registros com 0uantidades extremamente altas ou baixas. Arraste o item script
)asS para dentro do /ontrol Alo1' 0ue %car2 como na Figura *.
Figura *. Script Task.
Agora ligue o A)+ )asS ao Script )asS antes de prosseguir. Neste ponto ser2
utilizado um script em /L para 0ue os ar0uivos +DA possam ser convertidos
para texto. @tilizaremos o soft1are +DA7)ext+ilot. /omo 52 dito' o mesmo pode
ser baixado pelo camin(o especi%cado na seo *inSs. T necess2rio 0ue se
ten(a certo con(ecimento da linguagem /L para 0ue o script possa ser
compreendido' pois no , o foco explicar lin(a a lin(a o 0ue , feito no script /L.
Ao dar dois cli0ues no Script )asS e acionar o boto Edit Script...' ser2 aberta a
2rea de edio do script a ser executado. O modelo completo est2 na Listagem
2.
Listagem 2. Script para transformar +DA em texto.
us"9 S;stem<
us"9 S;stem/Data<
us"9 M%roso0t/S&lSer.er/Dts/Ru"tme<
us"9 S;stem/6"do=s/)orms<
us"9 S;stem/IO<
us"9 S;stem/Da9"ost%s<
us"9 S;stem/T(read"9<
"amespa%e ST_>0>e3e>a32?@A@%e#B3dd%?A3a:a@Cd3/%sproD
E
FS;stem/AddI"/AddI"(GS%rptMa"G, Herso" = G2/3G,
Iu#ls(er = GG, Des%rpto" = GG8J
pu#l%partal%lassS%rptMa" , M%roso0t/S&lSer.er/Dts/TasKs/
S%rptTasK/HSTARTS%rptO#De%tModelBase
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
E
Lre9o" HSTA 9e"erated %ode
e"umS%rptResults
E
Su%%ess = M%roso0t/S&lSer.er/Dts/Ru"tme/DTSE$e%Result/Su%%ess,
)alure = M%roso0t/S&lSer.er/Dts/Ru"tme/DTSE$e%Result/)alure
M<
Le"dre9o"
pu#l%.od Ma"(8
E
NNAtual!ar o %am"(o a#a$o para a u"dade &ue
NNest' se"do tra#al(ada
Te$t6rter t= = "e=Stream6rter(OGD,-de.meda-2a)ase-e$e%/#atG8<
NNAtual!ar o %am"(o a#a$o para a u"dade &ue
NNest' se"do tra#al(ada
str"9 .are$e% = OG te$te$tra%t/e$e GG D,-de.meda-2a)ase-pd0GG
Nto GG D,-de.meda-2a)ase-t$tGGG<
t=/6rte*"e(.are$e%8<
t=/6rte*"e(Ge$tG8<
t=/Close(8<
NNIro.o%a uma pe&ue"a pausa "a e$e%uPQo do s%rpt
T(read/Sleep(23338<
NNe$e%utar o ar&u.o #at %rado
Iro%essStartI"0o start = "e=Iro%essStartI"0o(8<
start/UseS(ellE$e%ute = 0alse<
start/Redre%tSta"dardOutput = true<
start/)leName = OGCMDG<
NNAtual!ar o %am"(o a#a$o para a u"dade &ue est'
NNse"do tra#al(ada
start/Ar9ume"ts = OG N%start D,-de.meda-2a)ase-e$e%/#atG<
Iro%ess/Start(start8<
Dts/TasKResult = ("t8S%rptResults/Su%%ess<
M
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
96
97
98
MM
+ara testar se o script est2 oS' pode3se executar o #uild pressionando
/trlWS(iftW#. Se tivermos algo errado na sintaxe' isto vai ser acusado via
mensagem na aba Error*ist. Em seguida' renomeie o Script )asS para
)ransforma +DA em )J).
O prximo passo , adicionar mais um item Script )asS ao pro5eto. Ele ter2 a
funo de veri%car se o soft1are +DA7)ext+ilot ainda est2 em execuo no
sistema antes de passar para o prximo item. Isso foi necess2rio devido ao fato
de 0ue aps o primeiro Script )asS ser iniciado e c(amar o +DA7)ext+ilot' ele
prossegue com a execuo das outras tarefas. Assim' o pro5eto precisa acionar
os ar0uivos textos. /om isso' o soft1are ainda est2 convertendo os mesmos'
dessa forma causa3se um erro durante o processo.
Deve3se clicar duas vezes sobre o Script )asS' clicar no boto Edit ScriptOEditor
de Script e colocar o cdigo da Listagem .
Listagem .Geri%ca se a 5anela do /$D foi fec(ada.
us"9 S;stem<
us"9 S;stem/Data<
us"9 M%roso0t/S&lSer.er/Dts/Ru"tme<
us"9 S;stem/6"do=s/)orms<
us"9 S;stem/Da9"ost%s<
"amespa%e ST_@?3#CB?a#@%5A@:ABd?5e%02ea032a#A/%sproD
E
FS;stem/AddI"/AddI"(GS%rptMa"G, Herso" = G2/3G,
Iu#ls(er = GG, Des%rpto" = GG8J
pu#l%partal%lassS%rptMa" ,
M%roso0t/S&lSer.er/Dts/TasKs/S%rptTasK/
HSTARTS%rptO#De%tModelBase
E
Lre9o" HSTA 9e"erated %ode
e"umS%rptResults
E
Su%%ess = M%roso0t/S&lSer.er/Dts/Ru"tme/
DTSE$e%Result/Su%%ess,
)alure = M%roso0t/S&lSer.er/Dts/Ru"tme/
DTSE$e%Result/)alure
M<
Le"dre9o"
pu#l%.od Ma"(8
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
E
Str"9 a = GCMDG<
Str"9 #.ar = a<
=(le (a == GCMDG8
E
a = str"9/Empt;<
Iro%essFJ pro%essos = Iro%ess/GetIro%esses(8<
0orea%( (Iro%ess pro%esso " pro%essos8
E
0 (pro%esso/Iro%essName/ToUpper(8 == #.ar8
E
a = pro%esso/Iro%essName/ToUpper(8<
MNN0e%(a 0
MNN0e%(a 0orea%(
MNN0e%(a =(le
M
MM
Aps isso' pressione /trlWS(iftW# para veri%car se (2 algum erro de sintaxe. Se
tudo estiver oS' basta fec(ar o item' renome23lo para veri%car se terminou a
converso.
B2 com os ar0uivos convertidos no formato )J)' , (ora de transferi3los para
dentro do SH* Server' mas de forma autom2tica para 0ue eles se5am tratados.
Ser2 necess2rio o uso de um novo item 0ue veremos a seguir e , muito 4til para
a leitura dos ar0uivos.
Aoreac( *oop /ontainer
O Aoreac( *oop /ontainer de%ne um Quxo de controle repetitivo em um pacote.
A implementao de loop , semel(ante R estrutura de loop Aoreac( em
linguagens de programao. Em um pacote' o looping , ativado por meio de um
enumerador Aoreac(. O Aoreac( *oop /ontainer repete o Quxo de controle para
cada membro de um enumerador especi%cado.
De forma ob5etiva' este item pode ler o nome de todos os ar0uivos de uma
pasta ou todas as tabelas de um banco de dados e trazer o nome dos mesmos.
+ara isso' , preciso con%gur23lo de acordo com a funo dese5ada. O valor do
0ue se lU num determinado momento , armazenado em uma vari2vel de%nida
pelo usu2rio' 0ue pode ser manipulada depois 0ue o valor , coletado dentro do
item' o componente , demonstrado na Figura +.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
Figura +. Foreach Loop Container.
+ara poder executar o prximo passo , de extrema import-ncia a criao de
uma vari2vel 0ue vai armazenar alguns dados do processo de execuo do
pro5eto.
Ao inv,s de criar um processo de insero para cada um dos ar0uivos' o 0ue
no , aceit2vel nesse pro5eto' cada um ser2 lido uma vez e acrescentado ao
banco de dados como uma nova tabela. O Aoreac( *oop /ontainer , a pea
c(ave para 0ue isso acontea' mas ele precisa de uma vari2vel para armazenar
o nome de cada ar0uivo 0ue ele vai ler para 0ue este ar0uivo possa ser
manipulado e inserido no SH* Server.
Gari2veis
O SSIS suporta dois tipos de vari2veisM as de sistema e as de%nidas pelo usu2rio.
O SSIS gera automaticamente as vari2veis de sistema. O usu2rio pode criar uma
vari2vel conforme a necessidade para con%gurar o seu pacote. No entanto'
ambos os tipos de vari2veis podem armazenar dados 0ue as tarefas e os
recipientes podem acessar durante a execuo. Al,m disso' os componentes do
pacote podem salvar os dados em vari2veis de%nidas pelo usu2rio durante a
execuo a %m de passar essa informao em outros ob5etos.
As vari2veis so 4teis numa s,rie de situa&es. Elas podem ser ligadas aos
par-metros do cdigo SH* em um item Execute SH* )asS' ou utiliz23las para
fornecer listas interativas necess2rias para executar uma tarefa *oop Aoreac(.
Gari2veis SSIS tamb,m podem ser mapeados para serem usadas dentro de um
Script )asS ou Script /omponent do DataAlo1.
+ara criar uma vari2vel dentro do pro5eto' tanto dentro do /ontrolAlo1 0uanto
do DataAlo1' deve3se clicar com o boto direito na 2rea de trabal(o do
/ontrolAlo1 ou Data Alo1OGariables' surgir2 uma 5anela R direita 52 pronta para
criar uma vari2vel do pro5eto do SSIS' onde deve3se de%nir o nome' 0ual o seu
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
escopo' o tipo e se vai conter algum valor pr,3determinado. No pro5eto ela ser2
c(amada de vardir' seu escopo ser2 o pacote atual' seu tipo ser2 String e no
conter2 nen(um valor' como demonstra a Figura ,.
Figura ,. /riao de vari2vel.
Depois de criada a vari2vel' , (ora de con%gurar o Aoreac( *oop /ontainer.
Deve3se selecionar o mesmo para acessar o Aoreac( *oop Editor' escol(er a
opo /ollectionOenumerator' seleciona3se Aoreac( Aile Enumerator !mesmo
0ue a opo 52 este5a vis.vel". Em folder devemos indicar ou localizar 0ual o
camin(o dos ar0uivos )J) 0ue estaro na pasta criada anteriormente com o
nome de )J).
Em Ailes' selecione o tipo de ar0uivo a ser lido dentro da pasta' neste caso X.txt
para pegar todos os ar0uivos do tipo )J). Em Ietrieve %le nameOName onlP
para 0ue se5a coletado apenas o nome do ar0uivo' caso contr2rio' vem com o
camin(o do mesmo 5unto ao nome. A opo )raverse SubAolders deve %car
desmarcada' pois serve para procurar em subpastas' como demonstra aFigura
-.
Figura -. /on%gurao Foreach Loop Container.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
Agora selecione a opo Gariable $appings. No item Gariable selecione a
vari2vel vardir e o index deixar como ?. Aeito isto' con%rme operao.
B2 com o Aoreac( *oop /ontainer con%gurado' , (ora de de%nir um nome para o
mesmo' 0ue ser2 C/ontainer de insert dos DadosE.
@m passo importante agora , criar uma pasta dentro de devmediaN6aAase. Essa
pasta deve se c(amar Ar0+adraoVerado. Ela conter2 um ar0uivo com extenso
SH* com o nome selecionar.s0l. Esse ar0uivo deve ser criado antes de
con%gurar o item' ento utilize o Notepad para cri23lo e depois mude a extenso
para SH* !, necess2rio 0ue a visualizao da extenso dos ar0uivos este5a
(abilitada no Explorer do Kindo1s' pois pode dar erro ou confuso com o nome
do ar0uivo se a extenso no for renomeada corretamente".
T necess2rio fazer a adio de mais um componente Aile SPstem )asS dentro do
Aoreac( *oop /ontainer e renome23lo para C/opia ar0uivo SH* zeradoE. Ele vai
servir para copiar um ar0uivo de script SH* vazio para a pasta SH*. Esse
ar0uivo , um ar0uivo padro 0ue vai ser utilizado para armazenar o script
criado para a criao de cada tabela correspondente a um ar0uivo )J).
+ara con%gurar o Aile SPstem )asS siga os passosM dU dois cli0ues sobre o Aile
SPstem )asS de nome C/opia ar0uivo SH* zeradoE ou cli0ue com o boto direito
sobre o mesmo e selecione a opo Edit.... Ser2 aberta uma nova 5anela de
nome Aile SPstem )asS Editor. *ocalize a opo Operation e selecione3a. /li0ue
sobre o combobox 0ue ir2 aparecer e cli0ue em /opP Aile. Aeito isso' localize a
opo Source/onnection e selecione3a' clicando em seguida sobre o combobox
0ue ir2 aparecer e depois em Ne1 connection... Ser2 aberta uma nova 5anela de
nome Aile /onnection manager Editor. Em @sage tPpe' selecione a opo /reate
Aile. Ao clicar no boto bro1se' aparecer2 a 5anela +rocurar pasta. Neste ponto ,
necess2rio selecionar a pasta 0ue contem o ar0uivo SH* !a pasta tem o nome
SH*' ela , a subpasta de 6aAase" a ser copiado para o local de destino. O
ar0uivo tem o nome selecionar.s0l conforme Figura 1..
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
Figura 1.. Ar0uivo a ser copiado no File System Task.
Aps as con%gura&es demonstradas na Figura 1.' , necess2rio con%gurar a
opo Destination /onnection. Ao localizar a opo' selecione3a' cli0ue sobre o
combobox na opo Ne1 connection... e cli0ue em Existing Aolder. Ao clicar no
boto bro1se' aparecer2 a 5anela +rocurar pasta. Neste ponto , necess2rio
selecionar a pasta 0ue vai conter o ar0uivo SH* conforme Figura 11.
Figura 11. /on%gurao File System Task para pasta de destino.
Aps estes passos' deve3se renomear as novas conex&es 0ue apareceram na
aba /onnection manager. +rovavelmente o nome delas vai estar como
selecionar.s0l e selecionar.s0l 6. Ienomeie para OrigemS0lVerado e
6
7
8
9
:
;
<
=
>
6?
66
67
DestinoS0lVerado. T necess2rio fazer os testes no decorrer do pro5eto para
corrigir os poss.veis erros. +rovavelmente vocU ten(a algum erro relacionado ao
ar0uivo selecionar.s0l informando 0ue 52 existe. Neste caso' deve3se marcar a
opo OverKrite Destination para )rue dentro de Aile SPstem )asS Editor. Essa
opo serve para sobrescrever o ar0uivo caso ele 52 exista.
Agora , necess2rio arrastar mais um Script )asS para dentro do Aoreac( *oop
/ontainer' renome23lo para Ienomeia ar0uivo SH*. Ele ser2 respons2vel por
renomear o ar0uivo selecionar.s0l para o nome do ar0uivo txt 0ue for lido pelo
Aoreac( *oop /ontainer.
Agora realize os passos da seguinte formaM entre no Script )asS Editor' selecione
IeadOnlPGariables' cli0ue no boto e ento aparecer2 uma nova 5anela.
Selecione @serMMvardir e con%rme' conforme a Figura 12. Depois disso' cli0ue
no boto Edit Script... para criar o script 0ue renomeia o ar0uivo.
Figura 12. Selecionar vari2vel do usu2rio.
A funo do script ser2 renomear o ar0uivo selecionar.s0l para o nome do
ar0uivo )J) 0ue corresponde ao nome do ar0uivo 0ue foi convertido do +DA. A
cada interao do Aoreac( *oop /ontainer ser2 copiado um novo ar0uivo
selecionar.s0l para a pasta e o mesmo ser2 renomeado com o nome do prximo
ar0uivo )J) e assim sucessivamente at, o Aoreac( *oop /ontainer ler todos os
ar0uivos.
O cdigo do script %car2 conforme apresentado na Listagem !.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
Listagem !.Ienomeia o ar0uivo selecionar.s0l.
us"9 S;stem<
us"9 S;stem/Data<
us"9 M%roso0t/S&lSer.er/Dts/Ru"tme<
us"9 S;stem/6"do=s/)orms<
us"9 S;stem/IO<
us"9 S;stem/Colle%to"s<
"amespa%e ST_%%e>#C:e@@B3AB02#0>#@32A3A?eC#0@/%sproD
E
FS;stem/AdI"/AddI"(GS%rptMa"G, Herso" = G2/3G,
Iu#ls(er = GG, Des%rpto" = GG8J
pu#l%partal%lassS%rptMa" , M%roso0t/S&lSer.er/Dts/TasKs/
S%rptTasK/HSTARTS%rptO#De%tModelBase
E
Lre9o" HSTA 9e"erated %ode
e"umS%rptResults
E
Su%%ess = M%roso0t/S&lSer.er/Dts/Ru"tme/DTSE$e%Result/Su%%ess,
)alure = M%roso0t/S&lSer.er/Dts/Ru"tme/DTSE$e%Result/)alure
M<
Le"dre9o"
pu#l%.od Ma"(8
E
str"9 temp.ar = Dts/Hara#lesFGUser,,.ardrGJ/Halue/ToStr"9(8<
Str"9 str = temp.ar<
NNAtual!ar o %am"(o a#a$o para a u"dade &ue est'
NNse"do tra#al(ada
S;stem/IO/)le/Mo.e(GD,--de.meda--2a)ase--SR*--sele%o"ar/s&lG,
GD,--de.meda--2a)ase--SR*--G S str S G/s&lG8<
NNAtual!ar o %am"(o a#a$o para a u"dade &ue est'
NNse"do tra#al(ada
str"9 strIat()le = OGD,--de.meda--2a)ase--SR*--G S str S G/s&lG<
Arra;*st arrTe$t = "e=Arra;*st(8<
arrTe$t/Add(G%reate ta#le -GG S str S G-G ( %olu"a .ar%(ar(233388G8<
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
96
97
tr;
E
0 ()le/E$sts(strIat()le88
E
us"9 (Stream6rter s= = )le/Appe"dTe$t(strIat()le88
E
0orea%( (str"9 sOutput " arrTe$t8
s=/6rte(sOutput8<
M
M
M
%at%( (E$%epto" e$8
E
Messa9eBo$/S(o=(GErro TTT G S e$/ToStr"9(88<
M
Dts/TasKResult = ("t8S%rptResults/Su%%ess<
M
MM
$ais uma vez deve3se pressionar /trlWS(iftW# para veri%car se o cdigo est2
correto' desde 0ue nen(um erro se5a gerado' deve3se salvar e fec(ar o editor e
testar o pro5eto novamente.
O prximo item a ser adicionado agora , o Execute SH* )asS 0ue dever2 ser
renomeado para CExecutar script SH*E. Ele ter2 a funo de executar os scripts
criados para 0ue se5am inclu.das no banco as tabelas 0ue armazenaro os
dados dos ar0uivos )J).
Execute SH* )asS
O Execute SH* )asS trabal(a com instru&es SH* ou procedimentos
armazenados a partir de um pacote. A tarefa pode conter uma 4nica instruo
SH* ou v2rias instru&es SH* 0ue so executados se0uencialmente. Ele pode
ser usado para truncar uma tabela ou vie1 em preparao para a insero de
dados' criar' alterar e descartar ob5etos de banco de dados' tais como tabelas e
vie1s' recriar tabelas fato e dimens&es antes de carregar dados dentro deles.
Al,m disso' ele pode ser usado para salvar o con5unto de lin(as retornado de
uma consulta em uma vari2vel e pode ser usado em combinao com o *oop
Aoreac( e Aoreac( *oop /ontainer para executar v2rias instru&es SH*.
Depois de inserido o componente' o passo a passo , dar um duplo cli0ue sobre
o Execute SH* )asS e ser2 aberto Execute SH* )asS Editor. Aeito isso' selecione
SH* Statement e depois SH*Source)PpO Aile /onnection' onde deve clicar no
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
combobox do mesmo e selecionar Ne1 /onnection.... Ser2 aberta a 5anela Aile
/onnection $anager Editor onde deve ser escol(ido 0ual o ar0uivo a ser
executado.
Na pasta SH*' selecione o ar0uivo para ser executado e con%rme as opera&es.
*embre3se 0ue este processo ser2 alterado para 0ue se5a executado todos os
ar0uivos SH* criados anteriormente. T prov2vel 0ue o nome da conexo criada
na Aba /onnection $anagers deve estar como AdministradorDgv.s0l. Deve3se
renomear a mesma para /ria)abGazia.
No es0uea 0ue depois de renomeada' a mesma deve ser selecionada em
Execute SH* )asS na opo Aile /onnection. Substitua o nome do ar0uivo 0ue foi
atualizado' isso 0uer dizer 0ue o nome em Aile /onnection provavelmente este5a
com algo do tipo AdmistradorDgv e agora deve %car como /ria)abGazia. Deve3se
ir at, as propriedades da conexo' clicar com o boto direito ou marcar a
mesma e pressionar A9' selecionar Expressions e clicar no boto 0ue ir2 c(amar
uma nova 5anela.
Neste momento ser2 aberta a tela +ropertP Expression Editor. Deve3se
selecionar a opo /onnection String e clicar no boto associado a essa opo.
Aeito isso' ser2 aberto o Expression #uilder. Dentro do seu editor' colo0ue a
seguinte lin(a !do 5eito 0ue est2 abaixo incluindo as aspas"' 0ue vai ser
respons2vel por executar os scripts SH* criados anteriormenteM
YDMNNdevmediaNN6aAaseNNSH*NNYWZ[@serMMvardir\WY.s0lY.
Aeito isso' con%rme todas as op&es conforme Figura 1.
Figura 1. Selecionar vari2vel do usu2rio.
$ais uma con%gurao necess2ria , a de%nio de 0uais bancos de dados sero
executados os scripts de criao das tabelas. +ara isso' deve3se estar dentro do
Execute SH* Editor. Selecione a Opo /onnection e depois Ne1 /onnection...'
ser2 aberta a 5anela /on%gure O*E D# /onnection $anager. Deve3se ento
clicar no boto Ne1' de%nir o Server name da m20uina 0ue vai conter o pro5eto.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
/omo neste exemplo trata3se do servidor principal do SH* Server 7??=I7'
bastou apenas colocar um Y.NY !sem aspas" para 0ue o programa identi%casse o
servidor da m20uina.
Se necess2rio' de%na o usu2rio e sen(a. No pro5eto exemplo no , preciso' pois
foi criado com o Kindo1s Aut(entication. +or 4ltimo' deve3se ir at, Select or
Enter Database Name e selecionar o banco de dados 0ue vai armazenar as
tabelas. Neste caso o banco de dados tem o nome de Importa.
+ara testar a conexo pode3se pressionar o boto )est /onnection. /aso este5a
tudo oS' , s con%rmar todas as op&es selecionadas ou alteradas at, a0ui'
como demonstra a Figura 1!.
Figura 1!. /on%gurando o banco de dados no Execute SH* )asS.
Outro detal(e importante , ir nas propriedades com Execute SH* )asS e na
opo DelaP Galidation e marc23la para )rue. Isso atrasa a validao do script
para 0ue os dados se5am passados pela vari2vel. Agora sim' o pro5eto pode ser
testado novamente. O 4ltimo item deste pacote ser2 o item para fazer o bulS
insert dos dados dentro das tabelas criadas anteriormente no banco de dados
Importa.
#ulS Insert )asS
O #ulS Insert )asS fornece uma maneira e%ciente para copiar grandes
0uantidades de dados em uma tabela ou Gie1 do SH* Server. +ara garantir uma
alta velocidade na cpia dos dados' as transforma&es no podem ser
realizadas sobre os dados en0uanto esto em movimento a partir do ar0uivo de
origem para a tabela ou Gie1.
A con%gurao do item , tran0uila assim como as outras e ser2 procedido da
seguinte forma. +rimeiro o mesmo deve ser renomeado para Inserindo Dados.
Em seguida' acesse o #ulS Insert )asS Editor. Depois deve3se selecionar
/onnection' procurar por Source /onnection e selecionar Aile. /li0ue no
combobox e selecione Ne1 /onnection...' em @sage tPpe' selecione Existing
Aile.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
Aeito isso' cli0ue no boto bro1se da opo Aile. Isto abrir2 uma 5anela com
nome Select Aile' deve3se ir at, a pasta onde esto os ar0uivos )J) e selecionar
um dos mesmos' pois isso ser2 automatizado mais a frente.
/on%rme as op&es at, voltar R 5anela #ulS Insert )asS Editor. Selecione
Expressions' depois $isc' em seguida Expressions' clica3se no sinal de positivo e
depois no boto 0ue ir2 abrir o +ropertP Expressions. Agora selecione
Destination )ablename e cli0ue no boto para abrir o Expression #uilder.
+or %m' insira o seguinte cdigo no mesmo !incluindo as aspas"M
!dtDstr':?'67:7"Y[importa\.[dbo\.[YW
!dtDstr'7??'67:7"replace!Z[@serMMvardir\'YNYY'YY"W!dtDstr':?'67:7"Y\Y
Aeito isso' cli0ue em Evaluate Expression para testar a expresso. /aso este5a
tudo certo' con%rme a operao e retorne para a tela de #ulS Insert )asS Editor
como demonstra a Figura 1".
Figura 1". /on%gurao doBulk Insert Task.
Na aba do /onnection $anager' deve ter aparecido uma conexo com o nome
de um dos ar0uivos )J). T bom renomea3la para um nome mais f2cil de
identi%car a conexo' neste caso seria ideal algo como )abIecDados.
Depois de renomeada' devem ser acessadas as propriedades da mesma e na
5anela 0ue se abrir' deve ser localizada a opo Expressions' deve3se clicar no
sinal de positivo e depois no boto 0ue ir2 aparecer. Gai ser aberta uma nova
5anela com o nome de +ropertP Expression Editor.
Selecione a opo connection string e cli0ue no boto da mesma. Ser2 aberto o
Expression #uilder' nele dever2 ser inserido o seguinte cdigoM
YDMNNdevmediaNN6aAaseNN)J)NNYWZ[@serMMvardir\WY.txtY' 0ue deve ser copiado
inclusive com as aspas.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
Agora cli0ue no Evaluate Expression para ver se a expresso est2 correta. Em
caso positivo' con%rme todas as opera&es. A Figura 1* demonstra as 5anelas
percorridas.
Figura 1*. /on%gura3se as propriedades de )abIecDados.
Neste momento deve ser acessada a propriedade do #ulS Insert )asS. Dentro de
/onnection' selecione Destination /onnection' em seguida /onnection'
especi%0ue 0ual banco ser2 o destino dos dados. +rovavelmente 52 (aver2 uma
conexo com o nome do banco Importa' a mesma deve ser selecionada. Ainda
na 5anela de propriedades' localize a opo DelaP Galidation e mar0ue3a como
)rue.
Se tudo funcionou de forma correta at, o momento' %naliza3se a primeira fase
do pro5eto' tal fase , a correspondente R fase de Extract ou extrao dos dados'
a primeira fase processo de E)*.
Ao veri%car as tabelas criadas' nota3se 0ue (2 uma grande 0uantidade de
su5eira nos dados' su5eira essa 0ue ser2 removida na prxima fase' 0ue ser2 a
de transformao dos dados. Aoi poss.vel ver at, a0ui 0ue , poss.vel
automatizar um processo com o m.nimo de interao (umana poss.vel
trabal(ando3se com o SSIS.
/oncluso
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
Neste artigo teve por ob5etivo demonstrar como pode ser feita a extrao de
dados atrav,s de uma fonte de dados no formato +DA. +ercebemos 0ue o SSIS
no lU de um ar0uivo no formato +DA' ento a soluo encontrada foi
transformar o ar0uivo do tipo +DA para texto sem deixar de usar o SSIS.
Aazendo isso' o mesmo passa a interagir com um programa externo de
converso de dados.
Aoi encontrada uma soluo para automatizar a criao de tabelas e insero de
dados de forma autom2tica com os recursos do SSIS. Aoram utilizados tamb,m
recursos de manipulao de ar0uivos atrav,s de scripts na linguagem /L' mas
vimos 0ue pode ser utilizada tamb,m a linguagem vb.net.
)amb,m foi utilizado o recurso de se baixar ar0uivos por meio de um servidor
A)+. $as este passo no , obrigatrio' os ar0uivos podem estar dispon.veis
diretamente na rede em 0ue o usu2rio estiver trabal(ando. /omo dito no artigo'
foi uma necessidade 0ue tivemos no pro5eto 0ue serviu de inspirao para este'
ento foi considerado algo importante de ser demonstrado caso algum leitor
ten(a tal necessidade.
As t,cnicas de automatizao da extrao de dados aprendidas podem ser
utilizadas em diversos pro5etos e as mesmas podem ser customizadas conforme
a necessidade e demanda do cliente.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
Automatizao de dados com o SSIS
Neste artigo so explorados conceitos sobre o mdulo SSIS presente
na ferramenta #IDS !#usiness Intelligence Developer Studio" da
empresa $icrosoft.
Automatizao de dados com o SSIS
Neste artigo so explorados conceitos sobre o mdulo SSIS presente na
ferramenta #IDS !#usiness Intelligence Developer Studio" da empresa $icrosoft.
Aps de%ni&es sobre os principais conceitos e aplicabilidades da ferramenta e
seus componentes no artigo anterior sobre extrao de dados' sero detal(ados
conceitos sobre a transformao de dados' a segunda fase do E)*. +or %m'
teremos uma concluso descrevendo a import-ncia e os benef.cios em con(ecer
a automatizao da manipulao de dados no processo de E)*.
Em que situao o tema til
A aplicao de conceitos sobre tratamento de dados com E)* !Extract'
)ransform and *oad"' Extrao' )ransformao e /arga' , recomendada para
empresas de todos os segmentos' em especial' empresas com diversas fontes
de dados' para 0ue possam fazer o tratamento e manipulao dos dados de
forma automatizada e organiz23los para popular o seu data 1are(ouse
!armaz,m de dados" ou seu datamart !repositrio de dados 0ue pode formar um
data 1are(ouse"' facilitando o processo' aumentando a produtividade e
diminuindo a margem de erro.
Atualmente a produo de informao , incessante. Al,m disso' in4meras
empresas possuem v2rias fontes de dados em diversos formatos. +ara obter
informa&es desses dados armazenados em fontes diversas' surge a
necessidade de integr23los de forma pr2tica' 2gil e produtiva.
Diversas t,cnicas para ordenao' agrupamento e padronizao de dados
podem ser utilizadas para isso. Al,m disso' , fundamental 0ue este processo
se5a automatizado de forma a alimentar mais rapidamente a base de dados de
apoio Rs tomadas de decis&es gerenciais.
+ara %ns de exempli%cao' foram utilizadas bases de dados de um concurso
p4blico da @ABA. As bases de dados so p4blicas e podem ser encontradas no
site da @niversidade Aederal de Buiz de Aora.
No artigo anterior' foi demonstrado o processo de extrao de dados' 0ue tem
como fonte ar0uivos no formato +DA. Os mesmos precisam ser convertidos para
texto e posteriormente armazenados no banco de dados relacional. Assim'
atrav,s do primeiro artigo foi poss.vel demonstrar como realizar o processo de
extrao de dados !primeira fase do E)*" de forma automatizada. A ferramenta
utilizada foi o #IDS' 0ue possui o mdulo SSIS 0ue , espec.%co para este tipo de
operao.
6
7
8
9
:
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
96
97
Neste artigo ser2 demonstrada a segunda fase do processo de E)*' a
transformao dos dados. Sero realizadas diversas modi%ca&es nos dados
brutos' transformando os mesmos em dados lapidados' fazendo uso novamente
do SSIS. +ara tanto ser2 necess2rio tomar con(ecimento de diversos
componentes e saber suas respectivas aplicabilidades. Atrav,s das t,cnicas de
transformao ser2 poss.vel separar' modi%car e categorizar os dados de forma
simples' r2pida e automatizada.
)ransformao dos dados
O processo de E)* consiste em trUs etapas' o foco deste artigo , a fase de
transformao. Depois de realizada a fase de extrao dos dados no artigo
anterior' tem3se os dados dos ar0uivos 0ue estavam no formato +DA carregados
em tabelas dentro do banco Importa no SH* Server 7??= I7.
Os dados extra.dos dos ar0uivos +DA esto na forma bruta' (2 a necessidade de
realizar diversas transforma&es' por exemploM retirar os cabeal(os' separar
campos' criar novas vari2veis' criar novas tabelas' tratar data de nascimento
entre outros. Esta fase ir2 gerar uma nova tabela 0ue o usu2rio no ter2 acesso'
apenas o desenvolvedor ou a e0uipe de desenvolvimento ter2 con(ecimento da
mesma' geralmente a mesma , con(ecida como 2rea de Stage !uma 2rea de
armazenamento tempor2rio para os dados tratados".
+ara prosseguir com o pro5eto' ser2 necess2rio criar uma nova tabela 0ue
receber2 os dados 0ue sero retirados das tabelas importadas anteriormente.
Essa tabela ser2 c(amada de tabDtratada' ela ir2 receber os itens tratados e
separados de acordo com a relev-ncia de cada um. O item referente R data de
nascimento ser2 do tipo date' os demais itens sero do tipo String varc(ar. +ara
realizar este procedimento deve3se executar o script contido na Listagem 1.
Ele tem a funo de veri%car se a tabela 52 existi' e se existir' a mesma ser2
removida e criada novamente.
Listagem 1. /ria a tabela tab_trataa.
USE FImportaJ
I) E4ISTS (SE*ECT U )ROM s;s/o#De%ts 67ERE
o#De%t_d = OBVECT_ID(N+Fd#oJ/Fta#_tratadaJ+8
AND t;pe " (N+U+88
DROI TAB*E Fd#oJ/Fta#_tratadaJ

SET ANSI_NU**S ON
SET RUOTED_IDENTI)IER ON
SET ANSI_IADDING ON

CREATE TAB*E Fd#oJ/Fta#_tratadaJ(
F%lass0%a%aoJ F.ar%(arJ(:558 NU**,
F"omeJ F.ar%(arJ(:558 NU**,
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
96
FtotalJ F.ar%(arJ(:558 NU**,
Fl"9_portJ F.ar%(arJ(:558 NU**,
Fra%_lo%_&ua"tJ F.ar%(arJ(:558 NU**,
Fle9sla%aoJ F.ar%(arJ(:558 NU**,
F%o"_espJ F.ar%(arJ(:558 NU**,
Fpr_prat%aJ F.ar%(arJ(:558 NU**,
F%dadeJ F.ar%(arJ(:558 NU**,
F%ar9oJ F.ar%(arJ(:558 NU**,
F"s%J F.ar%(arJ(:558 NU**,
Fdata_"as%J FdateJ NU**
8 ON FIRIMARWJ

SET ANSI_IADDING O))
/om o intuito de organizar mel(or os dados' ser2 utilizada a subpasta c(amada
scripts' 0ue est2 contida na pasta devmedia' DMNdevmediaNScripts. A mesma
conter2 todos os scripts necess2rios ao pro5eto' ento , aconsel(2vel 0ue tanto
o script de criao do banco de dados !demonstrado no artigo anterior" 0uanto
o script de criao da tabela tabDtratada este5am nessa pasta para 0ue possam
ser localizados facilmente.
Aaz3se necess2rio criar um novo pacote para 0ue os dados carregados se5am
trabal(ados de forma ade0uada. +ara isso' abra o pro5eto SSIS desenvolvido no
artigo anterior' acione o Solution Explorer O SSIS pacSages O Ne1 SSIS
+acSage' crie um novo pacote e o renomeie como )ransform.dtsx.
A primeira ao a ser realizada , arrastar um novo componente Execute SH*
)asS para o /ontrol Alo1 e renome23lo para /ria )abD)ratada. Deve3se con%gurar
o mesmo para acessar o banco de dados Importa da seguinte formaM com dois
cli0ues sobre o componente ou acessando o modo de edio clicando com o
boto direito sobre o mesmo e selecionando Edit...' selecione a opo
/onnection e depois Ne1 /onnection... Ser2 aberta a 5anela /on%gure O*E D#
/onnection $anager' deve3se clicar no boto Ne1' de%nir o Server name da
m20uina 0ue vai conter o pro5eto' no caso deste exemplo' , o servidor local do
SH* Server 7??= I7. Assim' basta colocar um Y.NY !sem aspas" para 0ue o
programa identi%0ue o servidor.
Se necess2rio' vocU poder2 de%nir o usu2rio e sen(a' mas no pro5eto exemplo
no , preciso' pois foi criado com o modo Kindo1s Aut(entication. +or 4ltimo'
deve3se ir at, Selector Enter Database Name e selecionar o banco de dados 0ue
ir2 armazenar as tabelas. Neste caso o banco de dados tem o nome de Importa.
+ara testar a conexo pode3se pressionar o boto )est /onnection. /aso este5a
tudo correto' con%rme todas as op&es selecionadas ou alteradas at, a 5anela
do Execute SH* )asS Editor' como demonstra a Figura 1.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
Figura 1. /on%gurando o banco de dados no Execute SH* )asS.
/om o banco devidamente con%gurado' faz3se necess2rio criar a tabela 0ue ir2
receber os dados separadamente. Ser2 demonstrado como realizar tal
procedimento atrav,s do uso de componentes do SSIS. /erti%0ue3se 0ue o
Execute SH* )asS Editor este5a aberto' localize a opo S0lsourcetPpe e altere a
mesma para Aile /onection. Na opo abaixo' tamb,m com nome Aile
/onnection' selecione Ne1 /onnection... Ser2 aberta a 5anela de Aile /onnection
$anager Editor. /erti%0ue3se de 0ue a opo @sage )Ppe este5a marcada como
Existing Aile' cli0ue no boto #ro1se e v2 at, a pasta em 0ue se encontra o
script de criao da tabela tabDtratada e selecione3o. Aeito isso' con%rme todas
as opera&es feitas conforme a Figura 2. )este o pro5eto' ve5a se a tabela
realmente foi criada.
Figura 2. /on%gurando as propriedades de /ria )abD)ratada.
Agora crie uma vari2vel do tipo String com o nome Gar)ab. Essa vari2vel ter2 a
funo de armazenar os nomes das tabelas 0ue sero lidas durante a execuo
do Aoreac( *oop /ontainer. +ara criar uma vari2vel dentro do pro5eto' tanto
dentro do /ontrol Alo1 0uanto do Data Alo1' deve3se clicar com o boto direito
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
na 2rea de trabal(o do /ontrol Alo1 ou Data Alo1 e selecionar a opo
Gariables. Aeito isso surgir2 uma 5anela R direita 52 pronta para criar uma
vari2vel do pro5eto do SSIS' onde se deve de%nir o nome' 0ual o escopo' o tipo e
se vai conter algum valor pr,3determinado. No pro5eto ela ser2 c(amada de
Gar)ab como dito anteriormente. Seu escopo ser2 o pacote atual' seu tipo ser2
String e no conter2 nen(um valor.
T necess2rio inserir um item Aoreac( *oop /ontainer e ligar o Execute SH* )asS
ao mesmo. De forma resumida' pode3se dizer 0ue o mesmo , capaz de
percorrer um con5unto de ar0uivos de uma pasta ou percorrer um con5unto de
tabelas dentro de um banco de dados e armazenar os dados lidos em uma
vari2vel. Neste processo o mesmo ir2 percorrer o con5unto de tabelas criadas a
partir dos ar0uivos do tipo +DA e armazenar o nome das mesmas
separadamente a cada iterao dentro da vari2vel Gar)ab.
As prximas altera&es sero executadas no Aoreac( *oop /ontainer. Altere o
nome do mesmo para Separa Itens' entrando nas propriedades de edio do
componente' acesse o Aoreac( *oop Editor e selecione /ollection R direita da
5anela aberta. ] direita localize Enumerator e selecione Aoreac( S$O
Enumerator. Em /onnection $anager' dever2 ser criada uma nova conexo com
o banco de dados. Selecione ne1 /onnection...' localize o nome do seu servidor'
caso se5a necess2rio colo0ue o @ser name e +ass1ord. Aaa um teste da
conexo para ver se est2 tudo oS e con%rme a operao.
O 0ue foi demonstrado anteriormente , a conexo com o banco de dados'
depois desse passo , necess2rio informar ao Aoreac( *oop /ontainer o 0ue ele
vai percorrer e 0ue tipo de dado ele dever2 ler. Em Enumerate' cli0ue no boto
#ro1se e expanda o nome do computador O selecione Databases O selecione
Importa O selecione )ables. Em Enumerator tPpe selecione names' con%rme
todas as opera&es at, c(egar novamente em Aoreac( *oop Editor' con%rme a
operao conforme exemplo da Figura .
Figura . /on%gurando as propriedades de Separa Itens.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
/ontinuando com a con%gurao' R direita da 5anela' selecione Gariable
mappings' R es0uerda selecione a vari2vel Gar)ab no item Gariable' assim o
Separa Itens estar2 con%gurado. Ele' desta vez' vai ler todas as tabelas do
banco Importa trazendo o nome de cada uma dentro da vari2vel Gar)ab como 52
dito. Dentro da aba /onnection $anager renomeie o nome da /onexo de Y.NY
para Y.N.ImportaAoreac(Y !sem aspas" para uma mel(or identi%cao.
Neste momento , necess2rio inserir um Script )asS e dois Data Alo1 )asS para
dentro do Aoreac( loop /ontainer como na Figura !.
Figura !. /omponentes Separa Itens.
As setas verdes 0ue ligam os itens se c(amam constraints' 0uando verdes
indicam 0ue elas esto seguindo o Quxo' mas podem ser con%guradas para
passar apenas 0uem estiver dentro de uma determinada condio. Ento ser2
constru.do um Quxo 0ue ir2 separar os dados de acordo com o nome das
pro%ss&es. Isso , necess2rio por0ue em determinadas pro%ss&es existe a nota
de prova pr2tica e em outras no. Esse tipo de diferena nos dados inQuencia na
forma em 0ue as notas sero separadas' por isso foi feita essa manobra para
separar as pro%ss&es.
/li0ue duas vezes sobre a seta verde da es0uerda e ento ser2 aberta a
+recedence /onstraint Editor. Em Evaluate Operation dever2 ser selecionado
Expression e dever2 ser colocada uma expresso !incluindo as aspas". /on%rme
a operao e utilize o cdigo a seguir 0ue , demonstrado na Figura ".
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
OHarTa# X= GMUSICO_D0G YY OHarTa# X= Gta#_tratadaG YY REI*ACE
(OHarTa#,GTECNICO-DE-TECNO*OGIAG,GTECNO*OGIAG8 X= GTECNICOG
Figura ". /on%gura /onstraint para virar uma Expression.
+ara a seta da direita' faa o mesmo procedimento considerando a seguinte
expresso em ExpressionM
OHarTa# == GMUSICO_D0G ZZ(0"dstr"9(OHarTa#,GTECNICOG,28T
3YY0"dstr"9(OHarTa#,GTECNO*OGIAG,28[28
Aps essa operao' poder2 ser observado 0ue as setas iro %car com a cor
azul' indicando 0ue a propriedade da /onstraint mudou. A partir desse ponto ela
est2 seguindo a condio da Expression !0uer dizer 0ue o Quxo segue apenas se
a condio for verdadeira".
A %m de facilitar a identi%cao dos componentes , importante renomear os
mesmos. O nome no vai inQuenciar no processamento' mas facilita a r2pida
visualizao dos componentes do pro5eto. +ara o Script /omponent colo0ue o
nome @sa as /onstraints para separar os cargos' o Data Alo1 )asS da es0uerda
deve ser renomeado para Outros e o Data Alo1 )asS da direita com o nome
$4sico e ),cnicos.
A partir desse ponto' o foco ser2 em torno dos dois Data Alo1 )asS renomeados
anteriormente para Outros e para $4sico e ),cnicos. Os mesmos sero iguais
em v2rios casos' mas em determinados momentos (aver2 algumas diferenas.
Isso 0uer dizer 0ue 0uando a con%gurao a ser adotada no %zer diferena' os
dois componentes tero o mesmo procedimento' 0uando (ouver diferena tero
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
procedimentos ligeiramente diferentes' isso ser2 informado durante o
prosseguimento do artigo.
Entre em cada Data Alo1 )asS e adicione na seguinte ordem' ligando os
componentes' ADO Net Source' Script /omponent !Opo )ransformation"'
Derived /olumn e ADO Net Destination. Os mesmos devero %car conforme
a Figura *.
Figura *. /omponentes a serem utilizados no Data Alo1 )asS de Outros.
O componente Data Alo1 )asS , 0uem vai permitir a leitura dos dados contidos
nas tabelas criadas a partir dos ar0uivos no formato +DA. /li0ue com o boto
direito sobre a 2rea de trabal(o do mesmo e acesse o menu +roperties' localize
a opo Expression e cli0ue na mesma. Ser2 exibido um boto' cli0ue no
mesmo' ser2 exibida ento uma nova 5anela do +ropertP Expression Editor. Em
+ropertP localize [ADO NE) Source\.[S0l/ommand\ e cli0ue no boto R direita'
ser2 aberto o Expression #uilder. Na 2rea de Expression' cole a sintaxe
!incluindo as aspas" apresentada na Listagem 2.
Listagem 2. Select dos dados dos candidatos e limpando dados
desnecess2rios.
GSE*ECT TU/CO*UNA )ROM (sele%t CO*UNA 0rom d#o/-GGS
OFUser,,HarTa#JSG-G =(ere %olu"a s "ot "ull a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +-\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +UNIH\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe
+COMISS\+ a"d *TRIM(RTRIM(%olu"a88 "ot lKe +CONC\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +RESU*\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +CARG\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +I2\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +I:\+ a"d
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
*TRIM(RTRIM(%olu"a88 "ot lKe +C*AS\+ a"d
*TRIM(RTRIM(%olu"a88 "ot lKe +I5\+8TUG
+ara 0ue a expresso possa ser validada' , importante clicar em Evalute
Expression' depois con%rmar todas as opera&es feitas at, c(egar R 5anela de
+roperties. *ocalize a opo DelaP Galidation e altere para )rue' isso permite
retardar a validao do componente e no apresenta erro durante a execuo.
Depois de todos os passos efetuados' renomeie o ADO Net Source para *U
tabelas importadas' assim tem3se a origem dos dados con%gurada' ao inv,s de
ter uma expresso %xa de SH* para trazer os dados dentro do ADO Net Source.
Est2 con%gurado dessa forma pelo seguinte motivoM como existem v2rias
tabelas 0ue contUm os dados das v2rias pro%ss&es 0ue ainda se repetem para
as diferentes cidades' em um procedimento normal as consultas teriam 0ue ser
executadas uma a uma e alteradas manualmente' mas 0uando os dados das
tabelas so passados dinamicamente' esse processo , autom2tico' o SSIS faz
todo o servio.
Dentro do ADO Net Source Editor' , necess2rio criar uma nova conexo com o
banco de dados' cli0ue no boto Ne1' na nova 5anela 0ue ir2 aparecer' cli0ue no
boto Ne1 novamente' de%na o Server name da m20uina 0ue vai conter o
pro5eto. Em nosso caso temos o servidor local do SH* Server 7??= I7' ento
bastou colocar um Y.NY !sem aspas" para 0ue o programa identi%casse o servidor
da m20uina. Se necess2rio' de%na o usu2rio e sen(a' no pro5eto exemplo foi
criado com o Kindo1s Aut(entication.
+or 4ltimo' v2 at, Select or Enter Database Name e selecione o banco de dados'
neste caso' o banco de dados Importa. +ara testar a conexo pode3se pressionar
o boto )est /onnection' con%rme todas as op&es selecionadas ou alteradas
at, o momento e em Data Acess $ode selecionar SH* /ommand e insira o
cdigo da Listagem . /aso aparea algum script' o mesmo deve ser apagado
e substitu.do pelo script da Listagem . Esse script tem a %nalidade de trazer
os dados dos participantes do concurso ignorando alguns dados 0ue no so
necess2rios no pro5eto.
Listagem . Select em uma tabela de pro%ss&es.
SE*ECT TU/CO*UNA )ROM
(sele%t CO*UNA 0rom d#o/ADMINISTRADOR_D0
=(ere %olu"a s "ot "ull
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +-\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +UNIH\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +COMISS\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +CONC\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +RESU*\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +CARG\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +I2\+
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
9?
96
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +I:\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +C*AS\+
a"d *TRIM(RTRIM(%olu"a88 "ot lKe +I5\+8TU
O processo deve ser din-mico' mas a consulta acima , est2tica' mas isso ,
apenas para 0ue o componente no apresente erro. +rimeiramente vai ser
executado o script criado para ser din-mico' ele ser2 priorit2rio em relao a
esse' os dois fazem a mesma coisa' a diferena est2 no nome da tabela 0ue ir2
mudar a cada interao.
T prov2vel 0ue a conexo na aba /onnection $anager v2 %car com o nome de
Importa6. $odi%0ue ela para ImportaADO para mel(or identi%cao. O primeiro
componente do Data Alo1 )asS est2 con%gurado' lembrando 0ue todos os
procedimentos feitos neste Data Alo1 )asS devem ser realizados no segundo
Data Alo1 )asS' identi%cado como $4sico e ),cnico. /aso aparea mais uma
conexo com o nome Importa6' a mesma pode ser removida e poder2 ser
utilizada apenas a Importa ADO.
+ara o Script /omponent' teremos um pe0ueno cdigo a ser inserido para pegar
o nome do cargo de cada tabela. A forma 0ue ele trabal(a , similar ao Script
)asS' por,m ele funciona dentro do Data Alo1 e o Script )asS no /ontrol Alo1.
Acesse o componente' em Input /olumns selecione o campo de nome coluna'
em inputs and outputs' cli0ue em Output ?' depois em Output /olumns' em
seguida cli0ue no boto Add /olumn' dU o nome de cargo para o campo' de%na
seu Data)Ppe como string e seu leng(t como :??. Ainda no Script /omponent'
na opo script' em IeadKriteGariables selecione a vari2vel Gar)ab' depois
cli0ue no boto Edit Script e dentro na nova 5anela 0ue ir2 abrir' dever2 ser
inserido o cdigo da Listagem substituindo o trec(o de cdigo a seguirM
NU
Add ;our %ode (ere
UN
O cdigo contido na Listagem ! tem a %nalidade de armazenar os dados
contidos na vari2vel Gar)ab dentro do campo cargo' campo esse 0ue foi criado
para ser uma sa.da de dados no componente 0ue ir2 executar essa operao.
Listagem !. /digo para %ltrar o tipo de cargo.
Hara#leDspe"ser .ara#leDspe"ser =
(Hara#leDspe"ser8t(s/Hara#leDspe"ser<
.ara#leDspe"ser/*o%K)or6rte(GUser,,HarTa#G8<
IDTSHara#les233 .ars<
.ara#leDspe"ser/GetHara#les(out .ars8<
Ro=/%ar9o = .arsFGUser,,HarTa#GJ/Halue/ToStr"9(8<
.ars/U"lo%K(8<
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
87
88
89
8:
8;
8<
8=
8>
+ara testar o cdigo' pressione as teclas /trlWS(iftW#. /aso este5a tudo certo'
fec(e o Edit Script e con%rme todas as opera&es. Este procedimento ser2
idUntico no componente Script /omponent do Data Alo1 )asS de $4sico e
),cnico' mude o nome do Script /omponent para /aptura o /argo da )abela.
Dando prosseguimento ao processo' ser2 feita a separao dos dados em cada
Derived /olumn. O primeiro dever2 %car conforme a (a0ela 1. O 0ue , feito na
mesma , pegar o campo coluna 0ue tem dentro das tabelas migradas
inicialmente e comear a separar os dados' alguns itens podem ser separados
52 nesse primeiro Derived /olumn e os outros itens sero nos prximos
componentes.
10ser%ao2 um detal(e importante , a de%nio de espaos 0ue sero
utilizados como dados dentro das express&es 0ue sero criadas. Ento' 0uando
(ouver ^um espaoO' 0uer dizer 0ue tem a tecla barra de espao pressionada
uma vez na0uele ponto. Se (ouver ^dois espaosO' signi%ca 0ue a tecla barra
de espao foi pressionada duas vezes na0uele ponto e assim por diante. Se o
nome ^um_dois_trUs espaosO for mantido' provocar2 erros durante a execuo
do pacote.
(a0ela 1. @tilizando o Derived /olumn para separar os dados de /lassi%cao'
tratamento' cargo' cidade e prova pr2tica.
$esmo 0ue aparentemente as express&es da (a0ela 1 paream idUnticas
0uando copiadas para o componente Derived /olumn' pode acontecer algum
erro. Isso ocorre devido ao fato de 0ue o nome dos campos 0ue esto sendo
tratados %cam diferentes do 0ue , passado na tabela' ento , aconsel(2vel
substitu.3los pela forma idUntica 0ue est2 no pro5eto considerando mai4sculas e
min4sculas e colc(etes' por exemplo' de /O*@NA para [coluna\. O procedimento
vai ser o mesmo para o Data Alo1 )asS de $4sico e ),cnicos.
O segundo Derived /olumn 0ue est2 identi%cado como Derived /olumn 6' usar2
os dados criados no primeiro Derived /olumn referentes R lin(a tratamento.
Neste ponto o nome ser2 separado do restante da cadeia de caracteres e %car2
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
como na (a0ela 2. O procedimento dever2 ser adotado para o Data Alo1 )asS
de $4sico e ),cnicos.
(a0ela 2. @tilizando o Derived /olumn para separar o nome do restante dos
dados.
O terceiro Derived /olumn 0ue est2 identi%cado como Derived /olumn 7 vai
trabal(ar com os dados da lin(a Iesto' as notas sero separadas de data e
cdigo. Este %car2 como na (a0ela . O procedimento ser2 adotado para o
Data Alo1 )asS de $4sico e ),cnicos.
(a0ela . @tilizando o Derived /olumn para separar os resultados de provas de
data e cdigo.
/omo os nomes usados para identi%car as provas 0ue foram realizadas so mais
extensos' no pro5eto foi adotado um padro para abrevi23los' tornando mais
f2cil a manipulao das vari2veis 0ue cont,m os dados conforme a (a0ela !.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
(a0ela !. Abreviatura dos nomes das provas aplicadas no concurso e
observao sobre su%xo adicionado.
No 0uarto Derived /olumn 0ue est2 identi%cado como Derived /olumn 8' o
tratamento vai se diferenciar por conta da prova pr2tica. Isso implica em
separar os dados em pontos diferentes' para o Data Alo1 )asS de Outros %car2
como na (a0ela " e para o Data Alo1 )asS de $4sico e ),cnicos como
na (a0ela *.
`2 pe0uenas diferenas entre as (a0elas " e *. )ratar isso em apenas um
4nico lugar %caria mais complicado para o entendimento' pois da forma 0ue
est2 52 existe um n.vel de detal(amento das express&es' por isso foram
separados.
(a0ela ". )ratamento para separar os resultados das provas contidos na
vari2vel notas sem prova pr2tica a +arte 6.
(a0ela *. )ratamento para separar os resultados das provas contidos na
vari2vel notas com prova pr2tica a +arte 7.
No 0uinto Derived /olumn 0ue est2 identi%cado como Derived /olumn 9' ser2
tratado o campo correspondente a data e cdigo. At, este ponto do pro5eto seus
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
valores estavam em uma 4nica vari2vel' 0uer dizer mesclados' dessa forma %ca
invi2vel trabal(ar com estes dados. Ento os mesmos sero separados em
campos distintos um do outro conforme a (a0ela +. O procedimento dever2 ser
adotado para o Derived /olumn 9 do Data Alo1 )asS de $4sico e ),cnicos' pois
a t,cnica utilizada ser2 a mesma.
(a0ela +. @tilizando o Derived /olumn para separar a data de nascimento do
cdigo de inscrio.
]s vezes' mesmo o tipo de vari2vel string pode diferenciar em mais de um
modelo' ento , necess2rio forar os dados a serem de um determinado padro
de string. No sexto Derived /olumn 0ue est2 identi%cado como Derived /olumn
:' os dados so forados a serem do tipo dtDstr' 0ue , uma das padroniza&es
para string existentes no SSIS. +ara isso siga o procedimento conforme a(a0ela
,.
O procedimento descrito ser2 adotado para o Derived /olumn : do Data Alo1
)asS de $4sico e ),cnico' pois a forma de tratamento , a mesma.
(a0ela ,. +adronizao dos dados tratados para o tipo t_str a +arte 6!
Da mesma forma 0ue foi padronizado o tipo de string para os dados de
classi%cao' nome' cargo e cidade' o procedimento ser2 adotado para os dados
de total' l.ngua portuguesa' racioc.nio lgico 0uantitativo' legislao'
con(ecimento espec.%co' cdigo e prova pr2tica. Assim' no s,timo Derived
/olumn 0ue est2 identi%cado como Derived /olumn ;' os dados continuam a
ser forados para o tipo dtDstr. @m detal(e a0ui , o seguinte' para o Derived
/olumn ; do Data Alo1 )asS de Outros' no pode ter a lin(a de +raticaDstr' essa
lin(a deve estar somente no Derived /olumn ; do Data Alo1 )asS de $4sico e
),cnico' conforme ilustrado na (a0ela -.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
(a0ela -. +adronizao dos dados tratados para o tipo t_str a +arte 7!
No prximo componente' identi%cado como ADO Net Destination' ser2 feito todo
o mapeamento das vari2veis criadas diretamente para a tabela tabDtratada.
Entre no componente e dentro do ADO Net Destination Editor selecione
/onnection $anager e selecione a conexo com o banco de dados. Em @se a
)able or Gie1 selecione a tabela tabDtratada. +rovavelmente o prprio
componente vai fazer alguns mapeamentos' mas o ideal , ligar vari2vel por
vari2vel a cada elemento da tabela na opo $appings. *embre3se 0ue as
de%nitivas so as 0ue foram convertidas em string nos 4ltimos Derived /olumns
conforme exemplo da Figura +.
6
7
8
9
:
;
<
=
>
6?
66
Figura +. $apeamento do ADO Net Destination.
Essa mesma con%gurao deve ser feita para o ADO Net Destination do Data
Alo1 )asS de $4sico e ),cnico. A diferena vai ser para o campo +IDpratica 0ue
vai receber praticaDstr e para o Data Alo1 )asS de Outros 0ue vai receber
pr2tica como demonstrado na Figura +.
O prximo passo , adicionar uma nova vari2vel no /ontrol Alo1. A mesma
dever2 ser do tipo string e deve se c(amar GarDel)b. Ela ser2 respons2vel por
armazenar o nome das tabelas 0ue sero removidas' %caro somente as tabelas
com os dados dos candidatos. Depois de todos os procedimentos realizados' os
dados estaro separados uns dos outros para a prxima fase do pro5eto.
Aps a criao da vari2vel GarDel)b' deve3se adicionar mais um Aoreac( *oop
/ontainer e fazer a con%gurao do mesmo para 0ue ele possa ler o nome de
todas as tabelas dentro do banco Importa. +ara isso' renomeie o Aoreac( *oop
/ontainer para CDropa tabelas desnecess2riasE' acesse o Aoreac( *oop Editor e
selecione /ollection R direita da 5anela aberta. Em seguida' localize Enumerator
e selecione Aoreac( S$O Enumerator.
Em /onnection $anager dever2 ser selecionada a conexo atual do banco'
provavelmente vai aparecer a conexo ImportaADO. /aso contr2rio dever2 ser
criada uma nova conexo com o banco de dados. Selecione ne1 /onnection...'
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
localize o nome do seu servidor' provavelmente funcione colocando apenas Y.NY
!sem aspas"' se o seu servidor for o principal da m20uina' se no colo0ue o
nome correto. Se necess2rio' colo0ue o @ser name e +ass1ord' caso ten(a
sen(a no servidor' caso contr2rio o Kindo1s Aut(entication deve atender. Aaa
um teste da conexo para ver se est2 tudo oS e con%rme a operao feita
anteriormente. Em Enumerate' cli0ue em #ro1se e expanda o nome do
computador O acesse Databases O acesse Importa O acesse )ables e em
Enumerator tPpe selecione names.
/on%rme todas as opera&es at, c(egar novamente em Aoreac( *oop Editor' R
direita da 5anela' selecione Gariable mappings' R es0uerda selecione a vari2vel
GarDel)b no item Gariable e con%rme a operao. +ara dentro do Aoreac( *oop
/ontainer' deve ser adicionado um novo Script )asS e um novo Execute SH*
tasS' interligados nessa mesma se0uUncia' a /onstraint 0ue sai do Script )asS
vai servir para %ltrar as tabelas 0ue sero removidas do banco de dados
Importa' restando apenas a tabDtratada.
Na /onstraint 0ue faz a ligao entre os componentes' acessa suas
propriedades e faa a seguinte con%guraoM em Evaluation Expression dever2
%car marcado como Expression' no item abaixo com o mesmo nome deve ter a
seguinte expressoM %ndstring!ZGarDel)b'YtabDtratadaY'6"^6
+ara veri%car se est2 tudo correto' dever2 ser efetuado um cli0ue no boto de
)est e estando tudo oS' %nalize con%rmando as opera&es. No Execute SH* )asS'
dentro da opo Feneral' con%gure a conexo com o banco de dados Importa.
Em Expressions selecione S0lStatementSource e em Expression #uilder colo0ue
a seguinte expresso !incluindo as aspas"M Ydrop table [YWZ[@serMMGarDel)b\
WY\Y.
+ara validar a expresso' dever2 ser efetuado um cli0ue em Evaluate
Expression e se estiver tudo correto' con%rme a operao e mar0ue a opo
DelaP Galidation para )rue nas propriedades do componente. Aps todos estes
procedimentos' a aparUncia do pacote ser2 semel(ante R da Figura ,. Aeito
isso' a segunda fase est2 pronta' os dados foram separados e esto em uma
2rea de Stage 0ue , a )abDtratada.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79
7:
7;
7<
7=
7>
8?
86
Figura ,. +acote )ransform completo.
A seguir temos uma das tabelas sem tratamento de dados conforme a Figura
- e depois uma com tratamento de dados conforme a Figura 1.. O 0ue foi
obtido com todos esses tratamentos 0ue inclu.ram %ltros' remoo de dados
no necess2rios' separao de dados e padronizao de tipos de dados' foi uma
tabela no normalizada contendo separadamente os dados dos participantes do
concurso. Ento se em um primeiro momento tin(a3se apenas um amontoado
de dados en%leirados 0ue no possibilitavam fazer uma an2lise ou simples
relatrios sobre os participantes do concurso' depois de todo o tratamento ,
poss.vel se fazer consultas e relatrios usando diversos %ltros sobre os dados.
Entretanto' o mais importante , 0ue a partir da tabDtratada um banco de dados
dimensional poder2 ser alimentado com estes dados.
6
7
8
9
:
;
<
=
>
6?
66
67
68
Figura -. )abela no tratada de Administrador.
Figura 1.. )abela tratada com todos os dados.
/oncluso
Esse segundo artigo teve por ob5etivo demonstrar como pode ser feito o
tratamento de dados atrav,s de uma base de dados armazenada no SH* Server.
O mesmo traz os diferentes aspectos 0ue podem ser abordados em um
tratamento de dados em um processo de E)*.
6
7
8
9
:
;
<
=
>
6?
Aoi desenvolvida uma soluo para automatizar o tratamento de dados nas
tabelas. Aoram utilizados tamb,m recursos de manipulao de ar0uivos atrav,s
de scripts na linguagem /L' mas 0ue poderiam ser utilizados tamb,m na
linguagem vb.net.
As t,cnicas de automatizao da transformao de dados aprendidas podem ser
utilizadas em diversos pro5etos e as mesmas podem ser customizadas conforme
a necessidade e demanda do cliente. A grande di%culdade deste artigo , o n.vel
de detal(amento das express&es para tratar os dados' ento cada funo
utilizada' se poss.vel' 52 deve ser con(ecida antecipadamente.
Existem in4meros tipos de combina&es 0ue podem ser feitas com os comandos
e componentes do SSIS' talvez at, outras formas de tratamento 0ue sigam um
racioc.nio diferente do descrito' pois a ferramenta SSIS permite tal grau de
personalizao do Quxo de tarefas e processos a serem executados.
No prximo artigo desta s,rie ser2 feita a identi%cao do sexo dos candidatos
fazendo uma an2lise do nome de cada um. Neste ponto o 0ue ser2 veri%cado
sero os padr&es 0ue podem existir para nomes masculinos e femininos' no
ser2 uma medida 6??b e%caz' mas sim uma opo a mais para analisar os
dados' pois este tipo de classi%cao no veio nos resultados do concurso. +or
%m' os dados sero carregados em um modelo de banco de dados dimensional
0ue ser2 criado baseado na tabela tabDtratada. En%m' no prximo artigo
teremos a continuao do processo de transformao e o fec(amento com a
carga dos dados em um banco dimensional do tipo Sno1 AlaSe na 4ltima fase do
processo de E)*.
6
7
8
9
:
;
<
=
>
6?
66
67
68
69
6:
6;
6<
6=
6>
7?
76
77
78
79

Вам также может понравиться