Olá pessoal, tudo bem!!
Dando continuidade ao post anterior ainda tratando sobre a nossa tabela de produtos, vamos inserir o nome da categoria dos produtos na nossa tabela criada no fluxo de dados anterior.
Antes de iniciarmos, para importar dados via Excel talvez seja necessário a instalação deste drive no link a seguir. Baixe e instale este drive.
Se ainda assim não funcionar, será necessário a execução dos pacotes em 32bits e para isto será necessário realizar uma pequena alteração no modo de execução.
Para alterar para 32bits, selecione a solução ao qual seu projeto está anexado, clique com o botão direito e vá em propriedades. Em propriedades, vá nesta aba e deixe a configuração do mesmo jeito que a imagem abaixo.
Feito isso, vamos para nosso novo data flow.
Neste exemplo o que vamos fazer:
- Buscar na tabela ProductCategory a coluna ProductCategoryName
- Transformar no datatype padrão do SSIS
- Armazenar este resultado em um arquivo do Excel
- E Criar uma nova task importante esse arquivo com destino ao banco criado.
Para a extração do nome da categoria, vamos utilizar estas três tasks.
Como nosso processo já conhecido, aqui está nossa fonte de dados.
Após esse processo, ligue a task do OLE DB Source na tarefa de conversão de dados e após na tarefa Excel Destination.
Abra a tarefa do Excel e na conexão, clique em new para criar uma nova conexão de destino para o arquivo. Neste caso, não é bem uma conexão, o que vamos determinar aqui é a pasta que o arquivo irá ser armazenado.
Ao clicar em Browse ao abrir o diretório, atribua um nome ao arquivo, clique em OK e marque a caixa de diálogo que está marcada na imagem.
Ao marcar, estamos passando para o SSIS que a primeira linha deve ser o nome das colunas deste arquivo que será usado no mapping.
Após, voltaremos a nossa tela inicial da task de destino com nossa ‘conexão’ configurada. Agora, vamos criar a ‘tabela’ de destino para este arquivo.
Ao abrir a aba de opções, ele irá dizer que não possui tabela. Basta clicar em new e criar uma nova.
NOTA: geralmente o assistente atribui a tabela o nome que foi dado a task no início. Então, mais um motivo para nomear suas tarefas no processo de ETL.
Mapeie as colunas adequadamente como já vimos na aba de mapping e clique em ok.
Resultado final desta task abaixo.
Agora que temos extraído nossa categoria de produtos, podemos inserir na tabela do banco criado para este exemplo e para isso, vamos criar um novo control flow e puxar os dados deste arquivo do excel para a tabela do banco.
Veja as tarefas que vamos utilizar para este novo processo dentro do novo data flow!
Agora, vamos criar uma conexão com a fonte de dados do Excel buscando o arquivo que criamos no processo anterior.
Abra a task Excel Source e clique em new. E após vá até o diretório que o arquivo está armazenado e selecione.
Após clique em OK e escolha a ‘tabela’ que os dados foram escritos. Se clicar em preview é possível analisar o arquivo.
Depois de selecionar as colunas do task do excel é preciso realizar uma conversão antes de unir ao Merge Join. Isso ocorre porque quando o SSIS grava no formato excel, os data type são diferentes do que os data types importados do banco de dados.
Converta para estes formatos acima antes de ligar a tarefa de Sort. Ao final, não esqueça de ordenar por ProductCategoryID.
NOTA: para esta task vamos ter que utilizar as colunas de output da conversão. Ou seja, para o Sort e Join selecione as colunas “Copy of” que possuem os dados convertidos para o formato exato.
Na task de OLE DB Source, selecione a conexão com o banco que foi criado para este exemplo, a tabela e as colunas que este possui.
Ligue esta tarefa a task de Sort e ordene pela coluna ProductCategoryID
Na tarefa do Merge Join, certifique-se que as chaves estão corretas e selecione apenas a coluna ProductCategoryName. Como no exemplo abaixo:
Na última tarefa de Sort, ordene do jeito que preferir e crie uma conexão com a tarefa de conversão de dados, apenas para garantir que estão em conformidade com o padrão do SSIS para não ter erro.
Como podemos ver, está tudo dentro do padrão, pronto para inserção.
Agora, crie uma conexão da task de conversão com a task OLE DB Destination.
Para esta última etapa, aconselho a criar uma nova tabela como fizemos no post anterior, já que teremos uma nova coluna.
Nos próximos posts irei mostrar como poderíamos fazer para não ter este tipo de problema no ETL. Quem quiser arriscar, uma dica: SQL Task.
Não esqueça de mapear corretamente as colunas utilizando como input as colunas com nome “Copy”.
Ao final, temos nosso processo de ETL concluído com sucesso!
EXTRA
Vá ao seu banco de dados criado para este exemplo e execute o comando truncate table + nome da tabela.
Ao executar o truncate irá apagar todos os dados inseridos na tabela proveniente deste processo. Agora, vá na aba do control flow e crie uma conexão entre as três tasks como no exemplo abaixo:
Vá na última task e em TODAS as tasks de Sort marque a seguinte caixinha de diálogo.
Esta caixa é como se ‘aplicássemos’ um select distinct no processo de ETL excluindo dados repetidos. Em alguns casos, como este, é necessário.
Aqui por exemplo, o SSIS escreveu 1400 linhas!!! Quando só temos 295 produtos!
Veja abaixo o resultado final ao executarmos as três tasks de data flow no banco de dados!
Nesta query, não coloquei todas as colunas, apenas uma amostra para que o resultado ficasse visível!
Como podemos ver, mais um processo de ETL concluído onde inclusive criamos um fluxo de tasks com três data flows diferentes ocorrendo em sequência!
Poderíamos aplicar as restrições e as lógicas mas como é o segundo post sobre e ainda é básico, preferi deixar para posts mais avançados!
Espero que tenham gostado, saúde!