sábado, 3 de maio de 2014

Eu tenho experimentado com outro manipulador de armazenamento Hive, desta vez para MongoDB, existem alguns por aí incluindo este de MongoDB. O que eu tenho vindo a utilizar suporta tipos primitivos básicos e também suporta ler e escrever - usando a abordagem padrão de classe manipulador de armazenamento e propriedades personalizadas para descrever a máscara de dados. Isso, então, permite que você acesse MongoDB via tabela externa do Hive com muita facilidade e abstrair muita complexidade de integração - também torna ideal para uso em ODI. Estou utilizando uma VM Linux onde tenho Hive  para acessar meu MongoDB em outra máquina. O manipulador de armazenamento é encontrado aqui, eu usei-o para acessar o mesmo exemplo, eu o que escrevi a seguir é a definição da tabela externa;



  1. ADD JAR /home/oracle/mongo/hive-mongo.jar;


  2. create external table mongo_emps(EMPNO string, ENAME string, SAL int)

  3. stored by "org.yong3.hive.mongo.MongoStorageHandler"

  4. with serdeproperties ( "mongo.column.mapping" = "EMPNO,ENAME,SAL" )

  5. tblproperties ( "mongo.host" = "<my_mongo_ipaddress>", "mongo.port" = "27017",

  6. "mongo.db" = "test", "mongo.collection" = "myColl" );


Muito simples. O aspecto agradável da tabela externa Hive são os SerDeProperties que podem ser especificados, muito simples, mas fornece uma abordagem flexível agradável. Posso, então, fazer engenharia reversa em ODI  e usá-lo em meus mapeamentos de integração Hive a ler e escrever, potencialmente para MongoDB.

Os tipos primitivos suportados também pode projetar tipos de documentos aninhados, assim, por exemplo, no documento abaixo (retirado daqui), nome, contribuições e prêmios são strings, mas têm estruturas JSON;

  1. {

  2. "_id" : 1,

  3. "name" : {

  4. "first" : "John",

  5. "last" :"Backus"

  6. },

  7. "birth" : ISODate("1924-12-03T05:00:00Z"),

  8. "death" : ISODate("2007-03-17T04:00:00Z"),

  9. "contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],

  10. "awards" : [

  11. {

  12. "award" : "W.W. McDowellAward",

  13. "year" : 1967,

  14. "by" : "IEEE Computer Society"

  15. },

  16. {

  17. "award" : "National Medal of Science",

  18. "year" : 1975,

  19. "by" : "National Science Foundation"

  20. },

  21. {

  22. "award" : "Turing Award",

  23. "year" : 1977,

  24. "by" : "ACM"

  25. },

  26. {

  27. "award" : "Draper Prize",

  28. "year" : 1993,

  29. "by" : "National Academy of Engineering"

  30. }


  31. }


pode ser processado com a seguinte definição tabela externa, a qual, em seguida, pode ser utilizado em ODI;

  1. create external table mongo_bios(name string, birth string, death string, contribs string, awards string)

  2. stored by "org.yong3.hive.mongo.MongoStorageHandler"

  3. with serdeproperties ( "mongo.column.mapping" = "name,birth,death,contribs,awards" )

  4. tblproperties ( "mongo.host" = "<my_ip_address>", "mongo.port" = "27017",

  5. "mongo.db" = "test", "mongo.collection" = "bios" );


Tudo muito simples e é isso que a torna tão atraente. De qualquer forma, essa é uma rápida seguinte sobre o uso de tabelas externas com MongoDB e Hive para a abordagem orientada SQL eu descrevi aqui utilizou funções de uma tabela java.

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