kettle 把MongoDB数据迁移到hbase

1.数据结构:

MongoDB数据结构,需要把mongoDataList里的每一个dataIID转换为列名,列名的名称需要在SQL Server中进行查询。

kettle 把MongoDB数据迁移到hbase_第1张图片

 2.问题: 因为每个存储内容名称一样,list中默认getfiled取到第一个内容,需要遍历

kettle 把MongoDB数据迁移到hbase_第2张图片

 3.步骤

  • 把list中的列都遍历出来
  • 用遍历出来的列id在sqlserver中查询id对应的Name
  • 把name赋值为列名,把之前的datavalue赋值为值
  • 导入hbase

4.操作:

4.1把list中的列全都遍历出来

 

kettle 把MongoDB数据迁移到hbase_第3张图片

发现java中的输入的列名还是只有这几个,因为输入是从前边读取的,所以肯定要在mongDB中进行查询,输出各种列的信息了!

但是还是不行,因为无论如何因为重名会导致输出filed都变为一个

最后询问网友发现!!!!!!!!!

kettle 把MongoDB数据迁移到hbase_第4张图片

 这样就可以了!!!!!要去掉$然后加【*】就可以了,类似于正则表达式!!

出来后的结果如图!取了一个list中有四个变量的表,可以看出有四个变量显示了已经!

kettle 把MongoDB数据迁移到hbase_第5张图片

4.2导出monogDB中的dataID,然后在SQL中查询获取ID对应的Name.

因为查询出ID重复,用唯一行(哈希值)转化取出不重复的dataIID,然后用字段选择,选出ID列

又因为只要ID所以查询前几十行就可以,这样就避免查询所有出现速度慢,需要设置!!

 最终需要一个ID对应Name的表去改列名,所以需要保存这个结果,动态的话需要每次跟新,所以想法是做一个中间表,每次删除然后更新,之后在表中取数据就ok!

 

kettle 把MongoDB数据迁移到hbase_第6张图片

 !!!!重点:不要把删除中间表和更新中间表的写在一起,因为带入参数多个时sql会执行多次,这样的话每次都会删除中间表!!!!

kettle 把MongoDB数据迁移到hbase_第7张图片

 最后生成的中间Sql表为

kettle 把MongoDB数据迁移到hbase_第8张图片

 4.3查询MongoDB,然后代替列名!

现在从mongDB中读取到的数据如图

kettle 把MongoDB数据迁移到hbase_第9张图片

 我想要的效果如图,怎么转换呢!!!

RowKey MissionID                            dataValue
timeStamp missionID item_name1 item_name2 item_name3
         
         
         

 

 所以Hbase的输入应该这样格式:要转换行列

kettle 把MongoDB数据迁移到hbase_第10张图片

所以MongDb 搜出的数据结构应该为

kettle 把MongoDB数据迁移到hbase_第11张图片

但是每一个手输列名是不现实的,而且主要是列名对应的ID必须要对应,这里看不出列名,所以要对字段进行行列转换

kettle 把MongoDB数据迁移到hbase_第12张图片

列转行:https://www.jianshu.com/p/be89b6a6404f

kettle 把MongoDB数据迁移到hbase_第13张图片

输出的txt文件为:

这样才符合habse存储的格式!!!

 

之后把项ID和项Name的表导出到xml,进行查询时先查xml对应的ID,然后再进行列名查询

 

 

5.最终结果

 

 

你可能感兴趣的:(大数据)