kettle 从hive中读取数据并写入MongoDB

时间:2024-03-22 07:14:14

kettle 从hive中读取数据并写入MongoDB有两种方法

1.方法一,流程图 :

kettle 从hive中读取数据并写入MongoDB

2. 下面分析每个流程的具体做法:

2.1 查询数据库中的内容,由于后面想要单独的字段date作为索引,所以直接在查询表的时候增加一个字段就可以。在该步骤中要确保数据库能够连上。
kettle 从hive中读取数据并写入MongoDB

2.2 json输出(注意箭头指向的两个地方),这个步骤主要将字段组合为json,因为json需要的是将字段info,count_info所有的数据整合为一条json,所以在设置中要把数据条目设为0或者空值,所以该步骤中只需要这两个字段。运行到该步骤显示结果中只有outputValue字段,单独的字段是null,而且在outputValue结果中不见date字段是因为在字段选择中只选了前两个字段。
kettle 从hive中读取数据并写入MongoDB
kettle 从hive中读取数据并写入MongoDB
kettle 从hive中读取数据并写入MongoDB
2.3 因为json输出后date值为空,因此后面还需要将该值设定一个值,我们取一个变量。值替换${ETL_DT}为自定义的变量。
kettle 从hive中读取数据并写入MongoDB
2.4 mongodb输出
该步骤要确保能够连上mongdb,同时要注意红色方框的内容,Truncate collection是每次清空该表,
打上勾的地方表示是否需要删除collection和是否需要插入更新功能,打上勾都表示“是”。(本人这不需要每次清空,所以Truncate collection 不需要打上勾)
kettle 从hive中读取数据并写入MongoDB

这一步是选择输出的字段,第一个field是kettle流中的字段,第二个field是mongo文档中的字段,需要注意的是第五个字段Match field for upsert,即是否作为更新参照字段,第六个field是标记字段是更新还是插入,或者有则更新无则插入。和关系型数据库的update语句功能一致:update table set col_1 = col_2 where col_3 = col_4 。
本文需要根据date来更新数据所以Match field for upsert 要选Y.
kettle 从hive中读取数据并写入MongoDB

在第四个选项卡就是我们索引功能,在此必须得提一下,mongo的collection不需要写脚本创建,所以索引也不需要脚本,可以直接在MongoDB Output中创建。索引中中的1表是升序,-1表示降序。也可以创建复合索引.。本文将date设为索引并降序
kettle 从hive中读取数据并写入MongoDB

3. 方法2 流程图 (直接使用mongoDB output 插件路径组合)参考[3]

kettle 从hive中读取数据并写入MongoDB

表输入的数据为:
kettle 从hive中读取数据并写入MongoDB

在该步骤中要选择下图所示的对勾,Modifer update,要不然操作不成功。
kettle 从hive中读取数据并写入MongoDB

在该图总,Match field for update中选Y代表是根据这个字段进行的匹配值。对于插入数组,要先将字段插入array[0] 操作为setModifierpolicyinsert.push将后面的数字值放进去。
kettle 从hive中读取数据并写入MongoDB
Mongodb插入结果为:
kettle 从hive中读取数据并写入MongoDB

参考
1. http://blog.csdn.net/u013226462/article/details/50251181
2 .http://www.ukettle.org/forum.php?mod=viewthread&tid=9&extra=page%3D1&page=1&_dsign=d6e325b4
3. http://wiki.pentaho.com/display/EAI/MongoDB+Output(官网)