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.
- create function MONGO_EMPS( dbName varchar( 330), collectionName varchar( 30))
- returns table
- (
- EMPNO VARCHAR(20),
- ENAME VARCHAR(30),
- SAL NUMERIC(10),
- )
- language java
- parameter style DERBY_JDBC_RESULT_SET
- no sql
- 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;
- use test
- a1 = { EMPNO: "1", ENAME : "Fred", SAL : 10000 }
- a2 = { EMPNO: "2", ENAME : "John", SAL : 2000 }
- db.myStuff.insert( a1 )
- 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;
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.
É 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