kettle - 清洗 mongodb 数据案例

news2024/11/17 0:05:10

文章目录

  • 前言
      • kettle - 清洗 mongodb 数据案例
        • 一、需求
        • 二、kettle开发
          • 1、新建mongodb数据查询
          • 2、配置kettleTest集合与清洗后kettleTestClear集合字段映射
          • 3、根据_id进行排序
          • 4、使用java脚本将日期格式化
          • 5、进行字段选择
          • 6、将delete字段进行值映射
          • 7、mongo输出
          • 8、最后加一个写日志组件方便记录
        • 三、测试
        • 到此案例演示结束!!!

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


kettle - 清洗 mongodb 数据案例

一、需求

需求:将 mongodb kettleTest集合脏数据 整理 到 kettleTestClear集合中
mongodb 待清洗的数据:
db.kettleTest.find();

[
  {
    "_id": "12",
    "_class": "com.yzy.mongodb.model.KettleTestModel",
    "createTime": {"$date": "2022-12-28T10:01:38.989Z"},
    "delete": false,
    "kettleVo": {
      "list": ["1"],
      "key": "a",
      "code": "A"
    },
    "name": "哈哈"
  },
  {
    "_id": "13",
    "_class": "com.yzy.mongodb.model.KettleTestModel",
    "createTime": {"$date": "2022-12-28T10:01:42.001Z"},
    "delete": false,
    "kettleVo": {
      "list": ["1", "2"],
      "code": "B"
    },
    "name": "一模块"
  },
  {
    "_id": "14",
    "_class": "com.yzy.mongodb.model.KettleTestModel",
    "createTime": {"$date": "2022-12-28T10:01:45.004Z"},
    "delete": false,
    "kettleVo": {
      "key": "c",
      "code": "C"
    },
    "name": "萨迪"
  },
  {
    "_id": "23",
    "_class": "com.yzy.mongodb.model.KettleTestModel",
    "delete": false,
    "kettleVo": {
      "key": "d",
      "code": "D"
    },
    "name": "都是"
  },
  {
    "_id": "15",
    "_class": "com.yzy.mongodb.model.KettleTestModel",
    "createTime": {"$date": "2022-12-28T10:01:51.013Z"},
    "delete": false,
    "name": "是南方"
  }
]

需求点:
1)待清洗集合和清洗后集合字段映射关系:
kettleTest.createTime -> kettleTestClear.createTime
kettleTest.name -> kettleTestClear.name
kettleTest.kettleVo.key -> kettleTestClear.key
kettleTest.kettleVo.code-> kettleTestClear.code
kettleTest.kettleVo.list -> kettleTestClear.list
kettleTest.delete -> kettleTestClear.delete
2)只清洗kettleTest.delete:false 的数据;
3)同时将delete字段的值映射后导入kettleTestClear集合中,映射关系: true:0,false:1;
4)根据_id进行排序后存入kettleTestClear集合;

二、kettle开发

整体流程:
在这里插入图片描述

1、新建mongodb数据查询

查询kettleTest.delete:false的数据:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、配置kettleTest集合与清洗后kettleTestClear集合字段映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:
1、_id放在最上面,因为它永远不会为空;
2、其中createTime这里是重点要加.$date;

3、根据_id进行排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、使用java脚本将日期格式化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.text.ParseException;
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd  HH:mm:ss.SSS");
private static final String TIME_LINE = "yyyy-MM-dd'T'HH:mm:ss.SSSXX";
public static String dateToString(Date date) {
           return sdf.format(date);
}
public static Date stringToDate(String date, String format) throws  ParseException {
      DateFormat dateFormat = new SimpleDateFormat(format);
      dateFormat.setLenient(false);
      return dateFormat.parse(date);
}
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws  KettleException,ParseException {
  if (first) {
    first = false;
  }
  Object[] r = getRow();
  if (r == null ) {
    setOutputDone();
    return false;
  }
   
  r = createOutputRow(r, data.outputRowMeta.size());
  String createTime = get(Fields.In, "createTime").getString(r);
  if(null != createTime && "" != createTime){
    //时间格式化
    get(Fields.Out, "createTime").setValue(r,  dateToString(stringToDate(createTime,TIME_LINE)));
  }else{
    get(Fields.Out, "createTime").setValue(r, null);
  
  }
  logBasic("----------"+createTime+"---------------");
  putRow(data.outputRowMeta, r);
  return true;
}
5、进行字段选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、将delete字段进行值映射

选择值映射
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、mongo输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用Get DBs按钮和Get collection按钮分别检索选定数据库中现有数据库和集合,如果输入一个集合名字,这个集合名字在数据库中不存在,那么会自动创建一个集合,并且将对应数据插入该集合中。

Truncate collection 如果勾上之后,在插入目标集合之前会把集合数据清空,然后再插入

这里有个问题?
kettleTest.kettleVo.list -> kettleTestClear.list
会从List类型变成String类型,因为我在输出流字段配置中没有发现Object,所以没有找到好的办法,也许有大佬知道如何去做,
那麻烦告知一下,共同进步哈。

8、最后加一个写日志组件方便记录

在这里插入图片描述
在这里插入图片描述

三、测试

执行kettle:
在这里插入图片描述
查看执行后的结果:
在这里插入图片描述

到此案例演示结束!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解哨兵之间是如何通信的

基于 pub/sub 机制的哨兵集群组成 哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。 哨兵只要和主库建立起了连接,就可以在主库上发布消息了,比如说发布它自己的连接信息(IP 和…

PDF如何转换成PPT?教你们几个简单方法

我们在工作经常用PDF文件进行传输,因为PDF体积小,传输速度很快,还不会不同设备上出现不兼容的问题,可以很好的保持文件的排版,不过我们有时候需要进行文件的展示,所以需要将PDF文件转换为PPT文件&#xff0…

2023河南/北京/重庆/南京DAMA-CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

论文阅读——Recognizing Emotion Cause in Conversations

文章目录摘要引言相关工作任务定义构造RECCON数据集情绪原因的类型实验任务1:Causal Span Extraction模型任务2:Causal Emotion Entailment模型面临的挑战摘要 识别文本中情绪背后的原因是NLP中一个未被探索的研究领域。这个领域的发展具有着改善情感模…

Docker基础1-3

Docker基础1-3 时间:2023-01-02 https://www.bilibili.com/video/BV1gr4y1U7CY/ xmind文档:https://www.aliyundrive.com/s/6iaQt9zLDVm 一、Docker简介 1、Docker解决了什么问题 Docker打破了过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外&am…

LeetCode:15. 三数之和

15. 三数之和1)题目2)思路3)代码4)结果1)题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] …

【Nginx】核心配置文件结构

文章目录Nginx核心配置文件结构全局块user指令work process指令其他指令events块events指令配置实例http块定义MIME-Type自定义服务日志其他配置指令server块和location块Nginx服务器基础配置实例Nginx核心配置文件结构 从前面的内容学习中,我们知道Nginx的核心配置…

给力!低代码开发平台广州流辰信息科技助您增辉创价值!

低代码平台开发公司流辰信息深耕行业多年,一直以市场为导向,凭借敏锐的市场洞察力砥砺前行、拼搏进取,提升研发创新能力,广州流辰信息科技与各新老客户朋友风雨同舟,携手共创宏伟新蓝图! 一、熔铸前沿科技 …

kettle的安装以及注意(迭代中....)

1、下载 kettle的官网下载地址:Pentaho from Hitachi Vantara - Browse Files at SourceForge.net 如果需要下载其他版本: 直接点击对应的版本Name(8.0以下的实在Data Integration文件夹里面)进去,再选择client-too…

【C++】代码调试的学习笔记

1. IO输出调试:输出重定向 在《第八期-C基础与深度解析》课程中,老师使用了“输出重定向”的语句来查看cout和cerr的结果: ./HelloWorld >txt1 2>txt2 代码含义:将程序HelloWorld的标准输出stdout重定向至文件txt1&#xf…

百趣代谢组学分享:从SWATH到MRM:一种新型高覆盖度靶向代谢组学技术

百趣代谢组学文献分享,SWATHtoMRM: Development of High-Coverage Targeted Metabolomics Method Using SWATH Technology for Biomarker Discovery,是由中国科学院生物与化学交叉研究中心,Dr. Zheng-Jiang Zhu课题组发表在AC上的一篇技术型文…

verilog学习笔记- 3)SignalTap II 软件的使用

目录 SignalTap II简介: SignalTap II使用: SignalTap II简介: SignalTap II 全称 SignalTap II Logic Analyzer,是第二代系统级调试工具,可以捕获和显示实时信号,是 一款功能强大且极具实用性的 FPGA 片…

IO模型详解

什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟IO模型有什么关系?有几种经典IO模型呢?BIO、NIO、AIO到底有什么区别的? 什么是IO呢? IO,英文全称是Input/Output,翻译过来就是输入/输出。平时我们听得挺多,就是什么磁盘IO,网络I…

LCHub:2023年低代码开发平台市场规模将增长25%至100亿美元

随着企业希望变得更加敏捷、业务流程更加自动化,并创建新的Web和移动应用来满足消费者的需求,自动化开发工具正在成为关键因素,尤其在IT人才持续短缺的情况下。 根据调研机构最近进行的一项研究,面对持续的IT技能短缺,低代码和无代码平台等能够实现流程自动化并使员工能…

便捷生活,你我共享 | 美格智能Cat.1模组为共享经济赋能

近年来,共享经济在国内的兴起,主要基于两大优势,一是资源共享,为人们的生活带来便捷;二是绿色低碳,符合社会的发展潮流。作为近年来经济发展的新业态,共享经济的快速普及,以及带来的…

SpringMVC的请求参数传递

1,简单参数类型 单个参数 发送: http://localhost/commonParam?nameitcast接收: Controller public class UserController {RequestMapping("/commonParam")ResponseBodypublic String commonParam(String name){System.out.pr…

LeetCode:12. 整数转罗马数字

12. 整数转罗马数字1)题目2)思路3)代码4)结果1)题目 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。 字符 数值 I 1 V …

带有数字化伪装外观,全新ID.7轿车即将全球首发

一切就绪,ID.7即将出场!今年的CES展会将于2023年1月5日至8日在拉斯维加斯举行。展览期间,大众汽车集团(美国)将展出基于模块化电驱动平台(MEB)打造的首款纯电三厢轿车。展车将采用智能伪装外观&…

Vue3+TS封装axios

1.实现最基础的封装 将其封装为一个类,而不是一个函数的原因是因为类可以创建多个实例,适用范围更广,封装性更强一些。 index.ts // index.ts import axios from axios import type { AxiosInstance, AxiosRequestConfig } from axiosclas…