Data Transformation Services (DTS)
por Anderson Ferreira Souza
O Sql Server possui um recurso extremamente poderoso que é muito pouco utilizado pelos
administradores e programadores. Com certeza, sendo melhor explorado, poderá facilitar muito
nosso dia-a-dia, facilitando e melhorando as tarefas de importação e tratamento de dados.
O Data Transformation Services (DTS), com o próprio nome diz, é uma ferramenta para a
‘transformação’ de dados, que dizer, utilizando esta ferramenta, conseguimos importar e exportar
dados de e para praticamente qualquer tipo de formato de dados mais conhecido, sendo de txt para
sql server, de access para excel, de excel para access, de excel para sql server, de sql server para
txt... além de nos permitir o tratamento desses dados durante a importação, e várias outras tarefas
que podem ser programadas para serem executadas seguindo um fluxo pré-determinado pelo criador
do pacote.
Como a melhor forma de conhecermos uma nova ferramenta é colocando a mão na massa, vamos
construir um pequeno exemplo que vai importar dados de um arquivo texto chamado exemplo.txt,
para uma tabela no banco de exemplo NorthWind do Sql Server.
Para isto, vamos utilizar dois objetos Execute SQL Task
, um objeto DATA, tipo Text File
como origem de dados, já que vamos importar dados de um arquivo texto, e mais um objeto
Microsoft OLE DB Provider for SQL Server , que será nosso destino para os dados importados.
O que vamos fazer é tentar importar esses dados e, caso a importação seja realizada com sucesso,
vamos excluir o arquivo exemplo.txt, caso ocorra algum erro, vamos primeiro renomear o arquivo
exemplo.txt para exemplo_ddmmyyyy.txt e só depois excluí-lo.
No final, nosso exemplo ficará como mostrado na figura 1.
Figura 1
Antes de continuar, precisamos primeiro entender as opções de Workflow de um projeto DTS.
Selecionando o item workflow no menu, você poderá perceber que existem quatro opções de fluxo
que podemos utilizar em nosso projeto:
• O primeiro, Add Transform, representado pela seta cinza, é utilizado para a importação dos
dados propriamente dita ou, como o próprio termo diz, transformar os dados, de um formato
de armazenamento para outro.
•
•
•
Logo após temos o On Completion, representado pela seta azul, que aponta o caminho do
fluxo de tarefas que serão executadas assim que a tarefa anterior for completada,
independente de ter ocorrido erro ou não.
On Success, representado pela seta verde, indica o próximo passo que deve ser executado
apenas se ocorrer sucesso na tarefa anterior.
E, por último, On Failure, representado pela seta vermelha, que indica o próximo passo que
deve ser executado apenas se ocorrer falha na tarefa anterior.
Assim, fica mais fácil entender o que está sendo feito em nosso exemplo. Você pode ver que
começamos tentando importar os dados utilizando como origem o objeto Text File e como destino o
MS Ole Db e, caso ocorra um erro, o fluxo segue para o objeto ‘Copia Arquivo’ e logo depois,
ocorrendo sucesso ou não, seguimos para ‘Exclui Arquivo’. Caso tenha ocorrido sucesso na
importação, vamos diretor para ‘Exclui Arquivo’.
Então vamos lá.
Em seu servidor Sql Server, expanda a opção Data Transformation Services e selecione Local
Packages. Selecione a opção New Package clicando com o botão direito do mouse (figura 2) e então
será aberta a área de desenho do novo pacote, como mostra a figura 3.
Figura 2
Figura 3
Você poderá ver que na paleta Task, existem objetos vários objetos bem interessantes que podemos
utilizar para implementar nosso pacote DTS, como por exemplo o Send Mail
, que pode ser
utilizado para se enviar um e-mail aos administradores, informando sobre a execução do pacote, por
exemplo. Outro objeto muito importante é o Execute SQL Task
, que utilizaremos em nosso
exemplo, que pode executar qualquer string SQL válida.
A paleta Data, exibe os objetos que podemos utilizar na transformação dos dados, como podem ver,
há um arsenal bem completo, de forma que podemos importar ou exportar dados de e para qualquer
um destes formatos exibidos. Sql Server para texto, texto para Sql Server, excel para access e vice
versa... é só utilizar a imaginação e ver quanta coisa pode ser feita por aqui!
Muito bem. Estando com a tela de projeto aberta, selecione o objeto Text File (source)
, que vai
apontar para nosso arquivo exemplo.txt.
Assim que você selecionar o botão, aparecerá a tela de configuração, como mostra a figura 4:
Figura 4
Informe o caminho e nome do arquivo que deseja utilizar como origem, no nosso caso, vou
selecionar um arquivo localizado em c:\, com o nome exemplo.txt. O conteúdo deste arquivo será
cinco linhas com os dados da compra de produtos, separado por ponto-vírgula, sendo o primeiro
campo o código do produto, o segundo a quantidade e o terceiro campo a data da compra. O
conteúdo deste arquivo está listado na figura 5:
Figura 5
Depois de informar o arquivo, selecione o botão Properties para configurarmos os parâmetros de
importação deste arquivo. Na próxima tela (figura 6), escolha a opção Delimited, já que estamos
utilizando um arquivo delimitado por ponto-vírgula. Selecione Avançar.
Figura 6
Agora, vamos selecionar o tipo de delimitador, no nosso caso, Semicolon (figura 7), e selecione
Concluir e depois OK.
Figura 7
Pronto, já definimos nossa origem de dados você pode ver que o objeto Text File foi colocado na
área de desenho, agora vamos definir o destino.
Selecione na paleta Data o objeto Microsoft OLE DB Provider for SQL Server
, e tela de
configuração irá aparecer (figura 8).
Figura 8
Nesta tela definiremos o servidor a ser utilizado, a forma de conexão e o banco de dados. Informe
estes dados de acordo com as configurações de seu servidor, no meu caso, vou utilizar o banco de
dados de exemplo Northwind. Selecione OK e você vai ver que foi acrescentado o objeto na área de
desenho, já definimos o destino, falta agora configurar apenas as regras para a importação dos
dados.
Selecione os dois objetos na área de desenho arrastando o mouse sobre eles, selecione Workflow no
menu e Add Transform, será criada uma seta ligando os objetos selecionados, dê dois cliques na
seta de transformação para podermos edita-la, irá aparecer uma tela como a da Figura 9.
Figura 9
Nesta tela (Figura 9), definimos a origem dos dados na aba Source. Como estamos importando de
um arquivo texto, temos apenas a opção Table name, que é o nome do arquivo. Se estivéssemos
importando dados de um arquivo Access, por exemplo, em Table name poderíamos selecionar o
nome da tabela que desejamos importar. Neste caso, também poderíamos alterar o rádio para SQL
query, um recurso bastante poderoso nesta tela, em que podemos utilizar uma string SQL para gerar
minha origem de dados. Assim, poderia, por exemplo, utilizar uma cláusula WHERE para filtrar os
dados, ou obter os registros em mais de uma tabela utilizando o JOIN entre as tabelas de um banco
de dados. Como podem ver, é um recurso bastante prático, que nos abre um grande leque de opções
na importação.
Na próxima aba (Destination – Figura 10), definimos as configurações do destino. Podemos aqui,
escolher uma tabela existente no banco, caso já existe, ou criar uma nova clicando no botão Create
New. Em nosso exemplo, utilizei esta opção para criar uma tabela nova com 3 campos como pode
ser visto na Figura 10.
Figura 10
Na aba Transformations (Figura 11), iremos determinar a referência entre os campos de origem e
destino, dizendo, em nosso exemplo que o primeiro campo do arquivo texto será importado para o
campo Codigo de nossa tabela no banco Northwind e assim por diante.
Figura 11
Na última aba (Advanced), temos as opções avançadas que não iremos alterar neste momento, mas
há recursos interessantes que podem ser configuradas aqui como, por exemplo, as opções que
determinam que a importação pule um número determinado de linhas no início e/ou final de nosso
arquivo.
Mas vamos em frente. Clique no botão OK e, com isto, nós já terminamos a parte da importação
dos dados, se executarmos nosso pacote agora, a importação já será executada como foi
determinado por nossa configuração, mas não iremos parar por aí, vamos incrementar um pouco
mais nosso exemplo e colocar as opções para manipular o arquivo texto de acordo com o resultado
da importação.
Clique na paleta Task em um componente Execute SQL Task
configuração (Figura 12).
, e irá aparecer a tela de
Figura 12
Preencha os campos como na figura e clique em OK. Em nosso exemplo, alterei a descrição para
‘Exclui Arquivo’ e acrescentei uma linha em SQL statement:
master..xp_cmdshell 'del c:\exemplo.txt', NO_OUTPUT
O que faz esta linha? Simplesmente chama a procedure xp_cmdshell para executar o comando ‘del
c:\exemplo.txt’ para excluir este arquivo do disco.
Agora falta definirmos que este comando seja executado logo após a importação, caso não tenha
ocorrido erro.
Selecione com o mouse os componentes Microsoft OLE DB Provider for SQL Server
e Execute
SQL Task
(agora renomeado para ‘Exclui Arquivo’) que você colocou na tela, clique em
Workflow no menu e logo depois em On Success. Você verá que foi criada outra seta entre estes
dois objetos, de cor verde, o que quer dizer que esta tarefa será executada apenas se a importação
ocorrer sem erros.
Agora, clique na paleta Task no componente Execute SQL Task
novamente para criarmos a
tarefa que será executada caso ocorra um erro e preencha de acordo com a figura 13.
Figura 13
Foi alterado o nome da tarefa para ‘Copia Arquivo’ e em SQL statement, temos o seguinte
comando:
declare @nom as char(80)
select @nom = 'copy c:\exemplo.txt c:\ExemploFail_'+convert(varchar, datepart(yyyy,
GetDate()))+convert(varchar,
datepart(mm,
GetDate()))+convert(varchar,
datepart(dd,
GetDate()))+convert(varchar,
datepart(hh,
GetDate()))+convert(varchar,
datepart(mi,
GetDate()))+convert(varchar, datepart(ss, GetDate()))+'.txt'
exec master..xp_cmdshell @nom, NO_OUTPUT
O que esta string faz é copiar o arquivo exemplo.txt para o mesmo local, mas alterando seu nome
para ExemploFail_yyyymmddhhmmss.txt, quer dizer, estamos arquivando este arquivo com a data
e hora em que ocorreu o erro de importação.
Para terminar precisamos informar que esta tarefa deve ser executada caso ocorra um erro, então
selecione com o mouse os componentes Microsoft OLE DB Provider for SQL Server
e Execute
SQL Task
(agora renomeado para ‘Copia Arquivo’), clique em Workflow no menu e logo
depois em On Failure. Você verá que foi criada outra seta entre estes dois objetos, de cor vermelha,
o que quer dizer que esta tarefa será executada apenas se houver erros na importação.
Finalmente, vamos informar ao sistema para executar a exclusão deste arquivo depois de tentar
renomeá-lo, tendo ocorrido erro ou sucesso nesta tarefa.
Selecione com o mouse os componentes Execute SQL Task
(renomeado para ‘Copia Arquivo’)
e o Execute SQL Task
(renomeado para ‘Exclui Arquivo’), clique em Workflow no menu e
logo depois em On Completion. Você verá que foi criada outra seta entre estes dois objetos, de cor
azul, o que quer dizer que esta tarefa será sempre executada.
Neste ponto, nosso projeto deve se parecer com a Figura 14.
Figura 14
Pronto, basta agora salvar o projeto e executar o pacote clicando em Execute
ferramentas.
na barra de
Faça alguns testes e verá que o pacote irá se comportar de forma diferente caso ocorra erro ou
sucesso na importação dos dados.
Por enquanto ficamos por aqui. Podemos ver que o recurso DTS do Sql Server é bastante poderoso,
nos dando uma incrível ferramenta de importação e tratamento de dados que pode resolver vários
problemas encontrados em nosso dia-a-dia, simplificando a automatização de tarefas onde antes
precisaríamos construir um sistema bem mais complexo. Isto sem contar tantas outras vantagens
que encontramos ao utilizar seus recursos.
Até a próxima...
Anderson Ferreira Souza é Bacharel em
Ciências da Computação, desenvolve projetos
em delphi e administrador/programador Sql
Server, atualmente é Analista de Sistemas do
Campus de Passos da Universidade do Estado
de Minas Gerais.
Pode ser contatado em [email protected]
Download

Vamos construir um pequeno exemplo que vai importar dados de