SCD – Slowly Changing Dimensions

Hoje irei demonstrar como criar dimensões históricas – Slowly Changing Dimensions, ou simplesmente SCD – através do Talend. Este tipo de dimensão é interessante em muitos processos onde seja importante manter histórico dos dados.

Primeiramente, crie um arquivo de texto com o seguinte conteúdo:

ID;Funcionario;EstCivil;Cargo;SalBase;Comissao
33;Pedro Siqueira;Solteiro;Vendedor;2100.00;3

Em seguida, crie um novo metadado no repositório de seu projeto apontando para este arquivo.

O schema deste metadado deverá ficar conforme a imagem abaixo:

Feito isso, crie uma conexão com o banco de dados que você irá utilizar, neste tutorial estou utilizando o MySQL.

Crie um novo job e então selecione as duas conexões até este momento criadas e arraste para o mesmo, uma nova janela irá surgir para que você escolha em qual componente deseja utilizar cada conexão, selecione tMysqlSCD para a conexão com o banco de dados e tFileInputDelimited para o arquivo de texto.

Arraste o fluxo Main a partir do componente tFileInputDelimited até o componente tMysqlSCD (clique com o direito sobre o primeiro, vá ao submenu Row, clique em Main e então leve a seta até o componente de saída).

Selecione o componente tMysqlSCD e vá até a view Component, altere a opção “Action o table” para “Create table if not exists” e então vá até a opção “SCD Editor”.

Uma nova janela irá se abrir onde customizaremos o funcionamento de nossa SCD, mas primeiramente é necessário compreender o que são os Types SCD:

Os Types dentro do SCD determinam qual atitude desejamos tomar caso um determinado campo em um registro sofra alterações, os types utilizados no Talend são os seguintes:

Type 0 – Sem ação
Type 1 – Sem histórico
Type 2 – Histórico através de registros (linhas)
Type 3 – Histórico através de campos (colunas)

Além dos types, temos também a Surrogate key, que é a nossa chave substituta, afinal é uma boa prática ter uma chave diferente daquela do sistema de origem.

Vamos arrastar o campo ID de Unused para Source keys
Funcionario para Type 0
EstCivil para Type 1 pois desejamos atualizar este campo, mas não manter histórico
Cargo e SalBase para Type 2 pois desejamos manter histórico através de novos registros
Comissao para Type 3, pois desejamos manter a comissão anterior como histórico em outro campo no mesmo registro, altere também o nome do campo em previous value de previous_Comissao para Comissao_Anterior.

Vamos também marcar as opções version e active, para que sejam criados dois campos onde teremos o indicador de ativo e a versão do registro.

Por fim, vamos dar um nome à nossa Surrogate key, coloque SK e na opção creation deixe “Table max + 1”.

Execute o job.

Após a execução, abra o SQL Builder, selecionando o componente tMysqlSCD, indo até a view Component e clicando no botão com um par de óculos ao lado do campo “Table”.

Execute a query “select * from dm_funcionario”, a dimensão que acabamos de criar através deste componente. Observe o resultado, como as colunas estão desordenadas:

Uma possível solução a esse problema seria editar o schema do componente, no entanto parece que o editor SCD e o editor de schema não conversam muito bem e provavelmente você irá se deparar com o seguinte erro:

Isso acontece pois o previous value do type 3 é renomeado erroneamente para o mesmo nome do current value, e se você tentar renomear, o schema voltará à desordem anterior.

Existem alguns workarounds para este problema, vulgo gambiarras, e nós iremos evitá-las em pról da boa prática de criar nossos modelos de dados e tabelas previamente ao invés de encarregar as ferramentas de ETL.

Delete a tabela dm_funcionario criada pelo componente de SCD e crie novamente executando a seguinte query:

CREATE TABLE `demoproject`.`dm_funcionario` (
 `SK` int(11) NOT NULL,
 `ID` int(11) NOT NULL,
 `Funcionario` varchar(30) DEFAULT NULL,
 `EstCivil` varchar(10) DEFAULT NULL,
 `Cargo` varchar(15) DEFAULT NULL,
 `SalBase` float(10,3) DEFAULT NULL,
 `Comissao` float(3,2) DEFAULT NULL,
 `Comissao_Anterior` float(3,2) DEFAULT NULL,
 `scd_active` bit(1) NOT NULL,
 `scd_version` int(11) NOT NULL,
 `scd_start` datetime NOT NULL,
 `scd_end` datetime DEFAULT NULL,
 PRIMARY KEY (`SK`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Execute novamente o job e depois vá novamente ao SQL Builder e execute “select * from dm_funcionario”, veja que agora tomamos o controle da estrutura de nossa tabela por mais que o schema esteja desordenado.

Agora vamos realizar alguns experimentos alterando o nosso arquivo de entrada e observando os resultados.

Type 0

Primeiramente, experimente alterar o nome do funcionário: observe que mesmo que nenhuma alteração acontece em nossa tabela.

E se agora você alterar o ID do funcionário? Um novo registro será inserido em nossa tabela com o nome anteriormente alterado, pois o ID que é nossa chave na origem foi alterado, porém o registro anterior permanecerá ativo.

Type 1

Agora vamos alterar o campo EstCivil deste funcionário: o campo é atualizado, mas nenhum histórico é mantido. Experimente alterar o estado civil e o nome do funcionário ao mesmo tempo e observe que mesmo assim o nome do mesmo não é atualizado.

Type 2

Agora deixando o nome ainda alterado, experimente alterar os campos Cargo e/ou o SalBase do funcionário: um novo registro será inserido com estes campos atualizados, o registro anterior de mesmo ID será marcado como inativo (scd_active = 0) e terá atualizado o campo indicando o período de tempo pelo qual ele ficou ativo (scd_end). O novo registro será marcado como ativo (scd_active = 1) e terá a versão incrementada (scd_version = 2).

Além disso, uma observação importante e que você deverá levar em conta para tomá-la a seu favor: observe que o nome do funcionário foi atualizado! A explicação para isso é os dados a serem inseridos no novo registro são obtidos a partir do arquivo de entrada, e neste caso mesmo os campos marcados como type 0 irão se comportar como type 2. Use isso a seu favor: há situações nas quais determinados campos somente devem ser atualizados caso outros campos sejam alterados, nestes casos, utilize type 0 e type 2 em conjunto.

Type 3

Por fim, experimente alterar o campo Comissao no arquivo de entrada: observe que o valor anterior irá para o campo Comissao_Anterior e o novo valor será atualizado no campo Comissao.

É isso, qualquer dúvida, talendbrasil.com.br 🙂

Anúncios

Usando variáveis de contexto

Olá, neste job mostraremos como definir variáveis de contexto. Variáveis de contexto podem armazenar diretórios, configuração de banco de dados, em fim tipos de dados como string, interger, char, .. Se mostra útil no uso repetitivo de determinado valor. Imagine um job onde você utiliza repetidamente uma string que determina o caminho de um arquivo a ser o destino de nossos dados. Com uma variável de contexto guardando este valor a manutenção e possível mudança no job quanto ao diretório de destino será bastante simples e rápido, podendo alterar apenas a variável de contexto e alterar várias saídas.

Em posts anteriores já vimos como iniciar um projeto. Partiremos daqui.

Botão direito em Job Design‘create job’. Dê um nome ao nosso job, sugiro “usando vairiáveis de contexto”. Job criado, acesse a ‘paleta de componentes’ na aba Misc e selecione o componente tRowGenerator e clique na Job Design ou segure e arraste. Faça o mesmo para o componente tFileOutputDelimited localizado na aba File. Ligue os dois componentes usando o botão direito em tRowGenerator e selecionando ‘main’, ou segurando o botão direito arrastando até o segundo componente, tFileOutputDelimited. Assim criamos um ‘row link’, que será nosso duto para o fluxo de dados. Existem outros tipos de links, lógicos, que serão apresentados futuramente.

Clique duas vezes em tRowGenerator para abrir sua edição. Aqui temos dois grandes campos, sendo o primeiro para a criação e edição dos campos para nossos registros e o segundo para edição do parâmetros a serem utilizados no primeiro. No primeiro campo vamos configurar duas colunas, “company” e “randomNumber”. Na coluna ‘company’, escolha o tipo de dados como String, ‘…’ para a função, e então em parâmetros  digite “Client” em ‘value’. Já para a coluna ‘randomNumber’, escolha Integer para o tipo de dados, random para a função. Clique em ok. Aparecerá uma caixa de diálogo,

clique em Yes para sincronizar o esquema que criamos com o esquema de saída, ou seja, o esquema montado no arquivo. Clique duas vezes em tFileOutputDelimited para abrir sua edição na aba inferior ‘component view’. Clique em […] para determinar o diretório, nome e extensão do arquivo de saída. Use o diretório que entender melhor, com nome extensão, client1.csv.

Até aqui, temos nosso job desenvolvido em seu componentes e links. No componente de entrada, irá gerar registros da maneira como acabamos de configurar. Assim como o de saída, que já tem seu caminho configurado. Então vamos partir para o que interessa, as variáveis de contexto. Execute e job e verifique o arquivo criado, bem como seus dados, diretório, e nome, assim como foram setados. Crie as variáveis de contexto no repositório. Para isso, clique com o botão direito em Contexts na aba lateral de repositório de trabalho. Selecione Create constext group, dê um nome ao seu grupode contexto. Sugiro sempre usar um nome parecido ao do projeto. Clique em next. Estamos agora no campo onde poderemos criar e setar nossas variáveis. Para criar, clique em [+], três vezes,dê nomes as variáveis e indique seus tipos, company(String), diretory(Directory) e nbrows(int).  Clique na aba Values as tree e em Configure Contexts. Então, clique em New para adicionar novos contextos, sendo eles: contextClient1 e contextClient2. Dê OK. Ainda na aba Values as tree, defina vlaores para as variáveis de cada contexto.

Então, recaptulando, até aqui criamos um grupo de contexto. Neste grupo de contexto há três contextos, que serão nossas opções para execução do job final. E cada contexto é composto de trêsvariáveis de contexto.

Agora temos de disponibilizar estes contextos para o job que queiramos que trabalhe com estes. Clique no Context view (aba inferior). E Clique no botão de contexto para importar as variáveis. Então selecione todas as variávies de contexto que acabalmos de criar e dê OK. Então adicione o grupo de contexto em Add Context Group. Selecione os contextos e dê OK. Pronto, nossas variávies criadas já estão disponíveis na Context view.

Agora então, nos falta apenas usar nossas variáveis de contexto na execução dos jobs. Clique duas vezes no componente tRowGenerator para abrir seu editor. No campo, Number of Rows, coloque a variável de contexto nbrows, você pode fazer isso apenas digitando context.nbrows ou selecionando o campo e teclando Ctrl+Space, isso listará opções de sistema e contexto para que não precisse se preocupar em lembrar o nome da variável que usou. Faça o mesmo para o campo Parameter no campo de função de parametros do nosso esquema, setando a variável context.company. Dê OK.

Usamos duas das três variáveis de contexto. Falta apenas a variavel que indicava nosso diretório. Este será usado para não ter que ficarmos repetindo um diretório extenso para cada execução de nosso job. Isso facilita bastante. Pode imaginar o tempo que economizamos. Clique duas vezes no componente tFileOutputDelimited. No campo File Name, devemos passas do diretório, o nome do arquivo e ainda sua extensão. Assim usaremos nossas variáveis criadas. Lembrando que estamos lidando com Java, podemos concatenar Strings de forma a usar nossos contextos e gerar a String com diretório, nome e extensão para nosso arquivo de saída, assim:  context.directory+context.company+”.csv”.

Contextos criados, configurados e indicados para uso podemos rodar nossso job nos diversos contextos criados para que possamos ver o resultado. Para isso basta ir na aba inferior Run e dentro desta na aba de contexto selecionar um dos três contextos e clicar no botão de Run para executar nosso job usando o contexto selecionado. Fazendo isso para os três que criamos, podemos notar diferenças no númro de linhas criadas, na informção do campo company da nossas tabelas, e ainda no diretório e no nome do arquivo, isso tudo apenas usando as três variáveis de contextos que criamos. Essa se mostra uma boa prática, pois a mudança em cada um desses campos se mostra bem mais demorada que a simples criação dos variados contextos. E uma necessária re-execução se mostra ainda mais lenta.

Espero que tenha sido um post claro e útil.

O uso de variáveis de contexto se mostra muito mais ampla, segura e necessária que essas simples explicação. Mostraremos mais detalhes, principalmente sobre segurança, futuramente.

Um abraço a todos.

Acessando Web Services no Talend

Introdução

A utilização de Web Services é comumente usada na integração e comunicação entre sistemas. Nesse artigo começaremos com uma breve introdução sobre Web Services, o que são, seu formato padrão e como podem ser utilizados, posteriormente, iremos aprender como realizar requisições a um Web Service utilizando o Talend com um exemplo prático usando um Web Service de captura de endereço através do CEP.

Para o desenvolvimento desse artigo iremos utilizar um Web Service pertencente ao pessoal do Byjg, que é um site que possui diversos serviços para diversas situações, dentre eles está o serviço de consulta de CEP, no qual podemos passar um CEP para ter como retorno o endereço, e vice-versa.

 

Web Services

Os Web Services foram criados para construir aplicações que funcionem como serviços na internet, ou seja, que estejam disponíveis para outras aplicações independente da plataforma utilizada no seu desenvolvimento, e isso é possível devido a padronização da linguagem utilizada na comunicação entre Web Services. Todo Web Service só envia e recebe dados no formato XML, um formato universal, onde uma aplicação pode ser desenvolvida em qualquer linguagem, que, ao enviar ou receber os dados eles são convertidos para o formato XML, possibilitando assim a comunicação. Todo Web Service ao ser disponibilizado deve informar sua descrição, para o usuário saber como acessar, qual seu formato, o que ele retorna, etc. Essa descrição é feita no formato XML, utilizando um padrão, o WSDL (Web Service Description Language).

 

Conhecendo o Web Service

Para ter acesso ao serviço de CEP precisaremos realizar o cadastro no site. Para acessar entre aqui logo na página inicial, no canto direito superior selecione a opção área do usuário.

Na tela que aparece no canto direito selecione a opção crie agora.

Proceda com o cadastro normalmente e depois efetue o login, na primeira tela aparecerá a mensagem para ativar o serviço, clique em CEP na barra superior, nessa tela terminaremos de preencher os dados e marcaremos a opção Ativar WebService de consulta de CEP e basta confirmar as modificações.

Depois de finalizado o cadastro aparecerá uma tela para teste do serviço, porém com interface gráfica, ou seja, o Web Service está disponível e essa interface utiliza o Web Service de CEP para realizar as requisições.

O Web Service de CEP possui duas operações principais ObterLogradouroAuth, na qual recebe 3 parâmetros, CEP, usuário e senha, e retorna o endereço, e a operação ObterCEPAuth, que recebe 5 parâmetros, logradouro, localidade, UF, usuário e senha, e retorna o CEP.

Acessando o Web Service no Talend

Agora vamos ao Talend. Primeiramente vamos criar um job, no canto esquerdo selecione com o botão direito a opção “Job Designs -> Create job” e vamos dar um nome ao nosso job, o chamaremos de “WS_CEP”. Na paleta de componentes vamos expandir a pasta Internet, selecionar e arrastar para o nosso job o componente tWebServiceInput, esse é o componente padrão para chamadas a Web Services, disponível na versão Talend Open Studio, os demais componentes referentes a Web Services são disponibilizados na versão Talend Integration Suite.

Prosseguindo, também na paleta de componentes, vamos expandir a pasta Logs & Errors e realizar o mesmo processo com o componente tLogRow. Clicaremos com o botão direito em cima do componente tWebServiceInput selecionar a opção Row -> Main e arrastar a seta para o tLogRow. Vamos aproveitar para mostrar o nome do nosso job, clique em cima da área do job, e nas opções do componente marque a opção Show subjob title, você também pode colocar o nome que irá aparecer.

Clicando duas vezes no tWebServiceInput apareceram as propriedades do componente, no campo WSDL retire o que vem por padrão e insira a url do serviço de CEP, disponível aqui.

No campo Method Name colocaremos o nome da operação a ser requisitada no Web Service, obterLogradouroAuth, e na última parte serão inseridos os parâmetros necessários para fazer a requisição, como disse anteriormente o Web Service precisa de 3 parâmetros, então clique 3 vezes na opção + que tem logo abaixo. A ordem inserida aqui será a mesma ordem enviada ao Web Service, então se o Web Service recebe os parâmetros CEP, login e senha, vamos colocar nessa ordem também no Talend. Feito Isso vamos criar o esquema que irá armazenar os dados provenientes do Web Service. Clique na opção Edit schema e adicione 1 coluna, vamos nomeá-la  de endereço, ao finalizar aparecerá uma janela perguntando se você deseja propagar as mudanças, clique em Yes.

Feito isso basta ir até a aba Run(Job) ou simplesmente pressionar F6 para executar o nosso job e ver o resultado.

Bom por enquanto é isso, o intuito desse artigo foi só dar uma breve introdução à chamada de Web Services no Talend, e isso abre um leque de opções bastante vasto, sendo que essa tarefa acaba sendo bastante simples de ser realizada utilizando o Talend, dependendo somente da necessidade e criatividade.

Um grande abraço a todos.

Segundo job: PostgreSQL para Planilha Excel

Objetivos

Neste artigo você aprenderá a:

  1. Definir Metadados e Conexões com bancos de dados PostgreSQL;
  2. Carregar os dados do banco de dados mapeado em uma planilha Excel (XLS).

Introdução

Observações: Caso se tenha dúvidas em relação à criação de um repositório local, de um projeto e/ou de um job, por favor, veja os três primeiros passos do artigo Primeiro job: Arquivo delimitado para MySQL.

Requisito: Antes de começar, você irá precisar restaurar a base de dados  empresa, que será a origem de nossos dados.

IMPORTANTE: O arquivo em anexo encontra-se em formato .doc. Peço que você renomeie a extensão dele para .backup e para restaurá-lo siga os passos abaixo.

Nota: A versão do PostgreSQL utilizada no exemplo é a 8.4 (http://www.postgresql.org/download/)

Via pgAdmin III

  1. Clicar com o botão direito em Banco de Dados;
  2. Selecionar a opção ‘Novo Banco de Dados’;
  3. Definir os dados desse novo banco (nome, dono, codificação, etc.);
  4. Clicar com o botão direito no banco criado;
  5. Selecionar a opção Restaurar;
  6. Clicar no botão  ” … “;
  7. Informar o caminho onde se encontra o arquivo .backup, clicar em  Abrir e logo após em OK.

Via Comando

  1. Digitar o comando: pg_restore -d [NomeBase] /[Caminho do arquivo.bkp]

Nota: Os colchetes são apenas para ilustração.

Definindo Metadados

Nessa seção iremos descrever o mapeamento da origem do nosso Job (PostgreSQL, Base de Dados Empresa) e o mapeamento do destino (Planilha Excel).

PostgreSQL

Na seção Metadata (repositório da ferramenta), clique com o botão direito em Db Connections e selecione a opção Create Connection. No assistente que aparecer defina o nome da conexão e aperte na opção “Next“.

Nesta etapa você definirá o tipo do banco de dados e os detalhes da conexão. Em Db Type selecione PostgreSQL para que as outras opções sejam disponibilizadas e então defina os metadados de sua conexão conforme a imagem apresentada. Qualquer dúvida siga os passo do detalhamento abaixo.

Detalhamento dos parâmetros:

  1. Login: usuário do banco de dados;
  2. Password: senha do banco de dados;
  3. Server: IP do banco (se a conexão for local, pode usar localhost em caso de conexão local);
  4. Port: porta do banco de dados (já vem preenchido por padrão 5432, caso sua conexão seja em outra porta basta alterar);
  5. DataBase: nome da base de dados. Seguindo nosso exemplo o nome será Empresa;
  6. Schema: nome do schema do banco de dados. Esse parâmetro é opcional. Caso você não tenha criado um schema novo para a base de dados deve-se usar o schema public.

Após informar esses parâmetros clique em Check para verificar se a conexão com o banco de dados foi estabelecida. Caso a mensagem “Nome da Conexão connection successful” apareça, clique em OK e logo após Finish.


Nota: Caso uma mensagem de erro apareça ao testar a conexão, verifique se os parâmetros informados estão corretos e tente novamente.

Diante disso, você recuperará as tabelas da base de dados Empresa. Em Db Connections clique com o botão direito na conexão que você criou e selecione a opção Retrieve Schema. Com a  janela Schema aberta, clique em Next. Aparecerá um lista de todas as tabelas que fazem parte da base de dados Empresa. Selecione o botão Select All, logo após  Next e Finish.

Nota: Para verificar se as tabelas foram recuperadas, expanda a seção Table schemas (diretório abaixo da conexão criada no exemplo). Devem aparecer duas tabelas  ( tb_pessoa e td_cargo ).

Planilha Excel

Caso o Job criado para o exemplo não esteja aberto, por favor, abra. Logo após, vá até a Paleta da ferramenta, selecione as opções File -> Output , o componente tFileOutputExcel e o arraste até a área do Design Workspace. Para configurar a sua planilha de destino siga os passos abaixo.

  1. Clique uma vez em cima do icone do seu tFileOutputExcel;
  2. Logo abaixo da área do Design Workspace clique na aba Component e certifique-se que você se encontra na opção Basic settings do componente.
  3. No parâmetro File Name, clique na opção “…” para definir o diretório que você deseja salvar o arquivo e informar o nome dele.
  4. Marque a opção include header, para que na primeira linha de nossa planiha apareçam os nomes dos campos que estamos carregando.
  5. Clique no ícone salvar ou aperte Ctrl S para salvarmos as alterações.


Pronto!!!  Seu arquivo de destino já está configurado.

Nota: O Talend já coloca por default o caminho do workpace como diretório de saída dos arquivos (C:/Talend/TOS-Win32-r53616-V4.1.2/workspace). Nada impede que você altere conforme desejar.

Implementando o Job

Nessa etapa iremos implementar o processo de carga. Para isso o Job criado como exemplo deve estar aberto. Por favor, siga os passos listados abaixo.

  1. Clique, segure e arraste as duas tabelas criadas em Db Connections para a área do Design Workspace. Você pode selecionar vários itens utilizando a tecla Ctrl e arrastar de uma só vez. 
  2. Para cada item arrastado, uma janela irá surgir lhe perguntando que tipo de componente você deseja criar a partir desse item. Selecione para todos a opção tPostgresqlInput.
  3. Para cada tabela do Design Workspace, clique com o botão direito, selecione as opções Row -> Main e arraste a seta até o componente tMap. A ordem das tabelas deve ser seguida, primeiro tb_pessoa e depois td_cargo.
  4. Clique duas vezes no componente tMap e a janela de mapeamento irá aparecer. No lado esquerdo dessa janela ficam as tabelas da origem, o meio representa a transformação que os dados poderão sofrer e no lado direito o destino onde os dados serão armazenados (ETL).  Todas as configurações realizadas no componente tMap serão detalhadas abaixo.
  • Para recuperar as informações obtidas através do relacionamento entre as duas tabelas clique na opção “…” da tabela row2 da coluna idt_cargo e digite “row1.cod_cargo”.


  • Para criar  saída dos dados clique no ícone ” + ” e informar o nome da expressão.


  • Clique nas colunas das tabelas de origem e arraste para a saída criada. Arrate apenas os seguintes campos: mat_pessoa, nme_pessoa, nme_cargo, dsc_cargo e tel_ramal.
  • Após realizado o mapeamento clique na opção Apply e OK.


Após seguir os passos orientados anteriormente clique com o botão direito, selecione as opções Row -> [Nome da expressão de destino utilizada] e arraste a seta até o componente tFileOutputExcel e salve o projeto mais uma vez.

Certifique-se que seu Job esteja similar a ilustração abaixo.

Executando o job

  1. Clique na aba Run e depois no botão Run. Você também pode utilizar a tecla F6.
  2. Vá atéo diretório de destino que você escolheu e abra o arquivo Excel para visualizar os dados.

Conclusão

Neste artigo foi demonstrado como você realiza um processo de ETL. Extraindo os dados de uma base de dados no SGBD PostgreSQL, mostrando o cruzamento dos dados de duas tabelas e gerando um arquivo excel como saida. Dessa forma, esperamos ter mostrado as facilidades da ferramenta Talend. Até a próxima!!!

Primeiro job: Arquivo delimitado para MySQL

Neste artigo você aprenderá a:

  1. Criar um repositório local;
  2. Criar um projeto;
  3. Criar um job;
  4. Definir Metadados e Conexões com bancos de dados;
  5. Carregar os dados de um arquivo de texto em um banco de dados;

Introdução

Requisito: Antes de começar, você irá precisar deste arquivo, que será a origem de nossos dados.

Como já foi demonstrado neste artigo, é possível importar um projeto de demonstração a partir da janela de projetos, porém hoje iremos criar nosso projeto do zero e então o nosso primeiro Job.

Após efetuar o download da ferramenta, não será necessária a instalação, apenas descompacte na raiz do disco (o caminho curto fará diferença). Dentro do diretório do Talend, há diversas opções de binários para diversos sistemas e arquiteturas, e para cada um destes binários há um arquivo .ini, onde são configuradas as opções de memória da JVM.

Para o Windows há três executáveis: x86, x86_64 e WPF. O WPF é um subsistema para renderização de interface gráfica que utiliza DirectX que está para o Windows assim como o GTK está para Linux, porém não recomendo sua utilização pois ele ainda está em fase de portabilização no Eclipse sendo apenas uma herança para o Talend.

Para Linux há também três alternativas: x86, x86_64 e PPC (power pc) e todas utilizam o GTK.

Escolha o binário de acordo com a arquitetura de seu processador para que possamos partir para a criação de nosso projeto.

Nota: Você deve ter notado a forte ligação entre o Talend e o Eclipse, acontece que o Talend é desenvolvido como um plugin para o Eclipse, porém não é possível obtê-lo à parte.

Criando um repositório local

Então iremos criar um primeiro projeto em branco, mas antes disso é necessário criar um repositório onde serão armazenados nossos projetos.

As versões gratuitas permitem apenas a criação de repositórios locais, portanto no campo Workspace defina o diretório onde seus projetos serão armazenados, dê um nome a seu repositório e defina um e-mail válido.

Criando um projeto

Após criado o repositório, na tela de projetos poderemos criar um projeto selecionando a opção “Create a new local project” e “Go!“. Dê um nome a seu projeto, adicione uma descrição ao mesmo caso queira e escolha a linguagem utilizada (java ou perl), em nossos tutoriais utilizaremos a linguagem java. Feito isso clique em “Finish” e depois abra o projeto.

Nota: Ao abrir seu primeiro projeto o Talend provavelmente irá pedir seu e-mail, isto é opcional caso deseje obter newsletters sobre a ferramenta.

Criando um Job

A primeira tela a ser exibida na suite é a de boas vindas, feche-a e na próxima janela você terá à sua esquerda o repositório de seu projeto.

Nota: Uma caixa de diálogo com a informação Generation Engine irá aparecer, é recomendável que você aguarde a conclusão, se quiser clique em Run in background mas não cancele este processo.

Dentro de repositório, clique com o botão direito em Job Designs e selecione a opção Create Job. Um assistente irá surgir onde você poderá atribuir nome, propósito, descrição, versão e status ao novo job.

Ao concluir a criação do job, no centro de sua tela, na seção conhecida como Design Workspace um novo job em branco irá surgir.

Definindo Metadados

Arquivo

Para realizarmos a carga de nosso arquivo de texto em um banco de dados, precisamos primeiramente definir os metadados de nosso arquivo e nosso banco de dados.

Dentro do repositório, expanda a seção Metadata, lá você verá os metadados do projeto separados por tipo.

Primeiro vamos definir os metadados de nosso arquivo, por se tratar de um arquivo de texto delimitado por ponto e vírgula, clique com o botão direito em File Delimited e selecione a opção Create file delimited. No assistente que se abrir, dê um nome para o arquivo e clique em Next. Na próxima janela defina o caminho para o arquivo e sua codificação.

Na próxima etapa poderemos definir detalhes sobre a estrutura de nosso arquivo, como caracteres separadores de campos e linhas, linhas a saltar no início ou fim do arquivo ou mesmo limitar o número de linhas a serem lidas. Para o nosso arquivo, iremos definir um salto de 5 linhas iniciais, pois são comentários no cabeçalho do arquivo. Além disso, iremos marcar a opção Set heading row as column names para que a primeira linha após as 5 primeiras ignoradas seja considerada como nome das colunas.

A próxima etapa é onde definiremos os nomes das colunas, chaves primárias, tamanho, precisão e tipo de dado dos campos de nosso arquivo. Como estamos definindo metadados para um arquivo de texto, o tamanho, precisão ou chave primária não farão diferença, mas é interessante definir, pois poderemos herdar estas informações para componentes de saída.

Nota 1: O assistente varre as primeiras 10 linhas do arquivo para tentar detectar o tamanho dos campos, mas é importante você se certificar destes tamanhos, pois como são apenas as 10 primeiras linhas, você pode obter erros como o seguinte:

Data truncation: Data too long for column ‘RegTime’ at row 54

Observe que o erro ocorreu na linha 54, impossível que o assistente detectasse previamente o tamanho do campo. Este é um erro que você irá obter neste arquivo de exemplo caso deixe os tamanhos conforme o assistente detectar. Portanto configure o tamanho dos campos conforme na imagem anterior.

Nota 2: Para campos do tipo Date, você deve definir um padrão para a data conforme ela está disposta no arquivo, como você pode verificar na imagem anterior. Para mais informações use esta página.

Agora que já definimos os metadados de nosso arquivo, vamos definir os metadados de nossa conexão com o banco de dados.

Banco de Dados

Neste exemplo iremos utilizar o MySQL. Ainda na seção Metadata, clique com o botão direito em Db Connections e selecione a opção Create Connection. No assistente que se abrir defina o nome da conexão e salte para a próxima etapa.

Nesta etapa você definirá o tipo do banco de dados e os detalhes da conexão. Em Db Type selecione MySQL para que as outras opções sejam disponibilizadas e então defina os metadados de sua conexão conforme na imagem.

Clique em Check para verificar se os detalhes estão corretos e caso sim clique em Finish.

Como iremos utilizar esta conexão apenas como saída, não será necessária a definição de metadados de tabelas.

Carregando os dados

Esta etapa é extremamente difícil e é importante que você preste muita atenção.

Passo1: Clique, segure e arraste os dois itens criados em Metadata para a área do Design Workspace. Você pode selecionar vários itens utilizando a tecla Ctrl e arrastar de uma só vez.

Para cada item arrastado, uma janela irá surgir lhe perguntando que tipo de componente você deseja criar a partir desse item.

Para o arquivo delimitado, selecione tFileInputDelimited e para o mysql selecione tMysqlOutput. Observe que cada componente criado nesta área possui um visual diferente.

Passo 2: Agora clique e segure com o botão direito no componente tFileInputDelimited e arraste até o componente tMysqlOutput.

Selecione o componente tMysqlOutput. Veja que na parte inferior da suite você possui algumas visões. Clique na aba Component.

Nesta aba você pode definir várias opções para o componente, mas como estamos herdando as opções do repositório, não será necessária muita configuração.

Vá até o campo Table e dê um nome à tabela destino, por exemplo, “cliente”. Logo abaixo você verá as caixas Action on Table e Action on Data.

Em Action on Table você pode definir se o job irá criar a tabela, se ele irá truncar quaisquer dados existentes ou se ele deverá realizar um drop a cada execução. Selecione a opção Drop if exists and create para que ele exclua a tabela e crie novamente a cada execução.

Nota: A ação “Default” é não fazer nada, ou seja, a tabela deverá existir antes da execução do job.

Em Action on Data você define a ação com os dados, ou seja, se o job deverá realizar exclusões, atualizações ou inserções de dados.

Nota: Há duas opções que parecem redundantes: Insert or Update e Update or Insert, a diferença entre estas opções é performática: caso você saiba que seu job irá executar mais inserts do que updates, você deve selecionar a opção Insert or Update, para que ele primeiro realize os inserts e depois os updates. Caso saiba que ele vai realizar mais updates, então Update or Insert.

Executando o job

Clique na aba Run e depois no botão Run. Você também pode utilizar a tecla F6.

Conclusão

Neste artigo foi demonstrado como o Talend facilita nas tarefas básicas como criação de metadados, possibilitando que você se dedique mais ao que realmente importa.