sábado, 3 de maio de 2014

Vamos ver como podemos integrar MongoDB usando ODI, em primeiro lugar dar um passo atrás. Derby / JavaDB introduziu funções de tabela, há alguns anos. Tabela de Funções são realmente úteis, que estão no banco de dados Oracle e tão divertido no JavaDB! ODI é uma grande plataforma para integração e JavaDB e  tabela de funções fornecem uma maneira muito legal de integrar APIs Java arbitrários em seus projetos. O que tenho feito aqui é;




  • Construir uma Tabela de funções muito simples  java para projetar uma tabela para representar os documentos em uma coleção MongoDB. A coleção é passada como um parâmetro para o KM e os nomes de coluna são as chaves para o documento MongoDB. Os dados provêm de valores.

  • Construir um LKM muito simples a partir de uma função de tabela Java para SQL



Tudo isso vai usar o JavaDB na memória, de forma que nenhum admin, simples de usar.  A classe mongo_table eu escrevi usa a classe EnumeratorTableFunction. A classe MongoDB dbcursor é um Java Iterator, o que o torna muito bom para passar para a classe EnumeratorTableFunction, e deixá-lo fazer todo o trabalho.


O LKM construido declara a função de tabela para JavaDB / Derby, por exemplo abaixo, a função é declarada com base no nome da fonte de armazenamento de dados (MONGO_EMPS) e colunas (meu armazenamento de dados de origem tem EMPNO, ENAME, SAL, observe a função de tabela, na verdade, vai projetar tipos definidos em armazenamento de dados do ODI), a função tem o nome de banco de dados MongoDB e nome da coleção como parâmetros.




  1. create function MONGO_EMPS( dbName varchar( 330), collectionName varchar( 30))

  2. returns table

  3. (

  4.   EMPNO VARCHAR(20),

  5.   ENAME VARCHAR(30),

  6.   SAL NUMERIC(10),

  7. )

  8. language java

  9. parameter style DERBY_JDBC_RESULT_SET

  10. no sql

  11. external name 'mongo_table.readCollection'


Em seguida, o código real para usar a função como uma fonte é executado a partir de uma tarefa de origem (o alvo é o SQL como mencionei anteriormente para a LKM). Abaixo você pode ver minha execução usando o MongoDB teste ea coleta mystuff;


Nota : Também podemos executar alguma filtragem como um exemplo, aqui ele está sendo feito em JavaDB e no meu caso a sua in-memory. Nenhuma configuração,apenas na persistência Java on the fly. Idealmente, eu iria forçar o filtro para baixo do MongoDB em vez de ler e filtrar no driver.


Eu defini os meus documentos no MongoDB usando os seguintes comandos básicos do shell mongo;

  1. use test

  2. a1 = { EMPNO: "1", ENAME : "Fred", SAL : 10000 }

  3. a2 = { EMPNO: "2", ENAME : "John", SAL : 2000 }

  4. db.myStuff.insert( a1 )

  5. db.myStuff.insert( a2 )


No ODI, eu posso simplesmente em seguida, usar o armazenamento de dados que representa a coleção MongoDB de documentos em uma interface e mapeá-lo para o meu alvo;

odi_mongodb_1

 

O projeto físico usa a função LKM JavaTable para SQL KM e define as bases de dados MongoDB, cobrança e o nome da função de tabela Java.

odi_mongodb_2

 

É isso aí. Bastante simples e estamos lendo e consumindo documentos MongoDB.  O outro ponto aqui é que este é um LKM genérico que você pode conectar outras funções arbitrárias de tabela - assim você pode utilizar de qualquer API, é muito simples. Para o LKM eu criei, eu apenas 2 parâmetros definidos (porque minha função de tabela só tinha dois), mas realmente precisamos de uma melhor maneira de lidar com isso e garantir que eles são ignorados se não definidos, etc Isso é tudo uma questão de aperfeiçoar, de qualquer maneira você pode ver tudo com um pequeno pedaço de código alavancar JavaDB!

0 comentários:

Postar um comentário

Blog Archive

SmarttNet Solution Provider. Tecnologia do Blogger.

Postagens populares

Twitter MongoDBBrazil

Total de visualizações de página