You are on page 1of 23

Ferramenta ETL – SQL Server Integration Services

Sobre o ETL
A sigla ETL vem de Extraction, Transformation and Loader que consiste na extração, Transformação e Carga de Dados geralmente de um ambiente Transacional para um ambiente Dimensional (Isso em um projeto de DW). Uma ferramenta de ETL deve ter funcionalidades que permitam a extração de dados de virtualmente todas as fontes de informação, carga em diversos destinos diferentes e ainda permitir realizar transformações para que o dado seja manipulado e armazenado de acordo com a necessidade. Além disso, performance, robustez, tolerância à falhas (restart e recovery), escalabilidade e facilidade são exigidos de uma ferramenta ETL, características que somente uma aplicação projetada para essa finalidade pode possuir, daí a necessidade de uma ferramenta de ETL.

Sobre a Ferramenta:
SQL Server Integration Services (SSIS) é uma das características mais poderosas do SQL Server 2005. É classificada como uma ferramenta de Business Intelligence e de uma maneira robusta carrega os dados e realiza tarefas de transformação em um fluxo de dados. O Business Intelligence Development Studio (BIDS) é a ferramenta principal que nós iremos utilizar, cuja base é a interface do Visual Studio 2005. Para iniciar o aplicativo clique em “SQL Server Business Intelligence Development Studio”:

Para criar um projeto novo clique em File  New  Project:

Para criar o projeto em questão (ETL) escolha “Integration Service Project”:

Preencha os campos adequadamente: Name: Digite o nome do seu projeto. Ex: Projeto Aula ETL Location: Use o botão “Browse” para escolher o diretório onde os arquivos do seu projeto serão gravados. Ex: C:\Aula BI Neste momento você acaba de criar um Projeto de construção ETL. A ferramenta já inicia com a criação de um Package. Packages (Pacotes) Principal elemento do SSIS. Um package é uma coleção de tarefas que é executada seguindo um fluxo de dados pré-estabelecido. Uma package é salva como um arquivo .DTSX. A idéia é que criemos um Package para cada tabela que precisamos carregar de dados. Pensando em um modelo dimensional de dados, iremos criar um package para cada tabela dimensão e para a tabela de fatos. Para que possamos acessar as tabelas da base de dados de origem e da base de dados de destino, precisamos criar uma conexão com os bancos de dados onde se encontram estas tabelas. Devemos criar uma conexão para cada banco de dados.

Select or enter a database name: Escolha o nome do banco de dados que você deseja conectar. Na faculdade estamos utilizando a própria autenticação do Windows.Connection Manager Para criar uma conexão com um Banco de Dados. Configurando “Connection Manager”: Server Name: Escolha ou digite o nome do servidor. Oracle. Log on to the Server: Escolha o modo de logar no servidor de dados do SQLServer. . DB2. clique com o botão direito na área “Connection Manager” e escolha “New OLE DB Connection”. No geral podem ser qualquer fonte de dados OLE-DB tal qual SQL Server.

clique em “New”. .Data Sources Data sources representam as conexões que poderão ser usadas para uma fonte de dados ou um destino. Caso a conexão não tenha sido criada ainda. vá para o “Solution Explorer” e clique com o botão direito em “Data Source” e depois clique em “New Data Source”. Irá aparecer a tela de Connection Manager já explicada anteriormente. Escolha a conexão na lista à esquerda e clique em Finish. Crie um Data source para cada conexão. Para incluir um Data Source.

Completeza: a tarefa é realizada após a tarefa anterior ser executada. mas falhou. Podemos comparar uma task com um método em uma linguagem de programação. nas ferramentas ETL trabalhamos por fluxo de dados através das tarefas especificadas. Alguns exemplos: Bulk Insert: Carrega dados em uma tabela usando o comando BULK INSERT SQL. Falha: a tarefa é realizada apenas se a tarefa anterior foi executada. Data Flow: Tarefa especializada em realizar transformações e carregar os dados transformados em uma tabela destino. Fluxo de tarefas Diferente de linguagens de programação estruturadas ou orientadas à objeto. É formada uma espécie de cadeia de tarefas. Execute SQL Task: Conecta a um banco de dados e executa um comando SQL. uma realizada após a outra seguindo as restrições abaixo indicadas: Sucesso: a tarefa é realizada apenas se a tarefa anterior foi executada com sucesso. FTP: permite receber ou enviar arquivos via FTP Send mail: Envia mensagens (e-mails) através de SMTP. Tasks(Tarefas) Uma tarefa pode ser descrita como uma unidade individual de trabalho. Ex: Se tarefa “Copy File” executou com sucesso  Executar tarefa “Data Flow Task” Se tarefa “Copy File” falhou  Executar tarefa “Send mail Task” .A criação de um processo ETL (cada package) deve começar com o fluxo de tarefas que é definido no painel “Control Flow” . Elas que proporcionam funcionalidade ao package. Independente se houve sucesso ou falha.

Caso não esteja aparecendo vá ao Menu horizontal e clique em View  Toolbox Escolha na Barra de ferramentas (Toolbox) a tarefa desejada. No painel “Data Flow” será criado o fluxo de componentes que serão responsáveis por realizar a Extração. . Você pode criar um fluxo de tarefas de acordo com a sua necessidade. apenas clique na tarefa e arraste para o painel “Control Flow”. Elementos da tarefa “Data Flow” A tarefa Data Flow é responsável pelo principal processo da ferramenta ETL. a “Data Flow Task”.Para incluir tarefas clique no botão “Toolbox” que aparece à esquerda da tela. uma tarefa deve sempre ser escolhida. as Transformações e a Carga (Load) na tabela destino. Para incluir tarefa “Data Flow Task”. Entretanto.

Você pode apenas clicar na aba “Data Flow” ou dar um duplo clique no componente “Data Flow Task”. Exemplo de um fluxo de componentes dentro de uma tarefa Data Flow: .Agora é preciso ir para o painel “Data Flow”.

Oracle. Entretanto agora irá aparecer um novo conjunto de componentes: Componentes de Origem (Source) A origem é o local onde as fontes de dados serão extraídas. Data Reader: é uma conexão ADO. Dimension Processing: Carrega e processa uma dimensão no Analysis Services. Origem geralmente irá apontar para o “Connection Manager” no SSIS. Para incluir um componente novamente clique no botão Toolbox. tais quais SQL Server.Para efetivamente criar um processo ETL. como o “Reporting Services” ou uma aplicação . carga incremental ou de atualização. Componentes de Destino (Destination) O destino é o local onde os dados serão carregados. Esta origem possibilita criar queries a partir dos dados da planilha. Flat File: conecta a um arquivo texto delimitado por algum caracter ou com tamanho de colunas pré-definido. Estes dados podem vir de uma Origem ou de uma Transformação.NET. XML: Busca dados de um documento XML. Existem seis fontes que podem ser usadas: OLE DB: conexão realizada com qualquer data source OLE DB.NET. Excel: Origem especializada em receber dados de planilhas Excel. . Access. Raw File: componente especializado em ler arquivos de formato produzido por “Raw File Destination”. etc. devemos incluir os vários componentes que necessitamos de acordo com a carga que devemos dar na tabela destino escolhida. Pode realizar uma carga full (carga completa). Os destinos disponíveis no SSIS são: DataReader: Permite que os dados sejam destinados à um processo externo.

total ou atualizações em uma partição Analysis Services. Access. É a partir das transformações que conseguiremos dar aos dados o formato desejado. Partition processing: Permite a realização de processamento incremental. Segue abaixo a lista de transformações existentes nesta ferramenta: Aggregate: Possibilita agregar dados que venham de uma origem ou de outras transformações. OLE DB: Grava os dados em tabelas de banco de dados com conexão OLE DB como SQL Server. Recordset: Grava dados em um conjunto de registros ADO. Raw file: Libera dos dados que podem ser usados em uma Origem Raw File. Audit: Fornece informações de auditoria. como qual package está sendo executado e por quem. SQL Server Mobile: Grava dados em uma base SQL Server rodando em um Pocket PC. Oracle. .Excel: Grava os dados em uma planilha Excel. SQL Server: é mais eficiente para gravar dados em uma base SQL Server. Character Map: Possibilita aplicação de funções de alteração de strings. Flat File: Grava os dados em um arquivo texto. delimitado por vírgula ou de colunas pré-definidas. Componentes de Transformações (Transformations) Estes são os principais componentes para o fluxo de dados. como transformar um texto em letras maiúsculas.

derivada de uma expressão. em um arquivo. Por exemplo. Row Count: Armazena o número da linha no fluxo de dados em uma variável. Merge: Reúne 2 conjuntos de dados previamente ordenados.Conditional Split: Divide os dados baseando-se em certas condições atendidas. Derived Column: Cria uma nova coluna calculada. Multicast: Envia a cópia dos dados para um caminho extra no fluxo de dados. encontrando linhas que sejam duplicadas. Por exemplo. Data Mining Query: realize uma query data-mining do Analysis Services. ordena os dados do fluxo de dados. Slowly Changing Dimension: Coordena a inserção ou atualização condicional dos dados em uma dimensão que muda lentamente. Merge join: Realiza a união de 2 conjuntos de dados em um único fluxo utilizando a função “Join”. Copy Column: Adiciona a cópia de uma coluna para uma nova coluna. Union All: Reúne múltiplos conjuntos de dados em um único fluxo de dados (basicamente é uma reunião de linhas) Unpivot:Transforma os dados de um formato desnormalizado em um formato relacional. (basicamente é uma reunião de colunas). OLE DB Command: Executa um comando OLE DB para cada linha no fluxo de dados. Import Column: Lê os dados de um arquivo e adiciona no fluxo de dados. Percentage Sampling: Captura uma amostra de dados a partir do fluxo de dados usando um percentual do total de linhas. pode-se buscar o nome de uma cidade a partir do campo CEP. Sort: Especificada uma coluna. Term Extraction: Busca um nome ou adjetivo em um texto. . Por exemplo. Fuzzy Grouping: Realiza a limpeza de dados. Pivot: Basicamente os dados de uma coluna são convertidos em mais de uma forma não-relacional. Data Conversion: Converte de um tipo (data type) para outro. Por exemplo. transformado-os em um único fluxo de dados. Script Component: Usa um script para realizar uma transformação. pode transformar o nome “Jon” em “John”. pode-se usar esta transformação para gravar uma coluna que contém uma imagem. Fuzzy Lookup: Encontra e padroniza dados baseados em lógica fuzzy. enviar os dados para um fluxo diferente caso a coluna do Estado seja igual a “Minas Gerais”. Row Sampling: Captura uma amostra dos dados a partir do fluxo de dados usando o número da linha do total de linhas. Lookup: Busca um dado em uma tabela para ser adicionado ao fluxo de dados ou para usado depois em uma transformação. Term Lookup: Busca um termo de um texto e referencia o valor em uma tabela. Export Column: Permite exportar uma coluna do fluxo de dados para um arquivo.

Para incluí-lo escolha na toolbox o “OLE DB Source” e arraste para o painel “Data Flow”.Criando um processo ETL Um processo de carga sempre se inicia escolhendo um componente de origem. . O componente mais utilizado é uma tabela de banco de dados.

O item “Data access mode” pode ser mantido com o default “Table or view” que indica que será acessada uma tabela. No primeiro item da lista. Connection Manager. Você pode selecionar os campos que serão utilizados no fluxo de dados. escolha a conexão e a tabela de origem.Configurando o componente OLE DB Source. Clique 2 vezes no componente. Irá aparecer a lista de campos que existem na tabela de origem escolhida. Columns. clicando no checkbox que aparece à esquerda do campo. Conexão Tabela de Origem Clique no segundo item da lista. .

Clique na seta verde e arraste ate o próximo componente (OLE DB Destination). usando a seta verde. A escolha de qual seta usar deve ser: Verde: se o componente executar com sucesso. . Para incluí-lo escolha na toolbox o “OLE DB Destination” e arraste para o painel “Data Flow”. Vermelha: se o componente falhar. O componente mais utilizado é uma tabela de banco de dados. geralmente uma tabela de Dimensão ou uma tabela Fato. Para tal apenas clique no primeiro componente. Devemos ligar o componente de origem no componente de destino. Vamos sempre considerar o fluxo de sucesso.Além da origem. Irão aparecer duas setas: uma verde e uma vermelha. Este componente é a tabela em que vamos realizar a carga dos dados. um processo de carga sempre possui um componente de destino. então executar o próximo. então executar o próximo.

Configurando o componente OLE DB Destination. Clique 2 vezes no componente. No primeiro item da lista. O item “Data access mode” pode ser mantido com o default “Table or view” que indica que será acessada uma tabela Conexão Tabela de Destino . escolha a conexão e a tabela de destino. Connection Manager.

Iremos ver alguns exemplos a seguir. Entretanto. Irá aparecer a lista de campos que estão no fluxo de dados (esquerda) e a lista de campos que existem na tabela de destino (direita).Clique no segundo item da lista. Mappings. Caso os nomes dos campos coincidam. . existem tabelas de destino que para serem carregadas é necessário que algumas transformações sejam realizadas. uma tabela de Dimensão simples. Ou seja. Caso contrário apenas arraste um campo da primeira lista para o campo correspondente da segunda lista. por exemplo a tabela DIM_BAIRRO. apenas iremos escolher uma tabela de origem de dados e a partir desta tabela carregar os campos da tabela de destino. Para tal existem os componentes de transformação. Você pode também escolher o campo na lista abaixo “Input Column”. Uma carga simples pode possuir apenas um componente de origem e um de destino. a ligação já vem pronta.

No checkbox da esquerda escolha os campos que você deseja ordenar. Configurando o componente Sort: Irá aparecer a lista de campos que está no fluxo de dados. Arraste o componente e solte no painel. ordena os dados do fluxo de dados. Faça as ligações: Origem para o Sort e Sort para o Destino. Eles irão aparecer na lista da parte debaixo. No checkbox da direita escolha os campos que você deseja que continue no fluxo de dados. .Sort: Especificada uma coluna.

Conexão Tabela . ou seja. caso você queira que seu fluxo prossiga tendo apenas uma linha para cada campo ordenado.Na lista de campos a ordenar você pode digitar um novo nome para o campo “Output Alias” e escolher o tipo de ordenação “Sort Type”: ascendente ou descendente. Assim. E em seguida escolha a tabela em questão. Uma opção interessante e muito útil aparece na parte de baixo da tela de configuração : “Remove rows with duplicate sort values”. que significa remover as linhas duplicadas. caso você queira remover os registros em duplicidade clique neste item. Configurando o componente Lookup: Na aba “Reference Table” escolha a conexão com o banco de dados onde se encontra a tabela que você deseja buscar o campo faltante. Lookup: Busca um dado em uma tabela para ser adicionado ao fluxo de dados ou para usado depois em uma transformação.

Na lista da parte de baixo da tela de configuração irão aparecer os campos que necessitamos incluir no nosso fluxo de dados. Na aba “Columns” irá aparecer a lista de campos que estão no fluxo de dados (esquerda) e a lista de campos que existem na tabela escolhida (direita). Nom_UF. para cada nome de UF temos apenas um código. Para incluir os campos necessários clique no checkbox a esquerda dos campos. A ligação deve ser feita entre os campos que representam a chave comum entre as tabelas. No nosso exemplo clicamos apenas no nome da UF.Tomemos como exemplo a carga da tabela DIM_CIDADE. assim é necessário buscar o nome da UF em uma outra tabela de origem que é a tabela UF. este campo existe no nosso fluxo e ele esta na tabela UF representando unicamente cada registro. Nom_Cidade. Na tabela de origem CIDADE não existe o nome da UF. onde temos os campos Cód_cidade. . ou seja. campo nom_UF. No nosso exemplo o campo que relaciona uma tabela a outra é o Cód_UF. Cód_UF.

O componente Merge Join exige que os fluxos estejam ordenados. onde temos que incluir o nome da UF para dar carga na tabela DIM_CIDADE. Assim é preciso incluir um componente Sort após cada origem.Merge join: Realiza a união de 2 conjuntos de dados em um único fluxo utilizando a função “Join”. Vamos utilizar o mesmo exemplo. Faça a ligação da tabela à esquerda ao componente “Merge Join” escolhendo a opção Left e depois faça a ligação da tabela a direita ao componente. (basicamente é uma reunião de colunas). Neste caso precisamos de 2 origens de dados: CIDADE e UF. .

Para exemplificar a query correspondente a este Join seria: SELECT FROM WHERE CIDADE.cod_UF . A ligação deve ser feita entre os campos que representam a chave comum entre as tabelas.nom_UF CIDADE.Configurando o componente Merge Join: Irão aparecer a lista de campos que estão no fluxo de dados à esquerda e a lista de campos que estão no fluxo de dados à direita.cod_UF. UF CIDADE. Os campos que queremos que continuem no nosso fluxo de dados devem ser marcados no checkbox que aparece à esquerda do nome do campo.cod_cidade.cod_UF = UF. CIDADE. Os campos que ligaremos serão os campos que incluiremos na cláusula Where.nom_cidade. UF. Imagine uma query que realiza o join entre duas tabelas. CIDADE.

Isto facilita a visualização. Pode ser usado como um filtro de informações.Conditional Split: Divide os dados baseando-se em certas condições atendidas. A ferramenta disponibiliza várias funções na lista à esquerda. Configurando o componente Conditional Split: Digite a condição no campo “Condition”. Por exemplo. . enviar os dados para um fluxo diferente caso a coluna do Estado seja igual a “Bahia”. Você pode digitar um nome para a condição no campo “Output Name”.

derivada de uma expressão Configurando o componente Derived Column: Digite a expressão no campo “Expression”. A ferramenta disponibiliza várias funções na lista à esquerda. . Escolha o tipo de dados no campo “Data Type”. Digite o nome da nova coluna (passará a existir no fluxo de dados) no campo “Derived Column Name”.Derived Column: Cria uma nova coluna calculada.

Configurando o componente Data Conversion: Irá aparecer a lista de campos que estão no fluxo de dados. .Data Conversion: Converte de um tipo (data type) para outro. Você pode digite o nome desta nova coluna no campo “Output Alias”. Escolha o novo tipo de dados no campo “Data Type. Esta coluna irá aparecer como uma nova coluna no fluxo de dados. Escolha o campo que você deseja alterar o tipo de dados clicando no checkbox à esquerda do nome do campo.