PONTIFICIA UNIVERSIDADE CATÓLICA DO PARANÁ Elaine Letícia Camargo do Nascimento Tatiane Araujo Muniz Avaliando Ferramentas ETL Para Aplicação em casos de Migração entre SGBD CURITIBA 2011 Elaine Letícia Camargo do Nascimento Tatiane Araujo Muniz Avaliando Ferramentas ETL Para Aplicação em casos de Migração entre SGBD Trabalho de Conclusão de Curso Apresentado como requisito parcial para conclusão da Especialização em Banco de Dados, Pontifícia Universidade Católica do Paraná. Orientador: Prof. Marcelo Dalagassa CURITIBA 2011 Agradecimentos Primeiramente agradecemos a Deus pela oportunidade de termos concluído mais este desafio. Agradecemos também aos nossos familiares por todo o apoio, principalmente aos nossos companheiros e filhas por toda a paciência nas horas que tivemos que nos ausentar para estudos ou preparação de trabalhos. Nossos sinceros agradecimentos aos professores pelo conhecimento compartilhado e também ao nosso professor orientador Marcelo Dalagassa pela disponibilidade e por todas as dicas e sugestões. LISTA DE ILUSTRAÇÕES Figura 1 - Representação de um sistema de banco de dados ................................................... 15 Figura 2 – Representação do processo de ETL ............................................................................ 22 Figura 3 – Representação do processo de Extração ................................................................... 23 Figura 4 – Representação do processo de transformação.......................................................... 24 Figura 5 – Representação do processo de carga ......................................................................... 26 Figura 6 - Modelo Relacional Reduzido .......................................................................................... 31 Figura 7 - Datastage extração tabela pessoa ................................................................................ 39 Figura 8 - Datastage configuração Oracle...................................................................................... 40 Figura 9 - Datastage extração tabela edificacao ........................................................................... 41 Figura 10 - Datastage Job de Transformação 1 ............................................................................ 41 Figura 11 - Datastage meta dados .................................................................................................. 42 Figura 12 - Datastage Job de Transformação 2 ............................................................................ 43 Figura 13 – Datastage Job de Agregação ...................................................................................... 43 Figura 14 - Talend conexão com banco Oracle............................................................................. 44 Figura 15 - Talend estágio de Input Oracle .................................................................................... 44 Figura 16 - Talend conexão com banco PostgreSQL................................................................... 45 Figura 17 - Talend Job Extração Pessoa ....................................................................................... 46 Figura 18 - Talend Extração tabela edificacao .............................................................................. 46 Figura 19 - Talend estágio de Join - chaves .................................................................................. 47 Figura 20 - Talend Job de Transformação 1 .................................................................................. 48 Figura 21 - Talend estágio de agregação ....................................................................................... 48 Figura 22 - Talend Job de agregação ............................................................................................. 49 Figura 23 - Apatar conexão com banco Oracle ............................................................................. 50 Figura 24 – Apatar mapeamento de colunas ................................................................................. 50 Figura 25 - Apatar Extração tabela pessoa .................................................................................... 51 Figura 26 - Talend Extração tabela edificacao .............................................................................. 52 Figura 27 - Apatar Job de Transformação 1 .................................................................................. 53 Figura 28 - Apatar job de agregação............................................................................................... 54 Figura 29 – Qualidade de Uso ............................................................................................................... 55 Gráfico 1 – Efetividade ...................................................................................................................... 57 Gráfico 2 – Produtividade .................................................................................................................. 59 Gráfico 3 – Segurança ....................................................................................................................... 60 Gráfico 4 – Satisfação ....................................................................................................................... 61 LISTA DE TABELAS Tabela 1 – Quantidade de Registros por tabela ............................................................................ 28 Tabela 2 – Tabela Imovel_Avaliado ................................................................................................ 29 Tabela 3 – Comparação Tipos de Dados entre Oracle e PostgreSQL ...................................... 29 Tabela 4 – Comparação entre Oracle e PostgreSQL ................................................................... 30 Tabela 5 – Seleção entre Métricas .................................................................................................. 53 LISTA DE ABREVIATURAS E SIGLAS ACID - Atomicidade, Consistência, Isolamento e Durabilidade DDL - Data Definition Language DW - Data Warehouse ETL - Extract, Transform and Load ODBC - Open Data Base Connectivity ORD - Object Relational Database ORDBMS - Object Relational Database Management System PL/SQL - Procedural Language/Structured Query Language SGBD - Sistemas Gerenciadores de Banco de Dados SGBDOR - Sistema Gerenciador de Banco de Dados Objeto Relacional SGC - Sistema de Gestão Cadastral SQL - Structured Query Language RESUMO O relato de caso de migração entre sistemas gerenciadores de banco de dados avaliando ferramentas de ETL foi elaborado para servir como um instrumento de apoio aos profissionais da área na escolha de ferramentas para migração e transformação de dados em geral. Foi desenvolvida uma metodologia para avaliação das ferramentas, onde uma seleção entre as tabelas do banco do sistema atual foi feita baseada no volume e tipos distintos de dados. Após a seleção das tabelas, optamos pelas ferramentas de ETL que iríamos avaliar. Tomamos a decisão de escolher ferramentas com licenças pagas, e duas ferramentas de software livre, O Talend e o Apatar. O Datastage é uma ferramenta bem conhecida no mercado, enquanto as outras estão se estabelecendo no mercado e ganhando cada vez mais clientes. As ferramentas de ETL foram avaliadas usando como guia as normas sobre qualidade de produto de software ISO/IEC 9126 e 14598 – 2000. Avaliamos a qualidade em uso através da efetividade, produtividade, segurança e satisfação, isso com o objetivo de dizer o quanto o produto de software atende ou não a necessidade de um usuário. Palavras-chave: ETL, Banco de Dados, qualidade de software, Migração de dados ABSTRACT The Migration case report between data base management systems evaluating ETL tools was elaborated to support the professionals to choose a tool to migrate and transform general data. It was developed a methodology to evaluate the tools, a selection between the tables in the current data base was based on the volume and distinct types of data. After the table selection, we chose the tools that we were going to evaluate. We decided to use commercial license tools and two open source tools, Talend and Apatar. Datastage is a well known tool while the others are still being established in the market and getting more and more clients. The ETL tools were evaluated using software engineering - product quality guide ISO/IEC 9126 and 14598 - 2000. We have evaluated the quality of usage through effectiveness, productivity, security and satisfaction, the objective was to tell how much the software product meets or not the user’s requirement. Keywords: ETL, Data Base, software quality, data migration SUMÀRIO 1. INTRODUÇÃO .......................................................................................................... 11 2. OBJETIVOS ............................................................................................................. 12 2.1 OBJETIVO GERAL ............................................................................................... 12 2.2 OBJETIVOS ESPECÍFICOS ................................................................................. 12 3. REVISÃO BIBLIOGRÁFICA ..................................................................................... 13 3.1 Banco de Dados................................................................................................... 13 3.2 Sistemas Gerenciadores de Banco de Dados - SGBD ...................................... 14 3.3 Oracle ................................................................................................................... 15 3.3.1 Descrição ............................................................................................. 15 3.3.2 História ................................................................................................. 16 3.3.3 Versões ................................................................................................. 16 3.3.4 Características ..................................................................................... 17 3.4 Postgresql ............................................................................................................ 18 3.4.1 Descrição ............................................................................................. 18 3.4.2 História do PostgreSQL ...................................................................... 18 3.4.3 Versões ................................................................................................. 19 3.4.4 Características ..................................................................................... 19 3.5 Extração, Transformação e Carga (ETL – Extract, transform, load) ................ 21 3.5.1 Extração ............................................................................................... 22 3.5.2 Transformação ..................................................................................... 24 3.5.3 Carga .................................................................................................... 25 3.6 Software Livre ...................................................................................................... 26 3.6.1 Código Aberto (Open Source) ............................................................ 27 3.6.2 Domínio publico................................................................................... 27 3.6.3 Software protegido com copyletf ....................................................... 27 3.6.4 Software livre e não protegido com copyleft .................................... 27 3.6.5 Software semi-livre .............................................................................. 28 3.6.6 Software proprietário .......................................................................... 28 3.6.7 Freeware ............................................................................................... 28 3.6.8 Shareware ............................................................................................ 28 3.6.9 Commercial Software .......................................................................... 28 3.6.10 GNU General Public License (Licença Pública Geral) ...................... 29 3.7 4. Software livre de Banco de Dados ........................................................ 29 METODOLOGIA ....................................................................................................... 30 4.1 Modelo do Experimento ...................................................................................... 30 4.1.1 Modelo de Dados proposto................................................................. 30 4.1.2 Tabelas e Volume de dados ................................................................ 31 4.1.3 Extrações e Transformações propostas ........................................... 31 4.1.4 Estudo comparativo entre Oracle e PostgreSQL .............................. 32 4.2 Escolha das ferramentas ETL ............................................................................. 34 4.2.1 Datastage ............................................................................................. 34 4.2.2 Talend ................................................................................................... 35 4.2.3 Apatar ................................................................................................... 37 4.3 Experimento ......................................................................................................... 38 4.3.1 Datastage ............................................................................................. 39 4.3.2 Talend ................................................................................................... 43 4.3.3 Apatar ................................................................................................... 49 4.4 Resultados ........................................................................................................... 54 4.4.1 Avaliação das Ferramentas ............................................................................. 54 4.4.2 Efetividade ........................................................................................................ 57 a) Log de erro de fácil compreensão: ........................................................................ 57 b) Possui GNU General Public License – Software livre: ......................................... 57 c) Operador Join suporta mais que duas tabelas: .................................................... 57 d) Possui diversos tipos de operadores como join, filter:........................................ 58 e) Conexão ODBC genérica: ....................................................................................... 58 f) Faz conexão com a maioria dos bancos de dados:.............................................. 58 g) Faz diversos tipos de agregações: ........................................................................ 58 h) Diferentes plataformas: .......................................................................................... 58 i) Sem necessidade de codificação: ......................................................................... 59 j) Fácil utilização: ....................................................................................................... 59 4.4.3 Produtividade ................................................................................................... 59 4.4.4 Segurança......................................................................................................... 60 4.4.5 Satisfação ......................................................................................................... 61 5. CONSIDERAÇÕES FINAIS ...................................................................................... 63 6. REFERÊNCIA ........................................................................................................... 64 7. ANEXOS ................................................................................................................... 67 ANEXO A – DDL Tabelas usadas no experimento ....................................................... 67 ANEXO B – Ferramenta Ora2pg .................................................................................... 77 11 1. INTRODUÇÃO O presente trabalho tem como proposta apresentar diferentes ferramentas de ETL utilizadas durante as fases de migração e transformação de dados entre os Bancos de Dados Oracle e PostgreSQL. A solicitação da migração veio da Prefeitura Municipal de Joinville, que necessita se adequar à política governamental de uso do software livre. Cada Banco de dados possui particularidades, vantagens e desvantagens. Não faz parte do escopo desse trabalho definir qual dos bancos é o melhor, ou mais eficiente para ser usado com determinada aplicação. Nossa finalidade é propor uma metodologia eficiente para se efetuar tal migração, avaliando ferramentas de ETL. Um comparativo entre as funcionalidade dos SGBD (sistemas Gerenciadores de Banco de Dados) será traçado. Ressaltaremos as principais diferenças em relação aos tipos de dados, funções e queries, bem como toda e qualquer adaptação se fizer necessária. A aplicação SGC - Sistema de Gestão Cadastral se utiliza do banco de dados Oracle, que possui hoje cerca de cento e trinta oito tabelas, com quantidade de registros variando entre seis milhões e dez linhas. O Sistema de Gestão Cadastral fica disponível vinte e quatro horas por dia durante os sete dias da semana, porém só é utilizado em dias e horários comerciais. Para realização do comparativo entre ferramentas de ETL, executaremos um piloto, que consiste em pegar um pequeno numero de tabelas, que possuam diversidade no seu tipo de dados, grande quantidade de linhas e estrutura bem definida. Avaliaremos três ferramentas de ETL, Talend, Apatar e Datastage através de uma comparação entre suas funções e facilidades para a migração proposta. Como resultado da comparação, a comunidade poderá optar pela ferramenta que se adeque ao seu caso de uso. 12 2. OBJETIVOS 2.1 OBJETIVO GERAL Este projeto tem como objetivo relatar a experiência de migração e transformação de dados entre os Sistemas Gerenciadores de Banco de Dados Oracle e PostgreSQL, avaliando diferentes ferramentas de ETL. 2.2 OBJETIVOS ESPECÍFICOS • Analisar e comparar aspectos de efetividade, produtividade, segurança e satisfação nas ferramentas para processo de ETL – segundo Willian H Inmon, ETL é um programa de computador ou uma série de procedimentos que são usados para integrar e converter dados de uma determinada aplicação em um formato verdadeiramente amplo; • Levantar características e especificidades de cada um dos bancos; • Levantar características ferramentas de ETL; e especificidades para avaliação de 13 3. REVISÃO BIBLIOGRÁFICA 3.1 Banco de Dados A definição de banco de dados é convenientemente ligada aos antigos sistemas de arquivamento. Um grande armário, com arquivos, ou fichas organizadas de forma alfabética. Um banco de dados é exatamente como um desses armários, aonde as tabelas viram as fichas, e as informações contidas nas fichas, serão os dados contidos em cada uma das tabelas dos bancos de dados. Um sistema de banco de dados é basicamente apenas um sistema computadorizado de manutenção de registros. O banco de dados, por si só, pode ser considerado como o equivalente eletrônico de um armário de arquivamento; ou seja; ele é um repositório ou recipiente para uma coleção de arquivos de dados computadorizados. (DATE, 2003). Ainda segundo C. J. Date, um banco de dados é uma coleção de dados persistentes, usada pelos sistemas de aplicação de uma determinada empresa. Cada autor define banco de dados a sua própria maneira e como dito por Elmasri Navathe, banco de dados é uma coleção de dados relacionados. Os dados são fatos que podem ser gravados e que possuem um significado implícito. Elmasri trouxe junto à definição de banco de dados a definição do que é dado. Alguns autores diferenciam o conceito entre dado e informação, outras tratam ambos com o mesmo conceito. Dados são todos os elementos que servem de base para a formação de opiniões ou para a tomada de decisões. Um dado é apenas um índice, um registro, uma manifestação objetiva, passível de analise, exigindo interpretação da pessoa para sua manipulação. Em si, os dados têm pouco valor, mas quando classificados, armazenados e relacionados entre si, eles permitem a obtenção de informações. A informação apresenta significado e intencionalidade, aspectos que a diferenciam do conceito de dados (FERRARI, 1991). 14 Informação é o dado trabalhado que permite ao executivo tomar decisões. É o resultado do tratamento dos dados existentes acerca de alguém ou de alguma coisa Pode-se definir também a informação como um conjunto de fatos organizados de tal forma que adquirem valor adicional além do valor do fato em si. (CARVALHO, 1993) Pode-se dizer que informação é o dado trabalhado que permite ao gestor tomar decisões. A informação seria o resultado da análise da capacidade de produção, custo de venda de produtos, produtividade dos funcionários etc. Ao serem utilizadas pelos gestores, podem afetar ou modificar o comportamento existente na empresa, bem como o relacionamento entre as suas várias unidades organizacionais (CHESWICK, 2005). O termo Banco de Dados indica um conjunto de dados ou informações gravados em um disco de computador. Muitas vezes confundido com SGBD, que na verdade é software utilizado para controle do Banco de Dados em si. Um banco de dados é usualmente mantido e acessado por meio de um software conhecido como SGBD. 3.2 Sistemas Gerenciadores de Banco de Dados - SGBD Um Sistema Gerenciador de Banco de Dados, é um sistema computadorizado de manutenção de registros; ou em outras palavras, é um sistema computadorizado cuja finalidade geral é armazenar informações e permitir que usuários busquem e atualizem essas informações quando as solicitar (DATE, 2004). A origem comercial desses sistemas se deu por volta de 1960, com base nos sistemas de arquivos. Os sistemas de arquivos eram primitivos, possuíam muitas limitações tecnológicas, uma vez que, toda e qualquer alteração na estrutura de um sistema de arquivo, automaticamente refletia numa alteração de programação. Com o surgimento do armazenamento em discos magnéticos, foi possível a criação de ferramentas (SGBD) capazes de gerenciar e manipular dados da forma mais eficiente. 15 A figura 1 mostra uma visão de um sistema gerenciador de banco de dados, várias aplicações podem acessar e alterar o banco e seus dados, o sistema gerenciador de banco de dados controla o banco, e os usuários finais acessam as informações. Figura 1 - Representação de um sistema de banco de dados Os SGBD evoluíram e passaram a utilizar diferentes formas de representação, ou modelos de dados, para descrever a estrutura das informações contidas em seus bancos de dados. Atualmente, os modelos hierárquico, em redes, relacional e o modelo orientado a objetos são usados. Sendo o modelo relacional o mais utilizado e o proposto nesse trabalho. 3.3 Oracle 3.3.1 Descrição O Oracle é uma ferramenta de gerenciamento de banco de dados, que trabalha com tecnologia cliente/servidor. Portanto, para sua utilização, primeiro, instalamos o servidor e depois a base de dados em si. A Oracle está sempre aperfeiçoando suas versões e adicionando novas funcionalidades. 16 3.3.2 História A história da Oracle se iniciou fim dos anos 70, quando Larry Ellison teve a iniciativa de comercializar um banco de dados relacional. Ellison e os co-fundadores da Oracle, Bob Miner e Ed Oates, perceberam que havia um tremendo potencial de negócios no modelo de banco de dados relacional, mas não se deram conta de que mudariam a face da computação empresarial para sempre. Inicialmente a Oracle foi chamada de software development labs (sdl), uma empresa de consultoria que contava com Bob Miner (Presidente), Ed Oates e Bruce Scott (engenheiros de software) no seu primeiro projeto. Larry Ellison, trabalhava na empresa para a qual a sdl prestava a consultoria. A Oracle é o principal fornecedor de software para gerenciamento de informações e a segunda maior empresa de software independente do mundo. 3.3.3 Versões A Oracle está no mercado há vários anos, e possui uma série de versões. A partir de 1977 o banco Oracle começou a ser desenvolvido. A Cia se torna o primeiro cliente da Oracle. Em 1979 a primeira versão comercial do banco é disponibilizada, este, era escrito em linguagem assembler. Em 1981, começam a surgir às primeiras ferramentas da Oracle, como a iaf interactive application facility, que é uma ferramenta antecessora do SQL. A versão seguinte do primeiro banco relacional (Oracle versão 3), foi escrita em linguagem c. A versão 4 é voltada para os computadores pessoais e possui coerência de leitura. As versões 5 e 5.1, possuem o servidor paralelo, e o Oracle client/Server é introduzido. A versão seis, tem o bloqueio em nível de linha, o sistema de backup surge. No ano de 1997 o oracle 8 é apresentado, mostrando-se como o primeiro banco de dados para web. Ferramentas oracle BI, como Discoverer, são introduzidas para data warehousing. Ferramentas possuem suporte nativo para java. Nos últimos anos e versões, o Oracle ainda vem progredindo através da inserção de serviços como real application clusters e grid computing (alta taxa de processamento). 17 3.3.4 Características O Oracle esta no mercado há muitos anos, entre suas características, podemos falar de sua linguagem padrão de SQL, que é o PL/SQL (Procedural Language/Structured Query Language). A unidade básica em PL/SQL é um bloco. Todos os programas em PL/SQL são compostos por blocos, que podem estar localizados uns dentro dos outros. Geralmente, cada bloco efetua uma ação lógica no programa. O Oracle roda em todos os grandes sistemas operacionais, como Windows, Unix AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64, Z/OS. O servidor Oracle vem pré configurado para os ambientes de grupos de trabalho, dinâmicos e diversificados. Ele possui um conjunto integrado de ferramentas de gerenciamento, além de recursos completos de distribuição, replicação e utilização na Web. O Oracle oferece um novo nível de sistemas de computação para usuários de grupos de trabalho distribuídos. Consultas e atualizações distribuídas permitem o compartilhamento de dados entre vários servidores e garante a consistência dos dados. A replicação de dados permite que os usuários criem várias cópias de leitura de partes de tabelas ou tabelas completas com consistência transacional e integridade de dados garantida. Atualizações baseadas em eventos ou conforme demandas proporcionam a flexibilidade máxima. Os links de bancos de dados permitem que dados remotos sejam definidos e utilizados como se fossem locais, garantindo que os aplicativos nunca precisem de recodificação, caso os dados sejam transferidos de um nó a outro. O gerenciador do servidor Oracle aperfeiçoa automaticamente o desempenho do banco de dados. Depois de analisar os recursos do sistema e os requisitos de aplicativos durante o processamento do banco de dados. 18 Ferramentas de gerenciamento local executam tarefas difíceis de maneira rápida e facilmente, de forma independente ou em conjunto com o console de gerenciamento central. As tarefas de gerenciamento local incluem: • Inicialização e parada temporária do banco de dados. • Criação do usuário e atribuição de funções/privilégios; • Monitoração de sessões do usuário final; • Backup e recuperação do banco de dados; • Criação de tabela e gerenciamento de tamanhos; • Importação e exportação de dados. O Oracle proporciona um sistema único de gerenciamento de banco de dados, oferece uma plataforma avançada e escalável de banco de dados de cliente leve ou cliente/servidor. Para garantir o mais alto nível de desempenho em todos os sistemas operacionais suportados. 3.4 Postgresql 3.4.1 Descrição O PostgreSQL é um sistema gerenciador de banco de dados objeto-relacional (SGBDOR) de código aberto. Sendo assim ele pode ser utilizado, modificado e distribuído por qualquer pessoa para qualquer finalidade, comercial ou acadêmica. Segundo ITL Education Solutions Limited, um banco de dados objetorelacional (ORD), ou sistema de gerenciamento de banco de dados objeto-relacional (ORDBMS ou SGBDOR) é um sistema de gerenciamento de banco de dados relacional que permite aos desenvolvedores integrar ao banco de dados seus próprios tipos de dado e métodos personalizados. 3.4.2 História do PostgreSQL 19 O PostgreSQL é derivado do pacote POSTGRES escrito na Universidade da Califórnia em Berkeley. A implementação do POSTGRES começou em 1986 e foi liderado pelo professor Michael Stonebraker. 3.4.3 Versões A primeira versão foi a versão demonstração do sistema e se tornou operacional em 1987. Foi exibida em 1988 na conferencia de ACM-SIGMO. A primeira versão foi liberada para poucos usuários externos em junho de 1989. A segunda versão foi liberada em junho de 1990, contendo um novo sistema de regras. A terceira versão surgiu em 1991 adicionando suporte a múltiplos gerenciadores de armazenamento, um executor de comandos melhorado, e um sistema de regras reescrito. Em 1994 foi adicionado um interpretador da linguagem SQL e passou a ser chamado do Postgres95, em seguida foi liberado na Web como de software de código aberto. Após muitas mudanças internas e melhoria de desempenho, em 1996 foi escolhido um novo nome, PostgreSQL, para refletir o relacionamento entre o POSTGRES original e as versões mais recentes com capacidade SQL, ao mesmo tempo foi mudado o número da versão para começar em 6.0. Atualmente sua ultima versão é a 9. 3.4.4 Características O PostgreSQL suporta grande parte do padrão SQL e oferece funcionalidades como: • Comandos complexos; 20 • Chaves estrangeiras; • Triggers; • Views; • Integridade transacional • Controle de simultaneidade multi versão. O PostgreSQL pode ser ampliado pelo usuário de muitas maneiras, como: • Inclusão/criação de tipos de dado; • Funções; • Operadores: • Funções de agregação; • Método de índice; • Linguagens procedurais. O PostgreSQL tem mais de 15 anos de desenvolvimento ativo e uma arquitetura que ganhou forte reputação de confiabilidade, integridade de dados e conformidade a padrões. Ele roda em todos os grandes sistemas operacionais, incluindo GNU/Linux, Unix (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), e MS Windows. É totalmente compatível com ACID, tem suporte completo a chaves estrangeiras, junções (JOINs), visões, gatilhos e procedimentos armazenados (em múltiplas linguagens). Inclui a maior parte dos tipos de dados do ISO SQL:1999, incluindo INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, e TIMESTAMP. Suporta também o armazenamento de objetos binários, incluindo figuras, sons ou vídeos. Possui interfaces nativas de programação para C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, entre outros. 21 O PostgreSQL possui ainda funcionalidades sofisticadas como: • O controle de concorrência multiversionado (MVCC, em inglês); • Recuperação em um ponto no tempo (PITR em inglês); • Tablespaces; • Replicação assíncrona; • Transações agrupadas (savepoints); • Cópias de segurança (online/hot backup); • Planejador de consultas (otimizador); • Registrador de transações sequencial (WAL) para tolerância a falhas. Suporta conjunto de caracteres internacionais, codificação de caracteres multibyte, Unicode e sua ordenação por localização, sensibilidade a caixa (maiúsculas e minúsculas) e formatação. É altamente escalável, tanto na quantidade enorme de dados que pode gerenciar, quanto no número de usuários concorrentes que pode acomodar. 3.5 Extração, Transformação e Carga (ETL – Extract, transform, load) O processo de ETL (Extract, Transform and Load) destina-se à extração, transformação e carga dos dados de uma ou mais bases ou fontes de dados de origem para uma ou mais bases ou fontes de dados de destino. A extração e carga são obrigatórias para o processo, sendo a transformação/limpeza opcional. Um sistema ETL tem que ser capaz de se comunicar com as bases de dados e ler diversos formatos de arquivos utilizados por toda a organização. Essa pode ser uma tarefa não trivial, e muitas fontes de dados podem não ser acessadas com facilidade. O termo ETL é comumente relacionado à Data warehouse, que nada mais é que um banco de dados gigantesco que contem os dados de uma organização de forma consolidada. Os dados armazenados no Data warehouse geralmente são unidos e agregados em relatórios de níveis gerenciais. Devido ao grande volume de informações e de transformações necessárias para esses relatórios, as ferramentas 22 de ETL foram criadas para suportar usuários nessas produções. No entanto um processo de ETL pode ser aplicado a qualquer tipo de fonte de destino, não necessariamente um Data warehouse. A figura 2 mostra um processo de ETL, onde podemos ver várias fontes de dados (DB2, MySQL, Access, MS Excel e Oracle), sendo extraídas. Em seguida passam por um processo de transformação e transferência ou carga. Podemos observar que a carga poderá ser feita para um data warehouse, ou para um banco de dados como o PostgreSQL. Na figura 2 encontra-se destacado, a extração e transformação do Oracle para o PostgreSQL, por tratar-se do experimento proposto nesse trabalho. Um processo de ETL pode cobrir também a extração dos dados do próprio warehouse para datamarts, que são bancos organizados por assunto em uma organização, ou ainda os dados do warehouse servindo diretamente como fonte para geração de relatórios (cubo). Figura 2 – Representação do processo de ETL 3.5.1 Extração A primeira parte do processo de ETL é a extração de dados dos sistemas de origem. Essa extração pode produzir diversos tipos de arquivos, como por exemplo, para um simples arquivo de texto, para um arquivo com delimitadores, para arquivos de hash e proprietários da ferramenta, como por exemplo o dataset que é um 23 arquivo próprio do datastage, uma ferramenta que será abordada nos próximos tópicos. Na figura 3, podemos ver que uma extração pode ser efetuada de uma base de dados qualquer, como do db2, para um flat file, do Oracle para um dataset, e também podemos extrair as informações a partir de planilhas Excel, não necessariamente de bases de dados. A maioria das ferramentas de ETL consolida dados extraídos de diferentes sistemas de origem. Cada sistema pode utilizar um formato ou organização de dados diferente. Formatos de dados comuns são bases de dados relacionais e flat files (também conhecidos como arquivos planos), mas podem incluir estruturas de bases de dados não relacionais. Como exemplo, podemos pensar em um campo tipo date, na base de dados possui um determinado formato, mas durante a extração, podemos especificar qual o formato da data desejamos. Exemplos: YYYYMM-DD (base), DD/MM/YYYY (resultado da extração). A extração converte para um determinado formato para a entrada no processamento da transformação. Figura 3 – Representação do processo de Extração 24 3.5.2 Transformação O estágio de transformação aplica uma série de mudanças, filtros ou funções aos dados extraídos para derivar os dados a serem carregados. A figura 4 mostra uma visão macro do processo de transformação. Figura 4 – Representação do processo de transformação A quantidade de manipulação necessária é extremamente variada. Podemos ter casos onde se mapeam absolutamente todos os campos vindos de um arquivo de extração, sem grandes necessidades de mudanças nos formatos, ou em outros casos, pode ser necessário um ou mais tipos de transformação: • Seleção de apenas determinadas colunas para carregar (o arquivo possui trinta colunas e mapearemos somente as dez primeiras) • Tradução de valores codificados (valores codificados podem ser decodificados para aparecerem em relatórios) 25 • Geração de chaves artificiais para data warehouse (também conhecidas como Surrogate Keys. São chaves para as tabelas do warehouse) • Derivação de um novo valor calculado, após join entre tabelas (tabela A possui coluna valor, tabela B possui multiplicador. Como resultado teremos a coluna resultado, que receberá valor X multiplicador) • Transposição ou rotação (fazer um pivô, o que é coluna vira linha ou o que é linha vira coluna) • Quebra de uma coluna em diversas colunas (como por exemplo, colocar uma lista separada por vírgulas e especificada como uma cadeia em uma coluna com valores individuais em diferentes colunas). • Agregação de dados de vários tipos (soma de uma coluna através de agrupamento por determinado campo). No caso de data warehouse, a geração de chaves artificiais é praticamente mandatória para evitarmos a duplicação de dados, uma vez que gravamos dados históricos. 3.5.3 Carga A fase de carga carrega os dados no Data Warehouse (DW), como representado na figura 5. Dependendo das necessidades da organização, este processo varia amplamente. Podem existir processos genéricos de carga, ou específicos para cada processo. A volatilidade dos dados pode depender da necessidade de cada empresa. Alguns data warehouses podem substituir as informações existentes semanalmente, com dados cumulativos e atualizados, ao passo que outro DW (ou até mesmo outras partes do mesmo DW) podem adicionar dados a cada hora, dia ou mês. A temporização e o alcance de reposição ou acréscimo constituem opções de projeto estratégicas que dependem do tempo disponível e das necessidades de 26 negócios. Sistemas mais complexos podem manter histórico e pistas de auditoria de todas as mudanças sofridas pelos dados.Os processos de histórico podem ser encarados nesse caso como parte da transformação e não somente da carga. Figura 5 – Representação do processo de carga 3.6 Software Livre Software livre é um software que permite qualquer um copiar, usar e distribuir, modificar e melhorar, gratuitamente ou por um preço. O usuário de um software livre tem as quatro seguintes liberdades: • Liberdade para rodar o programa, para qualquer propósito; • Acesso ao código fonte e liberdade para estudar como o programa funciona e modificá-lo conforme necessidade; • Liberdade para redistribuir uma ou mais copias; • Liberdade para distribuir copia de suas versões modificadas. Existe uma confusão quando se fala em software livre, pois muitas empresas afirmam que seu produto é um software livre, porém é necessário verificar os termos 27 de distribuição para ver se os usuários realmente possuem todas as liberdades que um software livre implica. Software livre é uma questão de liberdade e não de preço. A seguir o detalhamento dos tipos de software livre, baseados nas informações retiradas da pagina http://www.gnu.org/philosophy/categories.pt-br.html: 3.6.1 Código Aberto (Open Source) O termo código aberto é usado por algumas pessoas para se referir ao software livre. 3.6.2 Domínio publico Software de domínio publico é software livre mas não protegido por copyright, ou sem copyright, o que significa que algumas cópias ou versões modificadas podem não ser livres. 3.6.3 Software protegido com copyletf Software protegido com copyleft significa que toda cópia do software, mesmo que tenha sido modificada, precisa se livre. 3.6.4 Software livre e não protegido com copyleft Vem do autor com permissão para redistribuir e modificar, e também para incluir restrições adicionais a ele. Se um programa é livre, mas não protegido com copyleft, algumas cópias ou versões modificadas podem não se livres, uma empresa pode compilar o programa, 28 com ou sem modificações, e distribuir o arquivo executável na forma de um produto proprietário. 3.6.5 Software semi-livre Software semi-livre é software que não é livre, mas que vem com permissão para indivíduos usarem, copiarem, distribuírem e modificarem (incluindo a distribuição de versões modificadas) para fins não lucrativos. 3.6.6 Software proprietário Software proprietário é aquele que não é livre ou semi-livre. Seu uso, redistribuição ou modificação é proibida. 3.6.7 Freeware O termo "freeware" não possui uma definição clara e aceita, mas é muito usada para pacotes que permitem redistribuição, mas não modificação (e seu código fonte não esta disponível). 3.6.8 Shareware Shareware é um software que vem com permissão para redistribuir, mas diz que qualquer uma que continue usando uma cópia deve pagar por uma licença. Não é um software livre, ou mesmo semi-livre. 3.6.9 Commercial Software 29 Commercial Software ou Software comercial é software sendo desenvolvido por uma empresa que procura ter lucro através do uso do software. Comercial e proprietário não são a mesma coisa. A maior parte do software comercial é proprietária, mas existem softwares livres comerciais, e software não-comecial e não-livre. 3.6.10 GNU General Public License (Licença Pública Geral) As licenças para a maioria dos softwares são designadas para garantir que o software não seja modificado e que copias não sejam distribuídas sem que se possua uma licença. Já a GNU General Public tem por objetivo garantir a liberdade de distribuição e modificações em todas as versões de um programa, garantindo que o software ainda seja distribuído livremente para todos os usuários interessados. Esta licença foi idealizada por Richard Matthew Stallman em 1989, no âmbito do projeto GNU da Free Software Foundation. 3.7 Software livre de Banco de Dados Quando se trata de software livre para banco de dados, ainda estamos em expansão devido à complexidade de servidores de banco de dados, já os sistemas pagos estão bem consolidados nesse sentido. Quando fazemos a opção por um software proprietário ou livre, uma analise das necessidades é obrigatória, uma vez que hoje os sistemas não são mais simples armazenadores de informações, possuem uma grande quantidade de ferramentas agregadas que podem ser de importância vital. Entre os parâmetros a serem comparados na hora da escolha temos o desempenho, controle de acesso, estabilidade, suporte a programação e transações e compartilhamento de dados. 30 4. METODOLOGIA 4.1 Modelo do Experimento Devido a políticas do governo federal, muitos órgãos públicos estão tendo que migrar software proprietário para software livre. O motivo é simples, economizar com licenças pagas. Para o avaliarmos as ferramentas de ETL, proporemos um projeto piloto, onde migraremos sete tabelas, sendo que para duas delas, adicionaremos algumas transformações especificas. 4.1.1 Modelo de Dados proposto Como dito anteriormente, selecionamos sete tabelas para o experimento. Sendo elas: • Pessoa; • Edificacao; • UnidadeAvaliacao; • Territorial; • Pessoa_Territorial; • Pessoa_Edificacao; • Valores_Imoveis; O Anexo A traz maiores detalhes sobre os nomes de campos e tipos de dados. As chaves e relacionamentos podem ser verificados na figura 6 aonde temos o Modelo Relacional Reduzido. 31 Figura 6 - Modelo Relacional Reduzido 4.1.2 Tabelas e Volume de dados Os valores especificados abaixo foram extraídos do Sistema de Gestão Cadastral, banco de dados Oracle em Setembro de 2012. Tabela Numero de Registros PESSOA 923173 EDIFICACAO 267913 TERRITORIAL 159662 UNIDADEAVALIACAO 440187 PESSSOA_EDIFICACAO 283404 PESSOA_TERRITORIAL 162016 VALORES_IMOVEIS 142111 Tabela 1 – Quantidade de Registros por tabela 4.1.3 Extrações e Transformações propostas • Extrações – Extração simples das tabelas pessoa e edificacao mencionadas anteriormente; 32 • Transformação 1 - Criação de uma nova tabela que contenha o valor dos imóveis por bairro. Hoje a tabela unidadeavaliacao, possui a área do imóvel, e a tabela valores_imoveis possui o valor do metro quadrado do imóvel. Uniremos essas tabelas e demais tabelas necessárias para manipulação dos dados na segunda transformação; Criação da tabela IMOVEL_AVALIADO Nome Coluna Tipo do Dado RazaoSocial Varchar Bairro Varchar ValorAvaliacao Decimal Tabela 2 – Tabela Imovel_Avaliado Transformação 2 – Agregar os dados da nova tabela Imovel_Avaliado pelo campo bairro, produzindo um relatório no formato csv, que contenha o total em termos de imóveis por bairro; 4.1.4 Estudo comparativo entre Oracle e PostgreSQL Antes da migração é necessário fazer um estudo dos SGDBS, identificar diferenças de sintaxe e funcionalidades. Nas tabelas 3 e 4 citamos algumas diferenças entre o Oracle e o PostgreSQL: Tipo de Dados Integer Oracle NUMBER PostgreSQL SMALLINT (16-bit), INTEGER (32bit), BIGINT (64-bit) Floating point Decimal BINARY_FLOAT, REAL (32-bit), DOUBLE PRECISION BINARY_DOUBLE (64-bit) NUMBER DECIMAL, NUMERIC 33 String CHAR, VARCHAR2, CLOB, CHAR, VARCHAR, TEXT NCLOB, NVARCHAR2, NCHAR Binary BLOB, RAW, LONGRAW, BYTEA BFILE Date/Time DATE, TIMESTAMP DATE, TIME (with/without (with/without TIMEZONE), TIMEZONE), TIMESTAMP INTERVAL (with/without TIMEZONE), INTERVAL Boolean N/A BOOLEAN Outros SPATIAL, IMAGE, AUDIO, ENUM, POINT, LINE, LSEG, BOX, VIDEO, DICOM, XMLType PATH, POLYGON, CIRCLE, CIDR, INET, MACADDR, BIT, UUID, XML, arrays Tabela 3 – Comparação Tipos de Dados entre Oracle e PostgreSQL ORACLE Sistema Operacional JOIN FUNÇÕES PostgreSQL Windows, Linux, UNIX, Windows, Linux, UNIX, MAC OS X, BDS MAC OS X (PostgreSQL 8.0) FROM t1, t2 FROM t1 WHERE t1.id = t2.id(+) LEFT OUTER JOIN t2 ON t1.id = t2.id DECODE (sexo, 'M', CASE WHEN sexo = 'M' 'Masculino', THEN 'Masculino' 'F', 'Feminino') WHEN sexo = 'F' THEN 'Feminino' END) NVL COALESCE sysdate, systimestamp current_date, current_timestamp 34 UNION MINUS EXCEPT Clausula LIMT e ROWNUM, ROWID LIMIT, OFFSET, OID Catalogo de sistema SYS, SYSTEM pg_catalog, information_schema Visões materializadas Possui visões Não possui visões materializadas, porém é materializadas possível contornar com gatilhos e funções OFFSET Tabela 4 – Comparação Oracle X PostreSQL 4.2 Escolha das ferramentas ETL Como proposto, faremos a migração dos dados entre os bancos envolvidos, Oracle e PostgreSQL, usando ferramentas de ETL para extração, transformação e carga. Selecionamos três ferramentas para fazer a migração, o Datastage, o Talend e o Apatar. Optamos pelo Talend e pelo Apatar por serem livres de custos com licença, já o Datastage foi escolhido por ser uma ferramenta bem estabelecida em termos de mercado. 4.2.1 Datastage O Datastage é uma ferramenta líder de mercado quando se falam em Business Intelligence e ETL. Esta ferramenta permite integração de dados com múltiplas plataformas, é capaz de processar altíssimos volumes de dados. Tem uma interface gráfica muito amigável, possui dezenas de conectores e estágios para manipulação de dados. O Datastage pertence a IBM (IBM Infosphere Datastage), mas iniciou numa empresa chamada VMark. Seu primeiro protótipo foi desenvolvido por Lee Scheffler, no ano de 1996. A Vmark adquiriu a Unidata e se tornou a Ardent Software, que mais tarde se foi comprada pela Informix e se tornou Ascential Software. No ano de 2005 a IBM comprou a Ascential Software. a) Produtos 35 • Administrator – especifica configurações default do servidor, adiciona e remove projetos, configura propriedades do projeto e acessa o repositório através de linha de comando; • Designer – especifica extração e transformação, denormaliza, agrega e divide dados; • Director – valida, executa, monitora, agenda e mostra estatísticas dos Jobs; • Manager – grava e gerencia meta dados reutilizável para Jobs datastage, cria rotinas e transformações customizadas. b) Tecnologia • Linguagem de Programação: Universe Programming language, html e java • Linguagens query: SQL • Sistemas operacionais: Windows e UNIX c) Aplicações • Migração de banco de dados; • Integração de Aplicações, data warehouses e data marts; • Operações entre diferentes bancos, import/export; • Agregação de dados; 4.2.2 Talend A Talend é um distribuidor de software open source de integração de dados. Lançou no ano de 2006, a primeira versão do Talend Open Studio. Essa ferramenta possui várias funcionalidades, principalmente para a migração e integração entre os sistemas operativos, para ETL (Extract, Transform, Load), Business Intelligence, 36 Data Warehousing e Data Quality. Ao contrário das soluções proprietárias fechadas que apenas as maiores organizações podem adquirir, a Talend cria soluções de integração de dados acessíveis a organizações de todas as dimensões. a) Produtos • Talend Open Studio - Job Designer – oferece uma interface gráfica e funcional para visualização dos processos integrados. Exibe opções e componentes conectores, são unidos de forma simples, arrastando e soltando um componente para a área de criação. • Talend Open Studio - Business Modeler - uma ferramenta para modelagem que auxilia os profissionais do mundo dos negócios a relacionarem as atividades de design com todas as etapas de um processo específico. • Talend Open Studio – Component Library - biblioteca com componentes e conectores para você desenvolver mapas e funções de integração. Pode aumentar as opções de componentes criando padrões nas linguagens de Perl, Java ou SQL. • Talend Open Studio – Matadata Repository - os meta dados trabalhados ficam armazenados nesse repositório. Todas as informações de projetos ficam salvas por módulos e podem rapidamente ter seus processo integrados. b) Tecnologia • Linguagem de Programação: Java e Perl • Plataforma: Eclipse • Linguagens query: SQL, SOAP/XML • Sistemas Operacionais: Windows, Linux e Unix c) Aplicações • Migração de banco de dados; 37 • Integração de Aplicações; • Criação e alteração de Banco de Dados; • Operações entre diferentes bancos de dados, import/export; • Agregação de dados; 4.2.3 Apatar O Apatar é uma ferramenta de ETL e de integração de dados open source. Foi fundada no ano de 2005. Seu primeiro release aconteceu no ano de 2007 onde o produto foi demonstrado a parceiros estratégicos, incluindo MySQL e BlackDuck. Apatar é também a empresa que fornece suporte para sua ferramenta open source. a) Produtos O Apatar é um aplicativo desktop que efetua integração de dados através de conexões com uma diversidade de banco de dados, aplicações, protocolos e arquivos. A ferramenta permite que desenvolvedores, administradores de banco de dados e usuários integrem informações de uma variedade de fontes e formatos de dados. A ferramenta é bem intuitiva e não há necessidade de desenvolvimento de código para integração de dados. Apatar ainda desenvolveu duas outras ferramentas: • Apatar Merge – um MS Word plug-in que permite o desenvolvimento de documentos Microsoft Word, usando templates de dados Salesforce CRM1. • Apatar On-Demand – uma aplicação baseada em Web que integra o aplicativo Salesforce CRM com edições desktop do QuickBooks accounting system 2. 38 b) Tecnologia • Linguagem de Programação: J2EE • Plataforma: Eclipse • Linguagens query: SQL, SOAP/XML • Sistemas Operacionais: Windows, Linux, MacOS c) Aplicações • Migração de banco de dados; • Integração de Aplicações; • Criação e alteração de Banco de Dados; • Operações entre diferentes bancos de dados, import/export; • Agregação de dados; 4.3 Experimento Para o experimento, definimos algumas etapas a serem seguidas: • A extração simples das tabelas pessoa e edificação. • Uma tranformação que unirá as tabelas unidadeavaliacao, pessoa_edificacao, valores_imoveis, edificação, territorial e bairro. • Uma agregação que determinara o valor total dos imóveis por bairro. Através dos procedimentos acima listados pretendemos avaliar a qualidade em uso de cada uma das ferramentas de ETL segundo as normas sobre qualidade de software ISO/IEC 9126 e 14598. Mediremos a efetividade, produtividade, 39 segurança e qualidade. Abaixo seguem os experimentos com cada uma das ferramentas. 4.3.1 Datastage a) Extração da tabela Pessoa Para fazermos uma extração no Datastage, precisamos decidir o tipo de job que queremos. O Datastage possui jobs tipo Parallel e Server. Atualmente a maior parte do código desenvolvido será em parallel, ou seja, com as linhas processadas sendo distribuídas entre os processadores, visando à quantidade de dados e focando principalmente em desempenho. Para esse experimento desenvolvemos jobs parallel também conhecidos como PX. A figura 7 ilustra o job de extração da tabela pessoa. Figura 7 - Datastage extração tabela pessoa A figura 8 mostra os detalhes de conexão com o banco Oracle. 40 Figura 8 - Datastage configuração Oracle b) Extração da tabela Edificacao O PostgreSQL não possui um conector especifico, mas o datastage trabalha com conectores ODBC. As configurações são similares as de configuração de um conector qualquer de banco de dados. Na figura 8 vemos a conexão com o estágio de extração do Oracle e o conector ODBC comunicando com o banco de dados PostgreSQL. 41 Figura 9 - Datastage extração tabela edificacao c) Transformação 1 – Carregar tabela Imovel_Avaliado O Datastage permite mais de dois conectores de banco de dados por estágio de join. Optamos por usar somente dois links por vez para ficar similar as demais ferramentas. Temos um estágio de transformação, que poderá efetuar multiplicação entre as colunas ou outra operação matemática qualquer. Figura 10 - Datastage Job de Transformação 1 42 A figura 10 acima mostra os joins entre as tabelas relacionadas para a carga no PostgreSQL. O mapeamento de meta dados é feito manual ou automática de acordo com a escolha do desenvolvedor. A figura 11 a seguir mostra os meta dados no estágio do Oracle. Figura 11 - Datastage meta dados d) Transformação 2 – Agregação de dados Imovel_Avaliado A figura 12 mostra o segundo job de transformação. O resultado da transformação 1 é a entrada da transformação 2. O diferencial nesse caso é o estágio de agregação, que efetuará a soma agregando pelo campo bairro. A figura 13 mostra o detalhamento do estágio de agregação. 43 Figura 12 - Datastage Job de Transformação 2 Figura 13 – Datastage Job de Agregação 4.3.2 Talend 44 a) Extração da tabela Pessoa A tarefa de extração no Talend foi simples. O primeiro passo foi a configuração da conexão com o banco de dados Oracle. A figura 14 destaca a configuração efetuada com o Oracle: Figura 14 - Talend conexão com banco Oracle Depois de configurada a conexão banco, podemos escolher o estágio de Oracle na aba Base de Dados, como ilustrado na figura 15. Figura 15 - Talend estágio de Input Oracle 45 O mapeamento dos campos nos estágios podem ser feitas de maneira automática. Quando escolhemos a conexão com o banco, podemos preencher o nome da tabela, e clicar na opção “Guess Schema”, os nomes dos campos e tipos de dados são preenchidos automaticamente. O mesmo funciona quando clicamos na opção “Guess Query”, a query é preenchida de maneira automática. Para inserção no PostgreSQL , devemos fazer a configuração com o banco de dados de maneira muito similar a feita com o Oracle anteriormente, a figura a seguir mostra um exemplo. Figura 16 - Talend conexão com banco PostgreSQL Depois de configurada a conexão com os dois bancos, conectamos os banco e os schemas serão sincronizados. Quando estamos escrevendo em um banco podemos solicitar inclusive que a tabela seja criada. A figura 17 mostra o job de extração da tabela pessoa configurado e pronto para ser executado. 46 Figura 17 - Talend Job Extração Pessoa b) Extração da tabela Edificacao As demonstrações feitas anteriormente para a tabela pessoa também são válidas para qualquer outra tabela do banco. É importante salientar que algumas tabelas no Oracle possuem o tipo de dados sem tamanho (number), no estágio de postgreSQL os que possuirá a tabela alvo, o tamanho do campo é obrigatório. A figura 18 demonstra a estrutura do job de extração da tabela edificação. Figura 18 - Talend Extração tabela edificacao 47 c) Transformação 1 – Carregar tabela Imovel_Avaliado Como proposto anteriormente, unimos diversas tabelas, com intuito de mapear dificuldades durante um processo de transformação. Os estágios de join do Talend possuem conexão somente com dois links por vez. As figuras a seguir demonstram respectivamente a configuração de batimento de chaves no estágio de join, e o job de transformação de resultado. Figura 19 - Talend estágio de Join - chaves 48 Figura 20 - Talend Job de Transformação 1 d) Transformação 2 – Agregação de dados Imovel_Avaliado A segunda transformação é na verdade uma agregação de dados. Usamos um estágio de agregação, configurando as colunas que servirão de agrupamento e também qual coluna armazenará o novo resultado. Isso está ilustrado na figura 21. Figura 21 - Talend estágio de agregação A figura 22 mostra o resultado final do job de agregação. 49 Figura 22 - Talend Job de agregação 4.3.3 Apatar a) Extração da tabela Pessoa A extração da tabela pessoa no Apatar foi simples, como visto no exemplo da ferramenta anterior também o primeiro passo é fazer a conexão com o banco de dados, para o nosso caso de estudo, com o conector Oracle: 50 Figura 23 - Apatar conexão com banco Oracle E na tela seguinte basta escolher qual tabela será a tabela fonte, neste caso, a tabela pessoa. Após o termino da configuração do conector de banco de dados fonte, é necessário fazer o mesmo para o conector do banco de dados de destino. Uma vez que conectores fonte e destino estiverem configurados, é possível fazer o mapeamento das colunas fonte e destino através do operador Transform. Este mapeamento é feito de maneira manual, o que pode ser bem trabalhoso para uma tabela que contenha muitas colunas. Abaixo podemos ver o mapeamento das colunas no Transform: Figura 24 – Apatar mapeamento de colunas A nomenclatura dos estágios é feita de maneira automática pelo Apatar, e esta nomenclatura especifica de cada estagio é muito útil na leitura de logs gerados a partir do processamento do job. A figura abaixo mostra o job finalizado e pronto para ser executado: 51 Figura 25 - Apatar Extração tabela pessoa a) Extração da tabela Edificacao Para fazer a carga da tabela edificacao foi necessário criar um job exatamente como vemos anteriormente. Apenas temos que novamente mapear todas as colunas fonte e destino. Abaixo temos o job para a carga da tabela edificacao criado: 52 Figura 26 - Talend Extração tabela edificacao b) Transformação 1 – Carregar tabela Imovel_Avaliado Assim como o Talend, o Apatar também possui apenas dois links para joins. Outra dificuldade encontrada foi que o Apatar não faz multiplicação ou divisão de valores. Então tivemos que criar uma tabela staging no PostgreSQL para carregar o resultado dos joins e então acrescentamos mais um conector PostgreSQL onde fizemos a multiplicação das colunas VALOR e NRAREAGEO através de uma query, conseguindo assim carregar os dados do caso proposto na tabela imóvel_avaliado. 53 Figura 27 - Apatar Job de Transformação 1 c) Transformação 2 – Agregação de dados Imovel_Avaliado Não encontramos dificuldades para fazer esta agregação no Apatar. O estágio de criação de arquivos é muito intuitivo. Na figura 28 podemos ver o job criado e pronto para ser executado: 54 Figura 28 - Apatar job de agregação 4.4 Resultados 4.4.1 Avaliação das Ferramentas Para avaliação das ferramentas de ETL, usaremos como guia as normas sobre qualidade de produto de software ISO/IEC 9126 e 14598 – 2000. A avaliação do produto de software tem sido uma das formas empregadas por organizações que produzem ou adquirem software para obtenção de maior qualidade nestes produtos, sem ele produtos completos ou partes a serem integradas num sistema computacional mais amplo. Em nossa avaliação utilizaremos o modelo que qualidade definido pela norma 9126. a) Qualidade em Uso 55 Qualidade em uso é a visão de qualidade do usuário e é medido pelo efeito do uso do software. O modelo de Qualidade para Qualidade em Uso faz a avaliação de quanto o usuário pode atingir seus objetivos em um ambiente, sem medir as propriedades do produto de software. Esse modelo possui quatro características de qualidade: Efetividade, Produtividade, Segurança e Satisfação. Figura 29 – Qualidade de Uso • Efetividade: capacidade do produto de software de permitir ao usuário atingir metas específicas com acurácia e completude, em um contexto de uso específico; • Produtividade: capacidade do produto de software de permitir que seus usuários empreguem quantidade adequada de recursos em relação à efetividade alcançada em um contexto de uso específico; • Segurança: capacidade do produto de software de apresentar níveis aceitáveis de riscos de danos a pessoas, negócios, software, propriedade ou ambiente em um contexto de uso específico; • Satisfação: capacidade do produto de software de satisfazer usuários em um contexto de uso específico; b) Métricas de Qualidade em Uso – ISO/IEC 9126-4 56 Métricas de qualidade de uso medem quanto um produto de software atende às necessidades de um usuário específico. As medidas são obtidas pela observação do uso do produto ou por uma simulação de um ambiente real. Na tabela abaixo foram descritas as métricas selecionadas na coluna “Métrica” e na parte superior podemos ver os níveis de pontuação definidos para nossa avaliação. Tabela 5 – Seleção de Métricas 57 Abaixo criamos alguns gráficos para melhor visualização dos resultados acima descritos: 4.4.2 Efetividade Gráfico 1 – Efetividade a) Log de erro de fácil compreensão: Talend: Como o Talend é uma ferramenta desenvolvida em Java os erros que aparecem no log são específicos do Java, portando se o usuário não possui um conhecimento em Java a compreensão destes erros no log não é tão simples. Apatar: O tratamento de erros do Apatar tornou a compreensão simples, a maioria dos erros encontrados em nosso experimento foi de fácil compreensão e para aqueles erros que não eram tão simples, podemos encontrar uma melhor descrição e como resolver no site de suporte do Apatar, um site em formato wiki ou em um fórum especifico do Apatar. Datastage: O Datastage mostra um código de erro e uma lista de código de erros pode ser encontrada no site de IBM. b) Possui GNU General Public License – Software livre: O Apatar e o Talend são classificados como software livre e possui GNU General Public License, o que garante a liberdade de distribuição e modificações em todas as versões de um programa, garantindo que o software ainda seja distribuído livremente para todos os usuários interessados, conforme descrito anteriormente, na sessão de Categorias de software livre. c) Operador Join suporta mais que duas tabelas: 58 O resultado do Apatar e do Talend para esta métrica foi insatisfatório, pois estes dois softwares não possibilitam fazer joins de mais que duas tabelas em um mesmo operador join, o que torna o desenvolvimento de um job com vários joins muito mais trabalhos, pois precisamos fazer os joins em utilizando vários operadores joins, o resultado de um join com 2 tabelas é a entrada para um segundo join, e assim por diante. O Datastage permite fazer joins com diversas tabelas utilizando apenas um único operador join, o que torna a criação de um job muito mais rápida. d) Possui diversos tipos de operadores como join, filter: O Datastage é a ferramenta que possui o maior número de operadores entre as ferramentas avaliadas, esta característica facilita o desenvolvimento de um job além de poder diminuir o seu tempo de execução. e) Conexão ODBC genérica: As três ferramentas avaliadas possuem esta funcionalidade. Esta funcionalidade auxilia na conexão com outros bancos de dados que possam não possuir um conector específico na ferramenta. Como foi o caso do Datastage, este não possui um conector específico para PostgreSQL, porém a conexão tornou-se possível utilizando um conector ODBC. f) Faz conexão com a maioria dos bancos de dados: Todas as três ferramentas avaliadas tiveram um resultado satisfatório, porém o Talend é a ferramenta que possui a maior quantidade de conectores com diferentes tipos de bancos de dados. g) Faz diversos tipos de agregações: O resultado desta avaliação para o Apatar foi parcialmente satisfatório pois possui algumas limitações como: Não faz multiplicação ou divisão de valores, por exemplo, caso seja necessário multiplicar a coluna A pela coluna B de uma tabela para gerar um novo campo, isto tem que ser feito através de SQL, o resultado deve ser inserido em uma tabela “staging” e então extraído novamente se for necessário fazer alguma outra agregação ou transformação. h) Diferentes plataformas: O resultado desta avaliação foi totalmente satisfatório para as três ferramentas, pois todas eles podem ser instaladas independentemente do sistema operacional utilizado. 59 i) Sem necessidade de codificação: O Talend necessita de alguma codificação para certos estágios ou operadores, a linguagem utilizada deverá ser o Java. j) Fácil utilização: Todas as ferramentas avaliadas são de fácil utilização, não é necessário um treinamento prévio para a criação de processos simples. 4.4.3 Produtividade Gráfico 2 – Produtividade a) Agendamento de processos: É possível agendar processos nas três ferramentas utilizadas. O agendamento de processos no Apatar é feito de maneira simples, utilizando a mesma ferramenta onde o processo é criado. No Datastage o agendamento é feito via Datastage Director. b) Tempo para fazer mapeamento em tabelas com mais de 20 colunas: O resultado foi insatisfatório para o Apatar, pois o mapeamento é feito de maneira manual, coluna a coluna, o que demanda muito tempo para tabelas com diversas colunas. Já o mapeamento de colunas no Datastage e Talend pode ser feito de maneira automática. c) Tempo para criar um complexidade alta: processo com transformação de 60 Definimos que um processo de complexidade alta teria quinze operadores ou mais. Sendo assim o Datastage teve uma melhor performance, pois possui o maior número de operadores e as colunas podem ser propagadas de estágio a estágio, sem a necessidade de muito trabalho manual. O Apatar não faz propagação de colunas de maneira automática. d) Tempo para criar um processo complexidade média: com transformação de Definimos que um processo de complexidade média teria de dez a quinze operadores. Nesta avaliação o Datastage ainda teve a melhor performance devido a quantidade de operadores e menor trabalho manual. e) Tempo para criar um processo simples: Definimos que um processo de complexidade simples teria menos que dez operadores, neste caso o Talend teve a melhor performance na avaliação, devido a facilidade e rapidez com que um processo deste nível pode ser criado, sua quantidade de operadores ou funcionalidades foi bastante adequada. 4.4.4 Segurança Gráfico 3 – Segurança a) Senhas dos conectores de banco de dados são criptografadas: As três ferramentas avaliadas possuem esta finalidade. Como estas ferramentas fazem conexão direta com bancos de dados, dependendo do negócio ou dados acessados, estes podem ser confidencias, portanto esta é uma funcionalidade importante. b) Software exige usuário e senha: Apenas o Datastage exige usuário e senha, estas sendo os mesmos que os do sistema operacional onde a ferramenta esta instalada. 61 4.4.5 Satisfação Gráfico 4 – Satisfação a) Satisfação geral: O nível de satisfação do Talend levando em consideração os processos criados neste experimento pode ser comparado ao nível de satisfação Datastage. Lembrando que o Talend é uma ferramenta de software livre, e este atendeu nossas necessidades e não tem custo, o que torna o Talend uma ferramenta adequada para negócios onde um grande investimento em uma ferramenta de ETL não é viável. O nível de satisfação do Apatar foi satisfatório, as características que mais deixaram a desejar foram como mencionado anteriormente a necessidade de trabalho manual e a ausência de alguns operadores que necessitávamos. O Datastage é uma ferramenta muito utilizada no mercado e já bastante consagrada, sendo muito estável, porem com custo elevado para certos negócios. b) Treinamento presencial disponível Todas as ferramentas avaliadas possuem treinamento presencial disponível e mais detalhes podem ser facilmente encontrados em seus web sites. c) Documentação cobre todas as funcionalidades: A documentação do Datastage e do Apatar foram as melhores nesta avaliação. Com relação ao Apatar, todas as dificuldades encontradas puderam ser encontradas na documentação disponível em seu web site. d) Documentação disponível: O Datastage e o Apatar mais uma vez foram as melhores nesta avaliação. e) Interface do usuário é intuitiva: 62 Todas as ferramentas avaliadas são totalmente intuitivas. 63 5. CONSIDERAÇÕES FINAIS O exercício de qualquer profissão é determinante no espaço social e no mercado de trabalho. Os profissionais de tecnologia necessitam se atualizar constantemente. A cada ano o numero de ferramentas livres e de código aberto aumenta, o que traz muitos benefícios a toda a sociedade, principalmente para a área acadêmica que ganha com a experiência. Com proposta de avaliar ferramentas de ETL, comparamos três ferramentas, das quais duas não tem custo de licença. A ferramenta deve ser escolhida de acordo com o tamanho da aplicação e característica do negócio. Ficamos satisfeitos em encontrar disponibilidade de ferramentas de software livre e de boa qualidade para processos de ETL. O Talend em especial surpreendeu nesse aspecto, uma vez que desenvolvido em Java, facilita o entendimento de erros para aqueles que já possuem um bom conhecimento nessa linguagem. A partir deste relato de caso estabeleceu-se uma metodologia para avaliação de ferramentas de ETL. O usuário que necessita fazer uma escolha de ferramenta, poderá checar o quadro de resultados que disponibilizamos e fazer uma melhor escolha. É importante também ressaltar o conhecimento adquirido na aprendizagem de diferentes ferramentas. O fato de não conhecermos a fundo duas das três ferramentas utilizadas, nos trouxe a oportunidade de leitura e absorção de conhecimentos relacionados a todo o processo desenvolvido. 64 6. REFERÊNCIA DATE, C.J.Introdução a Sistemas de Bancos de Dados,8. Ed. Rio de Janeiro. Elsevier. 2003 InMon, Willian H. Introduction to the Government Information Factory (GIF). Inmon Associates Inc.. 2003 CARVALHO. Tereza Cristina Melo de Brito.(org). Gerenciamento de Redes - uma abordagem de sistemas abertos. São Paulo - Brasília. BRISA - TELEBRÁS. Makron Books. 1993 CHESWICK, W.; BELLOVIN, S. M. ; RUBIN. A. D.; Firewalls e Segurança na Internet. 2.ed. Porto Alegre. Bokman. 2005 COMER, D. E., Redes de Computadores, Porto Alegre, 2001: Bookman. FERRARI, Antônio Martins. Telecomunicações: Evolução e Revolução. São Paulo: Érica, 1991. APATAR. Why Apatar. Apatar, 2011. Disponível em: http://apatar.com/why_apatar.html. Acessado em 16/11/2011. JUNIOR, EDSON ALMEIDA. História e Evolução da Oracle no Mundo. São Paulo, 2008. Disponível em: http://www.consulting.com.br/edsonalmeidajunior/admin/downloads/ TALEND. Talend Open Studio. Disponível em: http://www.talend.com/productsdata-integration/talend-open-studio.php. Acessado em 20/11/2011 65 TALEND. Installation Guide. Disponível em: http://www.talend.com/resources/documentation.php. Acessado em 10/11/2011 DATASTAGE. Infosphere Datastage. Disponível em: http://www142.ibm.com/software/products/br/pt/ibminfdata/. Acessado em 20/11/2011. ORACLE. A história do Oracle: Inovação, Liderança e Resultados. Disponível em: http://www.oracle.com/br/corporate/press/story-346137-ptb.html ELMASRI, R.; Navathe, S. Sistema de Banco de Dados, 4 ed. São Paulo, Pearson Addison Wesley,2005. TELLES, Fabio, IKE, Fernando. Migração Oracle para PostgreSQL. São Paulo, 2008. Disponível em: http://www.slideshare.net/telles/migrao-de-oracle-parapostgresql-fisl-presentation. Acessado em 25/10/2011. SOUZA, Evandro Pontes. Migração de Banco de Dados Oracle para PostgreSQL. São Paulo, 2007. Disponível em: http://www.cnptia.embrapa.br/content/07107-migrao-de-banco-de-dados-oracle-para-postgresql.html. Acessado em 27/10/2011. ITL Education Solutions Limited. Introduction to Database Systems, 1 ed. New Dheli, Pearson Education India, 2008. SOFTWARE LIVRE. Categorias de Software Livres e não Livres. Disponível em http://www.gnu.org/philosophy/categories.pt-br.html. Acessado em 15/11/2011 ISO/IEC 9126-1: 2000. Software engineering– Software product quality- Part 1: Quality Model. ISO/IEC 9126-2: 2000. Software engineering– Software product quality- Part 2: External Metrics. 66 ISO/IEC 9126-3: 2000. Software engineering– Software product quality- Part 3: Internal Metrics. ISO/IEC 9126-4: 2000. Software engineering– Software product quality- Part 4: Quality in Use Metrics. 67 7. ANEXOS ANEXO A – DDL Tabelas usadas no experimento -- Sequence: seq_territorial -- DROP SEQUENCE seq_territorial; CREATE SEQUENCE seq_territorial INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1069344 CACHE 20; ALTER TABLE seq_territorial OWNER TO postgres; -- Table: territorial -- DROP TABLE territorial; CREATE TABLE territorial ( cdquadrante integer NOT NULL, cdquadricula integer NOT NULL, cdsetor integer NOT NULL, cdquadra integer NOT NULL, cdlote integer NOT NULL, id_taxa smallint NOT NULL, id_calcada smallint NOT NULL, id_superficieprincipal smallint NOT NULL, id_forma smallint NOT NULL, id_podologia smallint NOT NULL, 68 id_topografia smallint NOT NULL, id_irreglote smallint NOT NULL, id_irregocupacao smallint NOT NULL, id_ocupacao smallint NOT NULL, id_ocupacaolote smallint NOT NULL, id_situacao smallint NOT NULL, id_patrimonio smallint NOT NULL, id_limitefrontal smallint NOT NULL, cdloteamento character varying(127), cdreduzido numeric, dtcancelamento integer, nrmatricula bigint, nroficio bigint, nrincra numeric, nrzonaaliquota integer, nrzonasolo integer, nrzonasetor smallint, dsobservacoes character varying(300), nrendereco numeric, dscomplementoend character varying(30), nrareaterreno numeric(11,2), nrareatributavel numeric(11,2), cdpermuso character varying(1), nroficiolivro integer, nroficiofolha integer, nrtestadas smallint, dsprocdesmembunific character varying(15), processamento_id numeric, nrtestadapavimentacao numeric, nrtestadailuminacao numeric, flmeiofio boolean, id_tpcoletalixo smallint, id_bairro integer, territorial_id integer DEFAULT nextval('seq_territorial'::regclass), 69 lote_loteamento character varying(20), dtbaldio integer, vuface numeric, quadra_loteamento character varying(20), dsprocdesmembramento character varying(15), nrtestadaprincipal numeric, carga_realizada numeric, cdestado integer DEFAULT 0, autonoma_baldio integer, dtexercicio integer, dtimplantacao integer, updated_at timestamp(6) without time zone ) WITH (OIDS=FALSE); ALTER TABLE territorial OWNER TO postgres; -- Index: territorial_idx1 -- DROP INDEX territorial_idx1; CREATE INDEX territorial_idx1 ON territorial USING btree (cdquadrante, cdquadricula, cdsetor, cdquadra, cdlote); -- Index: territorial_idx2 -- DROP INDEX territorial_idx2; CREATE INDEX territorial_idx2 ON territorial USING btree (cdquadrante, cdquadricula, cdsetor, cdquadra, cdlote, processamento_id); 70 -- Table: edificacao -- DROP TABLE edificacao; CREATE TABLE edificacao ( cdquadrante integer NOT NULL, cdquadricula integer NOT NULL, cdsetor integer NOT NULL, cdquadra integer NOT NULL, cdlote integer NOT NULL, cdunidadeautonoma integer NOT NULL, id_testada bigint NOT NULL, nrmatricula bigint, nroficio smallint, dscomplemento character varying(25), livro integer, folha integer, id_taxa numeric, dtimplantacao integer, dtexercicio integer, dtcancelamento integer, nrareaprivcondhor numeric, nrareacomumcondhor numeric, nrfracaoidealcond numeric(12,4), area_lote numeric(12,4), nrimovel numeric, nrmetrica numeric, requerimento_itbi character varying(30), updated_at timestamp(6) without time zone ) 71 WITH (OIDS=FALSE); ALTER TABLE edificacao OWNER TO postgres; -- Table: unidadeavaliacao -- DROP TABLE unidadeavaliacao; CREATE TABLE unidadeavaliacao ( cdundavaliacao integer NOT NULL, cdunidadeautonoma integer NOT NULL, cdlote integer NOT NULL, cdquadra integer NOT NULL, cdsetor integer NOT NULL, cdquadricula integer NOT NULL, cdquadrante integer NOT NULL, id_forro smallint NOT NULL, id_instsanitaria smallint NOT NULL, id_sotao smallint NOT NULL, id_insteletrica smallint NOT NULL, id_padrao smallint NOT NULL, id_elevador smallint NOT NULL, id_acabamentointerno smallint NOT NULL, id_revestimentointerno smallint NOT NULL, id_disposicao smallint NOT NULL, id_condicaoedificacao smallint NOT NULL, id_revestimentoexterno smallint NOT NULL, id_piso smallint NOT NULL, id_acabamentoexterno smallint NOT NULL, id_tipocobertura smallint NOT NULL, id_cobertura smallint NOT NULL, 72 id_matpredominante smallint NOT NULL, id_estrutura smallint NOT NULL, id_regutilizacao smallint NOT NULL, id_respuso smallint NOT NULL, id_conservacao smallint NOT NULL, id_locpredio smallint NOT NULL, id_afastamentos numeric, id_esquadrias smallint NOT NULL, id_loclote smallint NOT NULL, id_uso smallint NOT NULL, id_tipologia smallint NOT NULL, id_condominio numeric, id_bloco numeric, dscomplemento character varying(25), nrtotalpavimentos smallint, nrpavunidade smallint, nrpavlocalizacao smallint, nranoconstrucao integer, nranoultreforma integer, nranoimplantacao integer, brareaundaval numeric(11,2), nrfracaoideal numeric(12,4), nrareageo numeric(11,2), nrtestada numeric(11,2), dtexercicio numeric, dtimplantacao integer, dtcancelamento integer, dtlicenca timestamp without time zone, nrlicenca integer, dtvistoria timestamp without time zone, nrvistoria integer, dtdemolicao timestamp without time zone, nrdemolicao integer, nrcodmuncontrib integer, 73 dsrazaosocial character varying(255), nrandar smallint, dsapto character varying(10), dssala character varying(10), dsbox character varying(10), tr_fi_terreno_cond numeric, id_cobranca numeric, cdreduzido numeric, processo_cancelamento character varying(40), nrprojeto integer, anoprojeto integer, unificacao character varying(1), updated_at timestamp(6) without time zone ) WITH (OIDS=FALSE); ALTER TABLE unidadeavaliacao OWNER TO postgres; -- Index: undaval_idx_aut -- DROP INDEX undaval_idx_aut; CREATE INDEX undaval_idx_aut ON unidadeavaliacao USING btree (cdquadrante, cdquadricula, cdsetor, cdquadra, cdlote, cdunidadeautonoma); -- Table: pessoa -- DROP TABLE pessoa; CREATE TABLE pessoa ( 74 id_pessoa serial NOT NULL, nmrazaosocial character varying(255), nmfantasia character varying(255), tppessoa bigint, nrrg character varying(20), dtnascimento timestamp without time zone, nrtelefone bigint, nrfax bigint, dsemail character varying(100), nmcontato character varying(35), nrcpfcnpj character varying(30), nrinscricaomunicipal character varying(30), habilitado character varying(1), CONSTRAINT pessoa_pkey PRIMARY KEY (id_pessoa) ) WITH (OIDS=FALSE); ALTER TABLE pessoa OWNER TO postgres; -- Table: pessoa_edificacao -- DROP TABLE pessoa_edificacao; CREATE TABLE pessoa_edificacao ( cdunidadeautonoma integer NOT NULL, cdlote integer NOT NULL, cdquadra integer NOT NULL, cdsetor integer NOT NULL, cdquadricula integer NOT NULL, cdquadrante integer NOT NULL, tpresponsabilidade smallint NOT NULL, id_pessoa integer NOT NULL ) 75 WITH (OIDS=FALSE); ALTER TABLE pessoa_edificacao OWNER TO postgres; -- Table: pessoa_territorial -- DROP TABLE pessoa_territorial; CREATE TABLE pessoa_territorial ( cdlote integer NOT NULL, cdquadra integer NOT NULL, cdsetor integer NOT NULL, cdquadricula integer NOT NULL, cdquadrante integer NOT NULL, tpresponsabilidade smallint NOT NULL, id_pessoa integer NOT NULL ) WITH (OIDS=FALSE); ALTER TABLE pessoa_territorial OWNER TO postgres; CREATE TABLE imovel_avaliado_staging ( razaosocial character varying(255), bairro character varying(255), valor numeric, nraerageo numeric ) WITH (OIDS=FALSE); ALTER TABLE imovel_avaliado_staging OWNER TO postgres; CREATE TABLE imovel_avaliado ( 76 razaosocial character varying(255), bairro character varying(255), valoravaliacao numeric ) WITH (OIDS=FALSE); ALTER TABLE imovel_avaliado OWNER TO postgres; CREATE TABLE bairro ( id_bairro serial NOT NULL, nmbairro character varying(60), CONSTRAINT bairro_pkey PRIMARY KEY (id_bairro) ) WITH (OIDS=FALSE); ALTER TABLE bairro OWNER TO postgres; CREATE TABLE valores_imoveis ( inscricao character varying(510), quadrante numeric, quadricula numeric, setor numeric, quadra numeric, lote numeric, valor numeric ) WITH (OIDS=FALSE); ALTER TABLE valores_imoveis OWNER TO postgres; 77 ANEXO B – Ferramenta Ora2pg Durante nosso estudo, tivemos oportunidade de conhecer o ora2pg, que é uma ferramenta especifica para migração entre os bancos Oracle e PostgreSQL. Não fizemos a utilização de tal ferramenta, pois o propósito principal do trabalho é avaliar as ferramentas de ETL. O ora2pg não faz agregação ou transformação de dados, por isso não pode ser comparado com as demais ferramentas de ETL. O ora2pg foi criado no ano 2000, é uma ferramenta livre para exportar um schema de base de dados Oracle para um schema PostgreSQL compatível. Ele conecta com a base de dados Oracle, extrai sua estrutura, gera um script SQL para ser carregado em uma base de dados PostgreSQL. Ora2Pg consiste em um script Perl (ora2pg) e um modulo Perl (Ora2Pg.pm). a) Tipos de exportações possíveis • Table com constraints • Tablespace • Sequence • Index • Trigger • Grant • Function • Procedure • Package • Partition • Dados b) Características Inclusas • Exportar schema (tabelas, views, sequences, index), com chave primaria, estrangeira, unique e check constraints • Exportar grants/privilegios para usuarios ou grupos • Exportar uma seleção de tabelas (especificando o nome das tabelas) 78 • Exportar um schema Oracle prara um schema PostgreSQL 7.3+ • Exportar funções pré definidas, triggers, procedures e packages • Exportar partição Oracle • Export dados completos ou utilizando clausula WHERE • Suporte para objeto Oracle BLOB como PG BYTEA • Exportar views do Oracle como PG tables • Exportar tipos definidos por usuario do Oracle • Ajuda para converter código PLSQL para PLPGSQL (um pouco de trabalho manual inda é necessário) • Funciona em qualquer plataforma. c) Histórico • 2000: criado • Lançamento oficial: Maio/2001 • 2002: Ora2Pg foi adicionado ao repositório contrib do PostgreSQL v7.2 • 2006: removido do repositório do PostgreSQL v8.2 • 2008: Ora2Pg é movido para PgFoundry • 2010: Website do Ora2Pg passa a ser http://ora2pg.darold.net/ • 2011: Lançamento disponível em SourceForge.net • Versão atual: Ora2Pg 8.8 d) Código • Ora2Pg.pm - Modulo Perl usado para fazer interface com o Oracle que permite toda a migração 79 • Ora2Pg/PSQL.pm - Modulo usado para converter código Oracle PL/SQL em código PLPGSQL • Ora2pg – Perl script used as frontend to the • Ora2pg.conf - Arquivo de configuração usado para definir o comportamento do script Perl ora2pg e as ações a serem executadas e) Pré requisitos • Oracle versão igual ou superior a 8i client ou server • PostgreSQL versão igual ou superior a 8.4 client or server • Perl 5.8+ e modulo Perl DBI/DBD Oracle • Windows: Strawberry Perl 5.10+