Otimizando extração e carga de dados utilizando componentes Bulk

Neste artigo vou demonstrar como otimizar a extração e carga de dados quando utilizando componentes Bulk. Para a maioria das tecnologias de bancos de dados suportadas pelo Talend existem os componentes BulkOutput, BulkExec e OutputBulkExec, estes componentes permitem a extração para arquivo (OutputBulk), carga do arquivo utilizando o método de load do próprio banco (BulkExec) e extração e carga utilizando o mesmo componente (OutputBulkExec).

O job de demonstração abaixo foi desenvolvido para a extração de dados de um banco de dados Oracle e carga em um Sybase IQ, mas alguns tweaks foram necessários para otimizar da performance do mesmo, pois apenas esta tabela possuia um volume na casa dos terabytes.

Para começar, primeiramente estabelecemos as conexões com os databases. Como este job executa mais de um subjob em paralelo (veremos adiante como ativar multithreads) temos de garantir que as conexões sejam estabelecidas antes da execução de qualquer outro subjob, para isso utilizamos o componente tPrejob, e por segurança caso a última execução tenha terminado sem sucesso deletamos os arquivos extraídos utilizando os componentes tFileList e tFileDelete. Além do tPrejob, existe o tPostjob, que garante que os subjobs ligados a ele através de triggers sejam executados somente após a execução dos demais subjobs não ligados a ele.

Job completo: clique para visualizar em tamanho real

Um subjob é um segmento do job que pode ser executado independentemente da execução de outros segmentos, ou pode estar conectado a outros através de triggers. Graficamente eles são delimitados por retângulos de fundo azul claro, laranja ou outra cor caso você tenha customizado.

Estabelecidas as conexões e removidos os arquivos de execuções anteriores, damos início à extração e carga de nossos dados.

O subjob logo abaixo do Prejob executa uma query no nosso banco destino, neste caso um Sybase IQ, obtendo o maior ID da tabela que pretendemos carregar, desta forma podemos extrair de nossa fonte apenas os registros novos, cujo ID seja maior que o carregado na última execução. O resultado desta query é propagado ao componente tJavaRow, que armazena o valor em uma variável de contexto.

Trabalhar com o tJavaRow é simples: clique em Sync Columns e então em Generate code, e o Talend irá gerar um código geralmente no padrão

output_row.MAX = input_row.MAX;

onde MAX é o nome de um dos campos do schema do componente (neste caso há apenas um campo), output_row é a saída do tJavaRow e input_row é a entrada, o que ele está recebendo do componente predecessor. Mas como não pretendemos propagar dados a partir deste componente, substituímos output_row por context.NOME_DA_VARIAVEL ficando desta forma:

context.NOME_DA_VARIAVEL = input_row.MAX;

Para criar variáveis de contexto vá até a view Contexts, adicione suas variáveis, defina seus tipos e valores default, você pode ver mais detalhes neste artigo: Usando variáveis de contexto.

Extraído este valor máximo e armazenado em uma variável, partimos para o subjob de extração dos dados da fonte e para garantir que esta etapa seja executada somente após a execução da etapa anterior, ligamos os dois subjobs com a trigger OnSubjobOk.

Este banco de dados que utilizamos como origem é um Oracle RAC (Real Application Cluster), um cluster de databases Oracle para garantir a alta disponibilidade. Como o Talend ainda não suporta a conexão a RAC especificando mais de um host (especificando um apenas funciona, mas não garante a alta disponibilidade) utilizamos uma conexão do tipo General JDBC, onde podemos editar a URL de conexão livremente (O suporte a conexão com RACs Oracle utilizando os componentes desta tecnologia está previsto para a versão 5.0).

Então editamos a query no database de origem, para trazer apenas os dados onde o ID seja maior do que o presente no database destino. Para isso selecione o componente de input e vá em Query, lá edite a query para que ela fique semelhante a esta:

"SELECT
...
...
FROM ORIGEM
WHERE ID > " + context.VARIAVEL

Observe como adicionamos a variável de contexto à query: como no fim das contas isso é uma String para a linguagem Java, colocamos a parte constante entre aspas e então concatenamos o conteúdo da variável, que será definido em tempo de execução, utilizando o operador +.

Dica de desempenho: em alguns componentes de Input de algumas tecnologias, existem opções que permitem otimizar a forma como os dados são extraídos. Nos componentes Oracle e JDBC (dentre outros) existe a opção Enable Cursor que em alguns casos permite obter um ganho de performance considerável. Já no componente de input do MySQL existe a opção Enable stream que também pode incrementar sua performance na extração de dados. Mas atenção: com a opção de stream no Mysql não é possível utilizar uma única conexão em modo multithread com a opção Use an existing connection.

E como modo de armazenamento intermediário destes dados obtidos do database de origem utilizamos arquivo(s) de texto puro. Neste caso utilizaríamos normalmente um componente OutputBulk, mas ao invés disso utilizamos um componente tFileOutputDelimited, que no fim das contas tem o mesmo propósito: gerar um arquivo de texto puro, mas além disso possui uma opção interessante: na guia Advanced do componente ativamos a opção Split output in several files que fará surgir uma outra opção chamada Rows in each output file, com estas opções especificamos que o conjunto de registros obtidos da fonte deverá ser dividido em vários arquivos com um número máximo de registros, cujo valor é definido por você. Neste caso defini um limite de 100 milhões de registros por arquivo. Assim teremos vários arquivos com o nome PRODUCTS1.dat, PRODUCTS2.dat…


O propósito de se dividir o resultset em vários arquivos você entenderá agora com a descrição do outro subjob, que é executado em paralelo ao que foi descrito até aqui.

Este subjob executa enquanto o outro subjob não tiver concluído sua execução. Para isso utilizamos o componente tLoop, onde podemos definir o tipo de Loop que pretendemos executar (for ou while) e as condições de sua execução. O loop “for” é recomendado quando você consegue estimar o número de execuções e o loop “while”, como o próprio nome já diz, é recomendado quando você deseja executar ENQUANTO uma condição for verdadeira. Utilizaremos o loop while e mais à frente irei mostrar como construíremos a condição de execução.

Após o tLoop temos o componente tSleep que permite pausarmos a execução deste subjob por um tempo pré determinado, neste caso um minuto. Observe que a ligação entre o tLoop e tSleep é feita através da linha Iterate, pois não há fluxo de dados sendo transmitido, apenas uma repetição de execuções.

Quando o componente tSleep termina a sua execução é chamado o componente tFileList através da trigger OnComponentOk, ou seja, quando a execução apenas deste componente (tSleep) tiver sido concluída, e então o tFileList irá listar o conteúdo de um diretório especificado por você, sendo que é possível adicionar uma máscara para os arquivos listados para que você filtre o resultado.

Estamos listando o conteúdo do diretório onde o componente tFileOutputDelimited está criando arquivos, então definimos uma máscara com o formato de nome que esperamos para estes arquivos, neste caso “PRODUCTS*.dat”, onde * é um caractere curinga onde esperamos a sequència de números que o tFileOutputDelimited irá inserir na criação dos arquivos.


O resultado dos arquivos listados pode ser obtido através de um loop mais uma vez utilizando a linha Iterate, desta forma conectamos o componente tFileList e tSystem.

Através do componente tSystem executamos comandos do sistema, independente do sistema onde o job está sendo executado, Windows, Linux, FreeBSD… quem sabe outros.. E neste especificamente executamos um comando pertencente a sistemas Unix e similares: o lsof, que lista os arquivos abertos no momento por algum processo.

Observe o comando sendo executado:

"sudo /usr/sbin/lsof " + ((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"))

Chamamos o comando lsof e concatenamos à String o caminho do arquivo atual listado pelo componente tFileList, mas como obter este caminho?

Observe que no canto esquerdo inferior da suite, abaixo do repositório, existe uma view chamada Outline. Dentro desta view existem variáveis de retorno dos componentes que você está utilizando no job atualmente aberto, como número de linhas inseridas em um arquivo ou erro retornado por um componente. Para utilizar estas variáveis você simplesmente seleciona e arrasta para o local desejado, um campo de código livre como no tJava ou tJavaRow ou mesmo um campo de opção de algum componente, como iremos fazer agora.

Para obter os nomes dos arquivos que listamos no componente tFileList, incluindo o caminho de sua localização, e concatenar esta String ao comando lsof, vamos até a view Outline, expandimos a visão do componente que desejamos, neste caso o tFileList_1 e arrastamos a variável Current File Name with path para o campo onde executamos o comando do sistema no componente tSystem, concatenando as Strings com o operador +.

Atenção: Tome o cuidado de observar o nome único do componente na view Outline, neste job temos por exemplo os componentes tFileList_1 e tFileList_2. Você pode obter o nome único do componente clicando no mesmo e olhando o cabeçalho da view Component.

Agora que já listamos os arquivos criados naquele diretório e executamos o comando lsof sobre a lista obtida, partimos para a carga em si destes arquivos no database destino e então você entenderá o por que de tudo isso.

Como estamos gerando vários arquivos separados em 100 milhões de registros e em paralelo temos um subjob responsável pela carga destes arquivos no Sybase IQ, temos de garantir que a carga dos arquivos extraídos somente seja executada após a conclusão destes, ou seja, após o seu fechamento. Para isso executamos o comando lsof e, dependendo do resultado, saberemos se o arquivo está fechado, significando que o mesmo está pronto para carga, ou aberto, significando que a extração de registros para este arquivo ainda não foi concluída.

Então utilizamos o componente BulkExec da tecnologia destino, aqui um Sybase IQ, para carregar o arquivo do loop atual. Neste componente você define o schema da tabela destino e aponta para o arquivo a ser carregado, mais uma vez obtendo o nome do arquivo e caminho listado no tFileList através da view Outline.

E para garantir que sejam carregados apenas os arquivos fechados, conectamos o componente tSystem ao tSybaseIQBulkExec utilizando a trigger If, onde poderemos especificar uma condição para execução do componente sucessor. Como condição utilizamos o retorno do componente tSystem, que caso seja igual a 1 indica que o arquivo atual não foi listado, ou seja, não está aberto por nenhum processo e então podemos carregá-lo.

Por fim, chamamos os componentes tSybaseCommit e tFileDelete logo após a carga do arquivo, que como os próprios nomes descrevem, realizam o Commit da transação e exclusão do arquivo carregado (mais uma vez utilizamos a variável Current file with path do componente tFileList).

Agora os detalhes adicionais para conclusão deste job. Como condição de execução do componente tLoop, queremos que este subjob seja executado enquanto houver algum arquivo a carregar, então irei lhe mostrar como construir esta condição:

Procure pelo nome único do componente tFileOutputDelimited dentro de Outline (neste caso provavelmente haverá apenas tFileOutputDelimited1) e arraste a variável Number of line para o campo Condition do componente tLoop e compare o seu valor com null, ficando desta maneira:

(((Integer)globalMap.get("tFileOutputDelimited_1_NB_LINE")) == null)

Desta forma garantimos que o subjob continue sua execução mesmo se o seu início se der antes do subjob de extração dos dados, pois o número de linhas retornado pelo componente tFileOutputDelimited será igual a null. Mas isto não é suficiente: devemos agora testar se o componente tFileList retornou algum arquivo e para isto arrastamos a variável Number of files da view outline e separamos as condições pelo operador || , que significa OU. Ainda, damos uma margem caso o componente tFileList ainda não tenha sido executado, comparando o conteúdo da variável Number of files também com null e aglomeramos estes dois testes entre parenteses para que seja retornato true (verdadeiro) caso um ou o outro retorne true, mesmo que o outro teste retorne false.

(((Integer)globalMap.get("tFileList_1_NB_FILE")) >= 1 || ((Integer)globalMap.get("tFileList_1_NB_FILE")) == null)

Juntos, os três testes com compoem a condição do loop ficarão assim:

(((Integer)globalMap.get("tFileOutputDelimited_1_NB_LINE")) == null) || (((Integer)globalMap.get("tFileList_1_NB_FILE")) >= 1 || ((Integer)globalMap.get("tFileList_1_NB_FILE")) == null)

Para concluir, utilizamos o componente tPostJob para conectar os componentes tSybaseClose e tJDBCClose, que como os nomes já descrevem, fecham as conexões estabelecidas logo no início da execução do job.

Um último detalhe antes de pressionar F6 é habilitar a execução multithread. Vá até a view Job, entre em Extra e habilite a opção Multithread Execution.

Conclusão

Para muitas cargas quando se tratam de alguns megabytes não há a necessidade de um job como este, provavelmente você utilizará um “input” e um “outputbulkexec“, mas conforme o volume de dados aumenta, a complexidade dos jobs responsáveis por sua carga se eleva proporcionalmente se você quiser incrementar a performance.

Com esta abordagem o espaço em disco não precisa ser uma preocupação: imagine extrair alguns terabytes de dados em um único arquivo para só então carregar este arquivo, enquanto você pode consumir apenas alguns gigabytes para isso!

Além do espaço em disco, há um ganho de tempo considerável, pois o database destino não precisa ficar horas (ou dias!) esperando a extração ser concluída para só então realizar a carga, enquanto pode fazê-la em partes.

Por fim, a carga de dados a cada 100 milhões de registros torna o processo mais simples de se recuperar de qualquer execução falha: imagine se a 99% da extração dos dados da fonte a rede vai abaixo? Você tem a segurança de que ao menos algo em torno de 95% já tenha sido carregado no destino com sucesso e é esse o motivo de excluírmos quaisquer arquivos existentes no início do processo: pode haver algum registro truncado e então extraímos apenas os registros cujo ID seja maior do que o último carregado no destino.

Anúncios

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 🙂

Sobre MDM, Data Warehouse e Inovação

O Gartner recentemente desenvolveu uma série de estudos que confirmam a nossa percepção de mercado. O primeiro estudo é dedicado ao Master Data Management (MDM) e declara que “MDM é importante em uma economia sólida, e mais importante para o crescimento”. John Radcliffe, Vice Presidente de Pesquisa do Gartner comentou no EFY Times que “Hoje a maioria das organizações manuseiam conjuntos múltiplos de negócios e aplicações de dados através de sistemas corporativos, regionais e locais. Ao mesmo tempo os clientes demandam mais rapidamente resultados cada vez mais complexos das organizações, levando para uma inconsistência que dificulta as capacidades destas organizações em mensurar e mover-se dentro do mercado. Através do MDM, CIOs podem criar uma visão unificada dos dados existentes, levando a uma maior agilidade da empresa, integração simplificada e por fim, maior rentabilidade”.

De acordo com o Gartner, em 2010, o mercado de MDM foi avaliado em $1,5 bilhões de dólares, indicando um crescimento de 14% em relação a 2009. Os analistas prevêm que esse crescimento continuará aumentando (18% CAGR), alcançando $2,9 bilhões em 2014, “mesmo através da pior recessão global”. A companhia adiciona que “por volta de 2015, 10% das implementações de MDM serão entregues como serviço (SaaS – Software as a Service) na nubem pública” e recomendam isso especialmente para as empresas que não possuem estas habilidades. O Gartner confirma o que nós temos sempre mantido: MDM é essencial para qualquer projeto de Gerenciamento de Dados.

O segundo estudo identifica “Nove tendências chave de Data Warehousing para os CIOs em 2011 e 2012“. De acordo com o Gartner, “O Data Warehouse continuará sendo um componente chave na infra-estrutura de TI (…) e como a demanda por business intelligence (BI) e a grande categoria de business analytics tendem a crescer, otimização, designs fexíveis e estratégias alternativas irão se tornar mais importantes.” Se o data warehouse é ainda um componente estratégico da infra estrutura de TI, então ele é a carga do maior repositório de dados da empresa! E carregar o data warehouse significa otimização de dados e integração entre aplicações. Aqui, eu vejo boas perspectivas para o Talend: com a aquisição do Sopera, nós somos agora capazes de trabalhar com sinergias de dados e integração de aplicações que irão auxiliar empresas a otimizar a circulação de dados em seus sistemas de informação e, consequentemente, prosperar.

Irei finalizar este artigo mencionando outro bom artigo relacionado, “5 caminhos para uma nova integração de dados” (em inglês), publicado por Seth Grimes na Information Week. Este artigo começa com uma declaração que muitos analistas já sabem: “Integração de Dados fará história em 2011”. O autor explica que além das tecnologias de ETL e ELT, o mercado irá oferecer inovações que irão auxiliar a atender melhor as necessidades dos clientes, enquanto aumentará as facilidades para o usuário: mashups, integrações semânticas e perfis de dados.

Este artigo é uma tradução deste post no blog oficial da Talend, escrito pelo Yves Bertrand em 22/02/2011.

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.

Requisitos para execução do Talend

Antes de prosseguirmos para a prática, este artigo apresentará os requisitos para utilização do Talend Open Studio e os produtos da edição Talend Integration Suite.

Requisitos de memória primária (RAM):

Produto Cliente/Servidor Qtd. Recomendada
Talend Integration Suite Administration Center Servidor 1GB
Commandline Servidor 1GB
JobServer Servidor 4GB+
Talend Integration Suite Studio Cliente 1GB no mínimo, 4GB recomendados
Talend Open Studio, Open Profiler ou MDM Cliente 512MB**

Requisitos de memória secundária (discos rígidos):

Produto Cliente/Servidor Qtd. Recomendada
Talend Integration Suite Administration Center Servidor ~50MB (cache)
Commandline Servidor 1GB+
JobServer Servidor 3MB mais o tamanho do projeto = 100MB+
Talend Integration Suite Studio Cliente 1GB+
Talend Open Studio, Open Profiler ou MDM Cliente ~400MB**

Compatibilidade com sistemas operacionais:

Sistema Operacional Talend Integration Suite Administration Center / CommandLine Talend Integration Suite Studio JobServer
IBM AIX (32bits / 64 bits) Sim Sim Sim
SUN SOLARIS 64bits Sim Sim Sim
WINDOWS XP Sim Sim Sim
WINDOWS VISTA (32bits/64 bits) Sim Sim Sim
WINDOWS 7 (32bits / 64 bits) Sim Sim Sim
WINDOWS 2003 SERVER (32bits/64bits) Sim Sim Sim
GNU/LINUX Sim Sim Sim

Sun Microsystems (JDK or JRE) JVM 1.5+ (versão 1.6+ recomendada) http://java.sun.com/javase/downloads/index.jsp as suites TIS Studio (Talend Integration Suite Studio), TOS (Talend Open Studio) e TOP (Talend Open Profiler) necessitam apenas da JRE (Java Runtime Enviroment), enquanto o MDM (Master Data Management) necessita da JDK (Java Development Kit).

Particularmente recomendo a execução das versões studio em um ambiente com no mínimo 1 GB de memória RAM, Linux ou Windows, e devido a falta de informações a respeito do processamento mínimo, sugiro Intel dual core ou compatível, para que possa experimentar os recursos multithread.

** -> Há divergência/carência de informações a respeito.

Fontes: Talend Integration Suite Installation Guide
Talend Forum – Generic Information regarding Talend

Comparativo das edições Talend

Comparativo das edições do software de ETL e Integração de dados Talend, contemplando as edições TOS (Talend Open Studio) e as versões da edição TIS (Talend Integration Suite) Team, Professional, RTx, Enterprise e MPx:

Característica TOS TIS
Team Pro RTx Ent MPx
Business Modeler Sim Sim Sim Sim Sim Sim
Job Designer Sim Sim Sim Sim Sim Sim
Metadata manager Sim Sim Sim Sim Sim Sim
400+ components available Sim Sim Sim Sim Sim Sim
Basic wizards (databases, files) Sim Sim Sim Sim Sim Sim
Change management with Job comparison Não Sim Sim Sim Sim Sim
Import Talend Exchange components Sim Sim Sim Sim Sim Sim
Impact analysis Não Sim Sim Sim Sim Sim
Data lineage Não Sim Sim Sim Sim Sim
Change Data Capture (Publish & Subscribe) Não Sim Sim Sim Sim Sim
Business rules driven integration (JBoss BRMS) Não Não Sim Sim Sim Sim
Advanced wizards (SAP, WSDL) Não Sim Sim Sim Sim Sim
Data preview Não Sim Sim Sim Sim Sim
Joblets Não Sim Sim Sim Sim Sim
Auto documentation Sim Sim Sim Sim Sim Sim
Metadata import Não Sim Sim Sim Sim Sim
Referenced projects Não Sim Sim Sim Sim Sim
Shared repository with check in/out Não Sim Sim Sim Sim Sim
Access right management Não Sim Sim Sim Sim Sim
User management with LDAP directory Não Sim Sim Sim Sim Sim
Store metadata & projects in SVN Não Sim Sim Sim Sim Sim
Store metadata & projects in existing SVN Não Não Não Não Sim Sim
Project audit Não Não Sim Sim Sim Sim
Expose Job as a web service Sim Sim Sim Sim Sim Sim
Command line options Não Sim Sim Sim Sim Sim
Time-based scheduling Não Sim Sim Sim Sim Sim
Event-based scheduling Não Não Sim Sim Sim Sim
Distant run Não Não Sim Sim Sim Sim
Grid management (load balancing & failover) Não Não Não Não Sim Sim
High availability Não Não Não Não Sim Sim
Native Hadoop support Não Não Não Não Não Sim
Highly scalable FileScale technology Não Não Não Não Não Sim
Massively Parallel architecture Não Não Não Não Não Sim
SOA manager Não Não Não Sim Sim Sim
Data services & data integration services Não Não Não Sim Sim Sim
Activity Monitoring Console Não Sim Sim Sim Sim Sim
Activity Monitoring Dashboard Não Não Sim Sim Sim Sim
Error recovery management Não Não Sim Sim Sim Sim
Real-time execution reporting and statistics Não Não Sim Sim Sim Sim
Community-based: forums, Bugtracker… Sim Sim Sim Sim Sim Sim
Access to Talend technical support Sim Sim Sim Sim Sim Sim
Documentation Sim Sim Sim Sim Sim Sim
Premium service levels Não Sim Sim Sim Sim Sim
Open Source GPL license Sim Não Não Não Não Não
Access to source code Sim Sim Sim Sim Sim Sim
Subscription license Não Sim Sim Sim Sim Sim
Indemnification Não Sim Sim Sim Sim Sim

Business Modeler: O Business Modeler é uma ferramenta não técnica (como o Microsoft Visio). Ele auxilia a estruturação de toda a documentação relevante e elementos técnicos que suportarão o processo de integração de dados em um diagrama de negócios amigável permitindo que times diferentes (Usuários, Desenvolvimento, Testes, Produção…) trabalhem em um modelo comum, usando uma ferramenta comum. Por exemplo, usuários do negócio usam modelos de negócio para expressar suas necessidades. Os times de TI podem então compreender melhor essas necessidades e traduzirem em processos técnicos (Jobs). Depois de cada estágio de implementação técnica (job) completo, o modelo de negócio pode ser facilmente atualizado, exibindo o progresso do desenvolvimento para cada participante do projeto.Administradores de bancos de dados podem usar modelos de negócio para compartilhar os metadados das conexões com os bancos de dados e arquitetos do sistema podem ter uma imagem dos requisitos em termos de integração de dados.

Job Designer: O Job Designer fornece tanto uma visão gráfica como funcional do processo de integração usando uma paleta gráfica de componentes e conectores. Processos de integração são construídos pelo simples “arrastar e soltar” de componentes e conectores no espaço gráfico, desenhando conexões e configurando suas propriedades.O Job Designer fornece acesso, através de uma grande biblioteca de componentes, a todos os tipos de origens e destinos necessários à integração de dados, migração de dados ou processos de sincronização. Componentes e conectores cobrem todos os tipos de tarefas e operações sobre os dados em si, sobre o gerenciamento de dados bem como sobre o fluxo de dados. Conexões auxiliam o acesso a todas as fontes de dados e sistemas de destino para integração de dados, migração de dados e sincronização de dados. Parâmetros são configurados em uma “visão” exibida para cada componente selecionado no job ou podem ser herdadas do “Metadata manager” (Repositório). Para manter a legibilidade dos Jobs, há a possibilidade de criação de subjobs, organizando os mesmos em jobs que gerenciarão a sequência de sua execução. Componentes do tipo “orchestration” bem como vários tipos de relacionamentos entre componentes (como onSubJobError ou onSubjobOk) auxiliam a criação de sequências para execução do processo. Uma visão em console permite monitorar a execução dos jobs, verificando sua performance diretamente do Studio.

Metadata manager: O Metadata Manager (Gerenciador de metadados) permite armazenar e gerenciar os metadados das conexões no repositório. O Repositório centraliza todas as informações do projeto e garante consistência em todos os processos de integração.Meta Informações relacionadas aos sistemas de origem e destino dos processos de integração são facilmente carregadas no Metadata Manager através de um sistema avançado composto por vários assistentes. O Metadata Manager é baseado em um modelo relacional aberto, onde as dependências de trabalho podem ser facilmente identificadas, facilitando a manutenção dos jobs. Dados contextuais, tais como detalhes de conexões com bancos de dados ou caminhos de arquivo também podem ser centralizados no Metadata Manager, facilitando sua utilização e atualização. A estrutura de dados de qualquer fonte ou sistema de destino também pode ser facilmente recuperada e intepretada em forma de esquema, que é reutilizado para todos os tipos de operaão de dados em todos os seus processos de integração. Peças complementares de códigos, rotinas ou métodos também podem ser unificados no repositório, facilitando o reuso e refatoração das peças do processo.

400+ components available: Todas as versões do Talend possuem mais de 400 componentes disponíveis para a criação de processos de integração de dados e ETL, tais como componentes para conexão a fontes de dados e diversos outros envolvidos no processamento dos jobs. Além dos diversos disponibilizados nativamente pela ferramenta, há também a possibilidade de download de vários outros criados pela comunidade de usuários, através do Talend Exchange. Alguns componentes não estão disponíveis para as versões gratuitas do Talend, como por exemplo os componentes de CDC (Change Data Capture) e acesso a sistemas SAP.

Basic wizards (databases, files): Diversos assistentes posibilitam criar e gerenciar conexões a arquivos, bancos de dados e outros sistemas.

Change management with Job comparison: O Job Compare ajuda a identificar diferenças entre dois jobs ou mesmo duas versões de um mesmo job.Esta funcionalidade é totalmente integrada no Talend Integration Suite Studio. O resultado da comparação dos jobs é um relatório visual e interativo em html ou xml onde as diferenças são destacadas.

Import Talend Exchange components: Através do Talend Exchange é possível ter acesso a dezenas de outros componentes que não são disponibilizados junto da suite por padrão, além de jobs desenvolvidos por usuários da comunidade. Dentre estes, alguns exemplos são componentes para geração de documentos PDF, entrada de dados a partir de tabelas HTML e validação de endereços através do Google Maps, ou jobs para geração de dimensões de tempo. Estes componentes e jobs podem ser obtidos tanto a partir da “visão” Talend Exchange, nativa da ferramenta, quanto a partir do site http://www.talendforge.org/exchange, para serem adicionados ao diretório de componentes da ferramenta manualmente.

Impact analysis: A Análise de Impacto auxilia a compreensão de quais seriam as consequências de uma mudança. Esta característica é disponível no Metadata Manager (ou Gerenciador de Metadados). É possível realizar uma análise de impacto em qualquer coluna de qualquer metadado (banco de dados, etc.). O resultado de uma análise de impacto é exibido em um relatório gráfico e interativo onde é possível rastrear a coluna e visualizar todas as operações aplicadas a ela, da origem ao destino, através do Job. É possível exportar este relatório para um arquivo HTML.

Data lineage: O Data Lineage funciona como uma linha do tempo, permitindo visualizar onde uma alteração ocorreu. Esta característica é disponível pelo Metadata Manager (ou Gerenciador de Metadados) e pode ser executada em qualquer coluna de qualquer metadado (banco de dados, arquivo, etc.). O resultado da linha de tempo dos dados é exibido em em relatório que traça as mudanças do alvo.

Change Data Capture (Publish & Subscribe): A habilidade de capturar apenas os dados atualizados em tempo real é conhecida como Change Data Capture (CDC). Capturar apenas alterações reduz o tráfego de dados entre sistemas e ajuda a reduzir o tempo do ETL. A arquitetura CDC do Talend é baseada em um modelo editor/assinante (publisher/subscriber). O editor captura as alterações de dados e as disponibiliza para os assinantes (Jobs Talend). Os assinantes utilizam os dados alterados obtidos dos publishers. Esta característica detectas registros alterados em tempo real, permitindo que os dados alterados sejam enviados imediatamente para os jobs assinantes consequentemente reduzindo o tempo necessário para a carga e atualização de dados durante o ETL ou integração de dados. O CDC do Talend apresenda dois modos mais utilizados: Trigger (gatilho) e logs de repetição (redo). Os modos disponíveis dependem do dipo de banco de dados.

Business rules driven integration (JBoss BRMS): Regras de negócio são geralmente definidas pelos usuários do negócio através de documentos de especificação que são então interpretados pelo corpo técnico. O Talend Integration Suite possui embutido um motor que auxilia usuários a configurar suas próprias regras de negócio. Os usuários podem então definir critérios de segmentação de mercado (ex.: por idade, região) e estabelecer suas regras de negócio através de uma planilha Excel ou através da interface Drools Guvnor diretamente no Talend Administration Center. A interface Drools Guvnor permite que os experts do negócio usem um editor gráfico para criar e editar regras rápida e diretamente, controlar acessos a regras e outras características, gerenciar versões de regras e modificações através do tempo. Regras podem ser testadas e chamadas a partir dos jobs desenvolvidos.

Advanced wizards (SAP, WSDL): As edições do TIS – Talend Integration Suite – contam com assistentes avançados que permitem o gerenciamento de conexões a web services (WSDL) e outros sistemas como SAP e HL7.

Data preview: Durante o desenvolvimento de Jobs, pode ser necessário visualizar o conteúdo das diversas origens ou sistemas destino (arquivos, bancos de dados, etc.). O Data Viewer auxilia na visualização dos dados destes sistemas independente da aplicação usualmente necessária para abrí-los: Editores de texto, ferramentas para execução de consultas SQL, MS Excel, Navegadores, etc. Não há necessidade de possuir várias ferramentas e nenhuma necessidade de acessar os sistemas onde os dados se encontram, o Data Viewer utiliza os caminhos de origem/destino configurados para seguir para os dados verdadeiros. O Data Viewer economiza uma quantidade significativa de tempo já que é diretamente acessível pelo Studio, através de um simples clique-direito em qualquer componente. É uma maneira conveniente de visualizar os dados contidos nos sisteemas de origem/destino independente do formato (txt, csv, xls, etc.) durante o desenvolvimento de um processo de integração.

Joblets: Joblets auxiliam na fatoração de uma parte de um Job (ou subjob) em um componente Joblet, bastando selecionar os componentes formando a parte do Job que se deseja reutilizar e clicar em “Refactor to Joblet”. Automaticamente o desenho do job é simplificado, visto que os componentes selecionados são reduzidos em um único componente. Este componente Joblet pode ser compartilhado através do diretório de Joblets na paleta de componentes e é então facilmente reutilizável em qualquer Job. Joblets simplificam drasticamente a manutenção de jobs complexos e redundantes.

Auto documentation: Esta característica auxilia na geração automaticamente uma abrangente e extensa documentação para todos os jobs. Esta documentação técnica está sempre atualizada e versionada junto dos jobs: tão logo um job é salvo, a documentação será atualizada e salva no repositório portanto estará disponível para todos os usuários. Esta documentação pode ser extendida através de componentes. Todos os componentes possuem um painel de Documentação em suas configurações, onde é possível adicionar comentários customizados. Estes comentários serão levados em conta e destacados na documentação gerada. Além do mais, é possível customizar a aparência gráfica da documentação adicionando o logomarca e nome da empresa, ou alterando cores usando um arquivo CSS customizado.

Metadata import: O Talend Integration Suite Studio permite a migração de metadados de qualquer aplicação para os metadados do Studio. Dentro do nó Metadados (ou Metadata) na visualização em árvore do Repositório, é possível importar metadados de arquivos CSV de uma aplicação externa. Esta opção é disponível apenas para conexões com bancos de dados e arquivos delimitados.

Referenced projects: Os projetos referência ajudam a evitar duplicação (copiar-colar) de itens (Jobs, Rotinas, Documentação, Metadados) entre projetos. Projetos “escravo” são ligados a um (ou mais) projetos “mestre” por referência e portanto herdam itens dos projetos pai. Os recursos vindos do projeto mestre aparecem no projeto escravo no modo apenas leitura: estão disponíveis para reuso e execução mas não podem ser modificados. Graças à forte ligação que é estabelecida entre projetos escravos e mestres, assim que atualizações forem feitas nos projetos mestre, o projeto escravo será atualizado.

Shared repository with check in/out: O Repositório Compartilhado é desenhado para consolidar todas as informações do projeto e metadados da empresa em um repositório compartilhado por todos os envolvidos no processo de integração. No Studio usuários tem acesso garantido para projetos de acordo com seus papéis e permissões definidos no Talend Administration Center. O Repositório Compartilhado permite trabalho em equipe e colaboração entre todos os envolvidos em um projeto de integração. Ele auxilia a armazenar e compartilhar todos os itens do Talend: Modelos de negócio, Jobs (processos), Joblets, Rotinas, Metadados (tais como conexões a sistemas de origem e destino). Por trás do Repositório Compartilhado está um gerenciador de versões Subversion que permite o armazenamento e gerenciamento de versões de todos os items. Um sistema de travas auomático garante que um job que está sendo desenvolvido esteja efetivamente travado e nenhum outro usuário possa alterar o mesmo job ao mesmo tempo. A partir da versão 4.0, o Talend aderiu completamente ao poder do versionador Subversion, permitindo lidar com diferentes “branches”, check in/check out, commit manual ou automático, comentários, etc.

Access right management: Através do Talend Administration Center é possível gerenciar as permissões dos usuários. Na página de autorizações será possível permitir que um usuário acesse um ou mais processos e especificar seu nível de acesso como apenas leitura ou leitura e escrita.

User management with LDAP directory: O Talend Administration Center possibilita o gerenciamento de usuários e permissões através do protocolo LDAP. O LDAP, Lightweight Directory Access Protocol, é um protocolo para atualizar e pesquisar diretórios rodando sobre TCP/IP. O LDAP é uma definição de protocolo para acesso a bancos de dados especializados chamados diretórios. É similar ao SQL no sentido que é uma linguagem para interagir com bancos de dados sem especificar um banco de dados particular. De fato, o banco de dados de suporte ao LDAP é quase sempre um sistema RDBMS geral, como o LDBM ou o Oracle. Nas diversas tecnologias que empresas de médio e grande porte utilizam hoje em dia, uma área para autenticação é exigida por praticamente todos os sistemas, o que pode muitas vezes ocasionar uma variada quantidade de cadastro de usuários replicados entre os sistemas. Como solução, um servidor de diretórios como o Open LDAP ou MS Active Directory recebe autenticação dos muitos sistemas; o protocolo LDAP serve justamente para outras aplicações quaisquer da empresa se conectarem e consultarem um servidor de diretórios.

Store metadata & projects in SVN: As edições do Talend Integration Suite permitem o armazenamento de metadados e projetos como um todo em um servidor SVN Subversion.

Store metadata & projects in existing SVN: As edições do Talend Integration Suite permitem o armazenamento de metadados e projetos como um todo em um servidor SVN Subversion. Porém, há uma diferença contratual, que restringe a utilização de um servidor SVN existente nas edições Team, Professional e RTx. Desta forma, caso deseje utilizar um SVN próprio, o cliente deverá optar pelas edições Enterprise ou MPx.

Project audit: O Talend Project Audit transforma os fluxos de dados de um projeto em informações valiosas para o negócio. Seu objetivo é disponibilizar sólidas avaliações quantitativas e qualitativas para suporte a decisões orientadas ao processo. A auditoria de projetos é o processo de coletar e avaliar informações sobre operações em jobs desenvolvidos no Studio. A avaliação das informações obtidas determina se os processos técnicos e fluxos de dados utilizados no projeto auditado estão operando eficientemente para alcançar os objetivos do projeto. Os resultados da auditoria são apresentados em relatórios imprimíveis gerados para disponibilizar vários dados relacionando áreas diferentes do projeto auditado.

Expose Job as a web service: Todas as edições Talend podem exportar seus Jobs como Web services. O usuário pode então expô-los em um servidor de aplicação como Apache Tomcat ou JBoss. As edições Talend que possuem SOA Manager possibilitam a exposição de processos (Jobs) como serviços (Web services), permitindo sua implantação em quaisquer aplicações e sistemas heterogêneos utilizando vínculos SOAP (Simple Object Access Protocol).

Command line options: O command line é um aplicativo que está instalado no mesmo computador que o WebApplication para gerar código Java a partir de arquivos XML armazenados no banco de dados do repositório. Esta aplicação permite que usuário acesse os mesmos comandos do TIS Client usando uma interface de comando. Através deste podemos: exportar e importar metadados, executar jobs gravados no repositório do banco de dados, criar projetos, mudar status ou versões dos jobs, etc. O command line pode ser iniciado como: – Server: o aplicativo espera por comandos para executar em um computador remoto. – Shell: o usuário executa a sequência de comandos. – Standalone application: o aplicativo executa um comando. Isso é interessante, por exemplo para gravar em um arquivo uma lista de comandos e lançá-lo neste modo.

Time-based scheduling: Faz o agendamento da execução do Job que pode ser definido com valores absolutos como data e hora, ou tempo relativo, como intervalos de tempo. Usando parâmentros como: (nome do projeto, nome do job, versão do job, servidor…). E essa execução pode ser gerenciada pelo Job Conductor, presente no Talend Administration Center.

Event-based scheduling: Funciona como uma extensão do Time-based scheduling. Onde este funciona através de trigger(s), como um evento, seja monitorando um diretório para o aparecimento de um arquivo, ou mesmo sua modificação, ou uma base de dados, usando a condição “wait for”.

Distant run: Disponibiliza a execução remota de Jobs em qualquer computador, o que torna útil para testar os Jobs desenvolvidos em diferentes meios, como sistemas, bancos, etc… Através do alvo (Target) se faz possível a seleção dinâmica para a execução.

Grid management (load balancing & failover): O módulo Grid Conductor (acessível através do Job Conductor) otimiza a escalabilidade e disponibilidade dos processos de integração garantindo um uso otimizado do grid de execução. O Grid Conductor baseia-se na definição de servidores virtuais, os quais agrupam recursos disponíveis, independente do tipo de sistema (CPU, Sistema Operacional). Tarefas são atribuídas a servidores virtuais do Grid Conductor ao invés de a um único servidor de execução. Através do constante monitoramento dos recursos disponíveis nos servidores de execução, o Grid Conductor garante que todos os jobs executem sem problemas no tempo do disparo (triggering time) utilizando todos os recursos disponíveis, removendo os gargalos criados pela abordagem de um único servidor tradicional. Isto alivia qualquer prooblema relacionado a prioridades quando um grande número de jobs são executados concorrentemente, ou quando servidores não dedicados são utilizados. O Grid Conductor também disponibiliza controle de falhas (fail-over) quando um recurso se torna indisponível.

High availability: Através desta característica se torna possível o deploy de múltiplos Job Conductors e a execução de Job Servers. Isso garante duas fontes de execução, estando uma em standby (failover), previnindo contra o fim da execução. Ou seja, na falha do primeiro, o segundo será iniciado.

Native Hadoop support: Apache Hadoop é um framework Java livre que suporta uma grande massa da dados. Este também usa a arquitetura MapReduce o que permite o trabalho com milhares de nós e grande volume de dados. (ver FileScale)

Highly scalable FileScale technology: FileScale ordena e transforma dados usando inovadores algoritmos matemáticos de alta-performance para o processamento de dados. Este quebra qualquer processo em um número maior de pequenos processos, melhorando a performance. Basicamente, funciona através dedois passos, Map e Reduce. Onde no Map “quebra” o problema inicial em sub-problemas mais simples, o que é feito recursivamente até atingir um baixo-nível de algoritimos para a solução dos pequenos problemas nas folhas da árvore que será formada neste primeiro passo. Assim no segundo, esses nós são utlizados contendo as soluções para os problemas menores, permitindo o processamento em paralelo no nível em que o número de processadores e outros recursos permitirem.

Massively Parallel architecture: É o trabalho com uma quantidade massiva de dados, algo como Petabytes de informação. E para lidar com isso a arquitetura paralela foi idealizada. Talend Integration Suite MPx com seus componentes de FileScale e Hadoop é o mais preparado para a tal tarefa. (ler Native Haddop e Highly FileScale). Visitar (bom exemplo de teste de execução): http://blogs.sun.com/aja/entry/talend_s_new_data_processing

SOA manager: SOA Manager oferece graficamente via Web browser a possibilidade de exposição de jobs como serviços (Web Services), possibilitando o deploy automático para diversas applicações e sistemas diferentes usando SOAP – Simple Object Access Protocol.

Data services & data integration services: A prática de integração de dados abrange uma ampla gama de ofertas de serviços, incluindo ETL, a integração operacional, gerenciamento de dados mestres (MDM), migração de dados, gerenciamento de metadados, otimização de performance e limpeza de dados. Com um conjunto de serviços deste abrangente, assim com Talend é possível criar a integração de dados para atender as necessidades.

Activity Monitoring Console: O AMC – Activity Monitoring Console é uma ferramenta de supervisão em uma interface gráfica conveniente. Ele disponibiliza funcionalidades que podem ser utilizadas para consolidar informações coletadas dos logs, compreender as interações entre Jobs, prever erros que poderiam ser inexperados e suportar decisões de gerenciamento dos sistemas. O AMC monitora eventos dos jobs (sucessos, falhas, avisos, etc.), tempos de execução e volumes de dados através de um único console em um único lugar. Esta ferramenta está disponível como stand-alone ou pode ser totalmente integrada ao Studio.

Activity Monitoring Dashboard: O Dashboard é uma versão Web do Activity Monitoring Console, AMC, que pode ser acessada facilmente através de um navegador Web. O Dashboard disponibiliza diagramas de performance e indicadores de status, possibilitando que qualquer envolvido no projeto visualize tanto o status atual quanto o histórico de qualquer processo de integração.

Error recovery management: Em caso de falha na execução de um job, o processo pode ser reiniciado a partir de um dos checkpoints. Recovery checkpoints podem ser especificados nos intervalos de fluxos de dados (conexões entre componentes). Isso economiza tempo, pelo fato da futura execução do job poder ser iniciada a partir do ponto onde houve o erro. Assim o processo pode ser reiniciado a partir do último checkpoint antes de ocorrer a falha.

Real-time execution reporting and statistics: As empresas de hoje convivem em um mundo onde os dados de poucas horas atrás já está obsoleto e usar solução de baixa latência não é interessante. Para atender a esse ponto fundamental a Talend dispõe de uma arquitetura orientada a Serviços, SOA, LDAP, CDC …

Community-based: forums, Bugtracker…: No TalendForge é possível encontrar uma grande lista de componentes existentes, bem como novos componentes criados por usuários. Um fórum, wiki, tutoriais, blogs, bugtracker, onde é possível reportar erros e falhas para correções em versões futuras. E também um repositório contendo o código fonte da ferramenta, totalmente aberto.

Access to Talend technical support: O acesso ao suporte técnico da Talend se faz presente em todas as edições do TIS, desde que a licença esteja vigorando. Mas já na versão aberta, o suporte é opcional. E este pode ser obtido em três níveis, sendo estes Silver, GOld e Platinum. Indicado nos casos: Silver: Obter suporte técnico da Talend para projetos importantes. Gold: Para projetos mais pesados e com tempo crítico, o suporte técnico tem uma resposta mais rápida e sem limites de incidentes. Platinum: Suporte técnico avançado, dedicado para clientes de contrato Talend Quality Insurance.

Documentation: Há uma extensa gama de documentação disponível para o usuário, através dos manuais da ferramenta, wiki, tutoriais, webinars, white papers, etc.

Premium service levels: Existe um programa Talend que pode ajudár a tirar proveito das melhorias Open Source e integração de dados do valor acrescentado de soluções de Talend. Ser parceiro, é fazer parte de um ecossistema de software fornecendo consultoria de alta qualidade, serviço e suporte aos seus clientes ao redor do mundo. Juntos, Talend e seus parceiros podem atender as necessidades dos clientes atuais e futuros com a mesma plataforma open source de integração de dados. Esta revolução abre novos horizontes e “democratiza” a interoperabilidade das aplicações dos seus clientes. Há uma série de benefícios para parceiros da Talend, como descontos em treinamentos, participação em eventos, entre outros.

Open Source GPL license: Talend segue modelo de software livre, inovador, em uma ferramenta poderosa com flexibilidade para atender o que as organizações precisam. Publicando seu códigos sob GNU Public License ou the Apache License o Talend oferece aos desenvolvedores a possibilidade de melhoria na ferramenta de acordo com suas necessidades.

Access to source code: A Talend disponibiliza no seu site da Talend Forge os códigos fonte para a melhoria por parte dos participantes e contribuintes para a melhoria da ferramenta.

Subscription license: Os softwares da Talend aderem ao modelo de licença de subscrição, ou seja, a licença estará em vigor enquanto existir um contrato para o suporte. Logo, valores e opções de licença dependerão da edição a ser contratada e do tipo de suporte desejado.

Indemnification: A indenização no caso de dano causado ao projeto por mau funcionamento da ferramenta se faz presente em todas as versões pagas- TIS.