Olá pessoal, neste post vamos rever os conceitos que aprendemos nos posts anteriores sobre control flow e data flow task além do conceito de packages, onde vamos criar um pequeno fluxo.

Este será um conteúdo mais prático, então, mãos à obra!

O primeiro passo será criar um banco de dados para ser o destino dos dados que vamos extrair de outras fontes. Para isso, basta clicar com botão direito na aba “database” e “new database” no SQL Server, atribuir um nome e criar seu banco. Com o banco criado, vamos para a ferramenta de ETL.

Neste post vamos ver as seguintes tasks: Sort, Merge Join e Data Conversion.

O que cada uma faz?

  1. Merge Join – são duas funções em uma única task. Aqui a ferramenta faz um join entre as tabelas utilizando suas chaves primárias e de acordo com o tipo de join (left, full ou inner) une os resultados para a próxima task.
  1. Sort – é uma task que ordena as colunas de uma tabela que foi acessada pela conexão estabelecida. Sempre que for realizar uma task de join ou merge, deve-se utilizar esta antes.
  1. Data conversion – é utilizada para converter os dados de diferentes tipos para o formato que o SSIS trabalha, geralmente para texto é unicode(nvarchar, nchar, ntext) e para numéricos, INT.

Com essa pequena explicação, na sua tela principal no control flow, escolha a task chamada “data flow task” e clique duas vezes nela.

A princípio, seu data flow deve ter as seguintes tarefas.

Como no post anterior já mostrei como criamos as conexões com o banco utilizando a tarefa de OLE DB Source, deixo o link aqui, para o post não ficar muito extenso.

Conecte-se com o banco AdventureWorks pois vamos unir as tabelas produto e  produto subcategoria

Ao selecionar a tabela de produtos, na sua esquerda, clique na aba ‘column’ e selecione as seguintes colunas, deixando nossa primeira fonte com as seguintes configurações:

  • External Column é a coluna de origem, lá do banco utilizado como fonte.
  • Output Column é como essa coluna passará a ser tratada dentro do processo de ETL. Se for de desejo, pode mudar o nome das colunas no output column. 

O mesmo procedimento vamos fazer para a tabela ProductSubCategory que deverá ficar desta forma.

Renomeie a coluna “Name” da tabela productsubcategory para “ProductSubCategoryName”.

Agora que temos as duas tabelas como fonte, vamos ordenar nas tarefas de Sort.

O primeiro ordenamento, feito para a tabela produto, deve ter como o primeiro a coluna ProductSubCategoryID, pois esta será utilizada no Merge Join. 

E para a tabela ProductSubCategory, o mesmo ordenamento.

Agora, ligue as duas tarefas de Sort na tarefa de Merge Join. Ligue a tarefa de SortProduct na tarefa de Merge Join e faça o mesmo com a outra. Escolha a tarefa SortProduct como Left Input, deste modo:

Após selecionar, ligue a outra task na tarefa.

Ao abrir o Merge Join, irá se deparar com esta tela onde podemos escolher as colunas e o tipo de join.

Irei escolher o inner join e como dito, já que essa tarefa une as duas ‘tabelas’ em uma única para armazenar no banco, selecione todas do lado esquerdo e a coluna ProductSubCategoryName e  ProductID no lado direito.

Abaixo, o resultado final.

Se não gostar da ordem das colunas, basta adicionar mais uma task de Sort e ligar a task de Merge Join a ela. 

Para o próximo, vamos adicionar a tarefa de conversão para os tipos de dados antes de inserir no banco de destino.

Sublinhado em preto está o formato INT para valores numéricos e em vermelho o formato unicode, nvarchar para textos.

Como dito, o próprio SSIS assume os formatos padrões dele. Se quiser alterar, basta escolher dentre as opções abaixando a seta.

NOTA: o SSIS é bem sensível quanto ao formato dos dados o que causa bastante problema na hora do mapping e do armazenamento. Então, nesta etapa, tenha bastante atenção para não acusar erro. 

Não vamos alterar o tamanho dos dados em Lenght, deixe neste padrão que é o reconhecido da fonte do banco de dados. 

Feito isso, adicione a task OLE DB Destination e e ligue a task de conversão a ela.

Abra a task e crie uma conexão com o banco que foi criado para este exemplo, ao fazer isso, clique em New para criar uma tabela para este banco.

Apague estas colunas que são oriundas da tarefa de conversão, apague a vírgula pós coluna ProductCategoryID e feche o parênteses.

Renomeie esta tabela se desejar e clique em  OK. Depois, selecione esta tabela como destino.

Depois de criado a tabela, clique em Mapping  para mapear as colunas de origem e destino dos dados. 

Esta tarefa é muito importante e deve ser feita com cuidado para não inserir dados da coluna A em B!!!

Veja que todas as colunas de INPUT estão com o nome copy. Isso é oriundo da tarefa anterior de conversão, que cria uma cópia de cada coluna com seus dados convertidos para o novo formato.

Ao realizar o mapeamento correto, clique em OK. 

Ao final, seu projeto deve ficar desta forma.

Quando concluir, clique em start e veja o processo acontecer. Após, realize um select na sua tabela do banco criado.

Como podemos ver, nosso pequeno ETL foi executado com sucesso!! repare que até a operação de join foi realizada eliminando as linhas que não possuem match.

E na próxima imagem, o select executado no próprio banco retornando os dados inseridos.

Como podemos ver, o processo de ETL em si não é algo extremamente complexo mas que requer bastante atenção!  Por exemplo: Não alterei a ordem das colunas ProductID com SubCategoryID hahaha 

Embora este tenha sido um processo mais simples, poderíamos criar outras tasks para tratamento e conformidade dos dados criando sim, um fluxo de processo mais robusto!

Em um próximo post, pretendo mostrar como podemos importar dados de arquivos Excel, também via processo de ETL!!

Espero que tenham gostado, saúde!!