Dando continuidade ao post introdutório anterior, vamos falar sobre o data flow e sua importância, já que é aqui que ocorre o processo de ETL como um todo.

As tasks dentro do grupo de data flow são prioritárias quando falamos de processos robustos de ETL já que quase na totalidade, todas as transformações ocorrem aqui, sejam elas:

  • Joins de tabelas.
  • Splits.
  • Conversões de tipos de dados
  • Pivot e etc.

É neste grupo também que definimos o destino dos dados tratados na etapa de loading  do processo.

O interessante aqui que podemos definir diversos destinos para o mesmo trabalho criando até, indiretamente, uma certa redundância do que foi tratado.

Lembrando que o processo de transformação é um processo filho do control flow e que para isso, devemos criar uma task de data flow antes.

Reproduzindo a imagem do post anterior, cada tarefa de dados abaixo, pode conter uma etapa de transformação com fonte e destino onde uma pode chamar a outra para ser carregada em um repositório final.

Dentro deste grupo temos dois grupos que podemos utilizar para transformação de dados. Não irei explicar um a um o que eles fazem para não ficar muito grande, mas a medida que formos avançando, sempre antes de utilizar um recurso, irei explicar sobre.

Como podemos ver, temos uma grande leque de opções para tratar dados que é bem grande e ampla. Vale ressaltar também que é possível utilizar scripts de programação tanto em C# como em VB e mais, podemos acoplar um projeto de python ao nosso para uso de mais um recurso.

Fontes e destinos de dados

Como dito,  todo processo de ETL precisa de uma fonte, para buscar os dados e um destino para armazenar após o tratamento. 

No SSIS temos as fontes que são nativas, para os produtos da Microsoft e podemos adicionar alguns drivers para outras fontes e destinos que podem não estar disponíveis aqui, como por exemplo em algumas conexões para java.

Abaixo, os exemplos de fontes e destinos que o SSIS possui em seu repertório.

E na aba de favoritos, é possível configurar outras conexões como por exemplo DB2 e Teradata que não estão neste catálogo!

Exemplo básico de como criar uma conexão.

Clicando duas vezes em “Ole DB Source”  irá abrir a tela abaixo. 

Após clicar em new, basta colocar o nome do servidor, banco ou local que queira se conectar dependendo da conexão estabelecida e após selecionar em qual banco vai utilizar como fonte.

Quando terminar este processo acima, terá a opção de escolher o modo de acesso aos dados, se é por:

  • Tabela ou View
  • Comando SQL 
  • Ou alguma variável tanto para views e tabelas quanto para um comando SQL.

O interessante que a mesma conexão utilizada na fonte, automaticamente vai para o destino, mas nada o impede de mudar, bastando refazer os passos acima.

Também é possível criar uma tabela de destino quando for armazenar os dados, bastando apenas clicar em new, após estabelecer as conexões entre as duas tasks por meio da linha azul.

A tabela criada terá o nome de “[Ole db Destination]” com os mesmos campos e tipos de dados da tabela fonte.

Nota: a linha vermelha é utilizada para direcionar possíveis erros do processo de ETL.

IMPORTANTE

Por padrão, o SSIS trabalha com o formato unicode, isso significa que quando for carregar as transformações no final do processo no seu data warehouse, pode ser que seja necessário utilizar a task de conversão de dados.

Uma forma de evitar isso é criando colunas de texto no data warehouse já em formato unicode, mas se por algum motivo não for possível, faça a conversão.

Isso ocorre muito também quando a fonte de dados é proveniente de uma query, se for com base nesse cenário, utilize cast ou convert para facilitar o trabalho como um todo.

EXTRA

Como no post anterior eu acabei esquecendo de falar a respeito, irei adicionar neste post para não passar despercebido, que trata sobre restrição de precedência.

A restrição de precedência ocorre entre as tasks no control flow e definem como uma task se ‘relaciona’ com a outra.

Podemos estipular que uma determinada tarefa por exemplo irá ocorrer somente quando a outra falhar ou que para uma iniciar, basta a anterior ser concluída, com sucesso ou não.

As três regras para as tarefas são:

  • Sucesso
  • Falha 
  • Concluída

Na imagem abaixo, a tarefa C será executada se a tarefa B apresentar sucesso em sua execução e a tarefa E será executada independentemente se a tarefa C obtiver sucesso ou falha, basta ela ser concluída.

Agora, para a tarefa D ser executada, a C precisa falhar. Podemos forçar uma task a falhar alterando a propriedade dela inde em ‘properties’  e ‘expressions’, veja abaixo:

Após alterar a propriedade da task, veja abaixo o resultado.Todas foram executadas, inclusive a task D.

EXPRESSÕES LÓGICAS

Ainda sobre as restrições de precedências, temos como utilizar as expressões lógicas And e Or.

Por padrão, o SSIS assume que toda restrição é baseada no AND, isso quer dizer que todas as tasks devem ser verdadeiras, porém, é possível alterar esse padrão para Or, onde apenas uma obrigatoriamente precisa ser verdadeira.

Para alterar, basta clicar duas vezes nas setas entre as tarefas para abrir essa caixa de diálogo.

No exemplo abaixo, alterei a ligação entre as tarefas C e E para OR e mantive a execução da tarefa C como falha, repare que a tarefa E não será executada.

Veja que a mudança no formato das setas.

Se quiser, altere a tarefa C para “sucesso ou concluída” e verá que a tarefa E será finalizada com sucesso.

RESUMO

Essa foi uma visão geral sobre um fluxo de dados e sua lógica de operação, claro que para exemplo, nenhuma transformação ou carga foi executada. 

Aproveitei também para mostrar como um fluxo pode se relacionar e como podemos utilizar relações lógicas entre eles.

Mostrei o básico dos tipos de conexões e transformações e iremos ver cada uma delas a medida que formos avançando no conteúdo, para não ficar maçante!

Com isso, fecho a introdução sobre SSIS e para o próximo, vamos testar algumas transformações.

Espero que tenham gostado, saúde!!