kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中
每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。
放弃不难,但坚持很酷~
最近有一个将 mysql 数据导入到 MongoDB 中的需求,打算使用 Kettle 工具实现。本文章记录了数据导入从 0 到 1 的过程,最终实现了每秒钟快速导入约 1200 条数据。一起来看吧~
一、Kettle 连接图
简单说下该转换流程,增量导入数据:
1)根据 source 和 db 字段来获取 MongoDB 集合内 business_time 最大值。
2)设置 mysql 语句
3)对查询的字段进行改名
4)过滤数据:只往 MongoDB 里面导入 person_id,address,business_time 字段均不为空的数据。
符合过滤条件的数据,增加常量,并将其导入到 mongoDB 中。
不符合过滤条件的数据,增加常量,将其导入到 Excel 表中记录。
二、流程组件解析
1、MongoDB input
1)Configure connection
Host name(s) or IP address(es):网络名称或者地址。可以输入多个主机名或IP地址,用逗号分隔。还可以通过将主机名和端口号与冒号分隔开,为每个主机名指定不同的端口号,并将主机名和端口号的组合与逗号分隔开。例如,要为两个不同的MongoDB实例包含主机名和端口号,您将输入localhost 1:27017,localhost 2:27018,并使 Port 字段为空。
Port:端口号
Username:用户名
Password:密码
Authenticate using Kerberos:指示是否使用Kerberos服务来管理身份验证过程。
Connection timeout:连接超时时间(毫秒)
Socket timeout:等待写操作(以毫秒为单位)的时间
2)Input options
Database:检索数据的数据库的名称。点击 “Get DBs” 按钮以获取数据库列表。
Collection:集合名称。点击 “Get collections” 按钮获取集合列表。
Read preference:表示要先读取哪个节点。
Tag set specification/#/Tag Set:标签允许您自定义写关注和读取副本的首选项。
3)query
根据 source 和 db 字段来获取 bussiness_time 的最大值,Kettle 的 MongoDB 查询语句如下图所示:
对应的 MongDB 的写法为:
记得勾选 Query is aggregation pipeline 选项:
4)Fields
取消选中 Output single JSON field ,表示下一组件接收到的结果是一个 Number 类型的单值,否则就是一个 json 对象。
2、表输入
设置 mysql 数据库 jdbc 连接后,填好 SQL 语句之后,在下方的“从步骤插入数据”下拉列表中,选中“MongoDB input”。“MongoDB input” 中的变量,在 SQL 语句中用 ? 表示,如下图所示:
如果导数的时候发生中文乱码,可以点击 编辑 ,选择 数据库连接 的 选项,添加配置项:characterEncoding utf8,即可解决。如下图所示:
3、字段选择
如果查询出来的列名需要更改,则可以使用“字段选择”组件,该组件还可以移除某字段,本次应用中,主要使用该组件将字段名进行修改。如下图所示:
4、过滤选择
只保留 person_id,address,business_time 字段都不为空的数据:
5、增加常量
很简单,在“增加常量”组件内设置好要增加常量的类型和值即可。
6、Excel 输出
添加“Excel 输出”,设置好文件名,如果有必要的话还可以设置 Excel 字段格式,如下图所示:
7、MongoDB output
1)Configure connection
如下图所示,由于一开始就介绍了 MongoDB 的连接方式,所以在这里不在赘述。
2)Output options
Batch insert size:每次批量插入的条数。
Truncate collection:执行操作前先清空集合
Update:更新数据
Upsert:选择 Upsert 选项将写入模式从 insert 更改为 upsert(即:如果找到匹配项则更新,否则插入新记录)。使用前提是 勾选 Update 选项。
Muli-update:多次更新,可以更新所有匹配的文档,而不仅仅是第一个。
3)Mongo document fields
根据 id、source、db 字段插入更新数据,如下图所示:
更多 MongoDB output 可参考:
https://wiki.pentaho.com/display/EAI/MongoDB+Output
三、索引优化
1、mysql
为 mysql 查询字段添加索引。(略)
2、MongoDB
对 MongoDB 查询做优化,创建复合索引:
对于 MongoDB input 组件来说,会关联查询出 business_time 最大值,所以要创建复合索引,创建复合索引时要注意字段顺序,按照查询顺序创建:
db.trajectory_data.createIndex({source: 1, db: 1, business_time: 1})
对于 MongoDB output 组件来说,因为已经设置了 插入或更新 数据的规则,也会涉及到查询,所以再设置一个复合索引:
db.trajectory_data.createIndex({id: 1, source: 1, db: 1})
四、运行
运行前,需要在集合内插入一条含 business_time 字段的 demo 数据,否则 MongoDB input 会因为查不到数据而报错:
db.trajectory_data.insert({ id: 0, source: 'xx数据', db: "17-db2", business_time: 0})
成功插入数据后,执行该转换:
可视化操作
命令行操作:${KETTLE_HOME}/pan.sh -file=xxx.ktr
可通过点击 “执行结果” --> “步骤度量” 来查看各组件运行状态,如下图所示:
24 分钟共导了 172 万的数据,每秒钟约导入 1200 条数据。
这样子,这个转换基本就算完成了。可以在 linux 上写一个定时任务去执行这个转换,每次转换 mysql 都会将大于 mongoDB 集合中 business_time 字段最大值的数据增量导入到 MongoDB 中。
五、不足
像上述的 Kettle 流程也是有不足的。假如一次性拉取的数据量过大,很有可能导致 Mysql 或 Kettle 内存溢出而报错。所以上述流程只适合小数据量导入。大数据量导入的话还是建议分批次导入或者分页导入,大家可以关注我,我会持续更新技术干货哦 ~
热 文 推 荐 ☞ 【实战】Kettle自定义jar包供JavaScript使用☞ HBase原理(一):架构理解☞ Kafka消费者 之 指定位移消费☞ 都快2020年了,ambari自定义服务集成,你还没掌握吗?文末有福利☞Ambari2.6.1集成Apache Kylin服务☞Elasticsearch 6.x 配置详解☞看完您如果还不明白 Kerberos 原理,算我输!☞ 用心整理 | Spring AOP 干货文章,图文并茂,附带 AOP 示例 ~☞Spring IOC,看完这篇文章,我才算是懂了!
欢迎大家留言讨论
? ? ?
你点的每个“在看”,我都认真当成了喜欢
kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中相关推荐
- mysql中大数据表alter增加字段报错:1034 Incorrect key file for table 'table_name'; try to repair it...
mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...
- linux系统sql语句报错_在linux下写的mysql无法插入,sql语句在复制中变'脏'了.
1:问题故障描述 因为在linux下开发,所以修改mysql字段的时,用的phpmyadmin来直接修改生成修改后的sql,然后复制进word(libreoffice)后提交到项目管理系统, 同事发到 ...
- mysql 结束符报错_【踩坑记录】MySQL 实现自定义递归函数
因项目需要,需根据某个商品类别path,查询该类别下的所有子类别 表 goods-categories(path,parent_id,id) 该处使用的表为临时创建的表 t1(id,parent_i ...
- Kettle安装完报错:Driver class org.gjt.mm.mysql.Driver could not be found
今天安装Kettle使用,下载解压到本地后双击Spoon.bat 打开应用 首先测试连接Mysql,但是报错,这时候知道他没有需要的Connection包,到Mysql官网下载后,这里我的Mysql是 ...
- mysql设置了utf8mb4还是报错_第07期:有关 MySQL 字符集的 SQL 语句
本篇为理清字符集的续篇(上一篇:第06期:梳理 MySQL 字符集的相关概念),重点讲述字符集涉及到的 sql 语句用法. 一.character introducer翻译过来就是字符引导.也就是针对 ...
- naticat连接mysql报错_「2509」Navicat连接mysql报错2509 - seo实验室
2509 在Navicat中进行连接测试时,发现报错2509,还有乱码! mysql 2509 加密方式导致的报错,在8以后的版本默认的加密方式都改为了caching_sha2_password 此时 ...
- mysql建立存储过程报错_【松勤教育】MySQL如何创建存储过程
工作中有时候需要自己去创建存储过程,然后调用存储去获得一些数据等,接下来就给大家介绍下MySQL如何创建存储过程. 语法: CREATE PROCEDURE 存储程名([[IN|OUT|INOUT] ...
- 达梦数据库修改字段长度_解决达梦数据库新增大字段报错问题
使用达梦数据库穿件新表后往新表中增加TEXT类型字段报错,错误信息如下: 错误号: -3243 错误消息: 第1 行附近出现错误: 表[TABLE_2]中不能同时包含聚集KEY和大字段 ------- ...
- Kettle闪退,以及Kettle资源库connect报错小解
Kettle闪退 ####### A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) ...
最新文章
- HACKER'S DELIGHT[算法心得]笔记
- ABAP,Java, nodejs和go语言的web server编程
- .NET6之MiniAPI(十八):OpenAPI swagger
- 微信小程序 禁止弹框下面的内容滑动 弹窗禁止底部内容滚动
- 软件质量模型(学习笔记)
- redhat 6安装mysql5.7_RedHat6.5/CentOS6.5安装Mysql5.7.20的教程详解
- ubuntu 16.04安装网易云音乐
- [No000045]最好的休息,不是睡觉!
- UA OPTI512R 傅立叶光学导论1 为什么光学需要傅立叶变换
- Echarts正态分布曲线
- 西安华为 java研发工程师_【华为西安研究所工资】研发工程师待遇-看准网
- JMeter工具:场景设计,场景设置,场景运行,性能参数配置,测试监控
- 使用NGUI实现拖拽功能(拼图小游戏)
- bypy更换绑定的百度云盘账户
- eclipse中的特殊注释TODO FIXME XXX
- NE(Network Embedding)论文小览
- C语言 打开文件时改变文件大小
- 来自作业本的写给90后
- WiderPerson行人检测数据集
- 二.MUI框架 开始体验MUI
热门文章
- html怎么在字体中加波浪线,CSS3实现文字波浪线效果
- echarts 生成 迁徙图_echarts3 迁徙图 迁入迁出(示例代码)
- python autoit上传文件_结合python+selenium使用AutoIt V3实现文件、图片上传
- Navicat Error 2003 - can't connect to mysql server 'localhost' (10061)
- linux系统安装佳能打印机驱动,在ubuntu16.04 64-bit上安装佳能打印机驱动Linux_UFRII_PrinterDriver_V320_us_EN...
- java httpclient 关闭_【Java系列007】HttpClient调用:你考虑过关闭连接、并发了吗?...
- linphone-android移植
- html5教学文档笔记,4.HTML 教程- (HTML5 基础)
- 【转】Magento2 安装系列一 虚拟机、CentOS7 安装
- Web服务器控件和HTML控件的区别与联系