kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中

e7f54a09f5040cc050e9c407c472d79c.gif

每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

最近有一个将 mysql 数据导入到 MongoDB 中的需求,打算使用 Kettle 工具实现。本文章记录了数据导入从 0 到 1 的过程,最终实现了每秒钟快速导入约 1200 条数据。一起来看吧~

一、Kettle 连接图

cfec761f4c874ea854933976276c788a.png

简单说下该转换流程,增量导入数据:

1)根据 source 和 db 字段来获取 MongoDB 集合内 business_time 最大值。

2)设置 mysql 语句

3)对查询的字段进行改名

4)过滤数据:只往 MongoDB 里面导入 person_id,address,business_time 字段均不为空的数据。

  • 符合过滤条件的数据,增加常量,并将其导入到 mongoDB 中。

  • 不符合过滤条件的数据,增加常量,将其导入到 Excel 表中记录。

二、流程组件解析

1、MongoDB input

1)Configure connection
60ba724a30099c9c4ad9e3d791df9658.png
  • 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
c18c8563d5d458b2d4136f5c237b2c0f.png
  • Database:检索数据的数据库的名称。点击 “Get DBs” 按钮以获取数据库列表。

  • Collection:集合名称。点击 “Get collections” 按钮获取集合列表。

  • Read preference:表示要先读取哪个节点。

  • Tag set specification/#/Tag Set:标签允许您自定义写关注和读取副本的首选项。

3)query

根据 source 和 db 字段来获取 bussiness_time 的最大值,Kettle 的 MongoDB 查询语句如下图所示:

93a2d7ce84f043f752be2dde4bd40528.png

对应的 MongDB 的写法为:

9c15787992ed1bb8e9fa66889e602090.png

记得勾选 Query is aggregation pipeline 选项:

ada1617d067d374465645bd58523e3d6.png
4)Fields

取消选中 Output single JSON field ,表示下一组件接收到的结果是一个 Number 类型的单值,否则就是一个 json 对象。

d158d273f6a63e7530d1946131a9bf31.png

2、表输入

设置 mysql 数据库 jdbc 连接后,填好 SQL 语句之后,在下方的“从步骤插入数据”下拉列表中,选中“MongoDB input”。“MongoDB input” 中的变量,在 SQL 语句中用 ? 表示,如下图所示:

a1936810d6a6abe9b5b4b0bf790ccc02.png

如果导数的时候发生中文乱码,可以点击 编辑 ,选择 数据库连接 的 选项,添加配置项:characterEncoding utf8,即可解决。如下图所示:

56569a96f946d89b2623a243f2929893.png

3、字段选择

如果查询出来的列名需要更改,则可以使用“字段选择”组件,该组件还可以移除某字段,本次应用中,主要使用该组件将字段名进行修改。如下图所示:

ae844a4b762cc56c5d57e562b6244ce2.png

4、过滤选择

只保留 person_id,address,business_time 字段都不为空的数据:

020113ff34d35a6d0186b7b8e0f88a6f.png

5、增加常量

很简单,在“增加常量”组件内设置好要增加常量的类型和值即可。

af122e3115ec63cef17d8d84c0562e96.png

6、Excel 输出

添加“Excel 输出”,设置好文件名,如果有必要的话还可以设置 Excel 字段格式,如下图所示:

eb8853f74f9c2300c41ab6c2c054e17d.png

7、MongoDB output

1)Configure connection

如下图所示,由于一开始就介绍了 MongoDB 的连接方式,所以在这里不在赘述。

41000749660f3a504a51a6fb8055347f.png
2)Output options
a1af46ba3c89903c94566d4e47d04b17.png
  • Batch insert size:每次批量插入的条数。

  • Truncate collection:执行操作前先清空集合

  • Update:更新数据

  • Upsert:选择 Upsert 选项将写入模式从 insert 更改为 upsert(即:如果找到匹配项则更新,否则插入新记录)。使用前提是 勾选 Update 选项。

  • Muli-update:多次更新,可以更新所有匹配的文档,而不仅仅是第一个。

3)Mongo document fields

根据 id、source、db 字段插入更新数据,如下图所示:

0593b00711e333a2e22ffbc957ab57b1.png

更多 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

可通过点击 “执行结果” --> “步骤度量” 来查看各组件运行状态,如下图所示:

495de1d9bf2e78e778797e23a569ccc1.png

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,看完这篇文章,我才算是懂了!

c453dff43b1a97e8b7172157c0544b93.png

欢迎大家留言讨论

? ? ?8539a08fd29645f636a90cedbb53b400.png
你点的每个“在看”,我都认真当成了喜欢

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

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

相关文章

coreldraw错误代码14001_CorelDRAW文件损坏的几种解决方法

以前做好的CorelDRAW文件突然打不开了,或者是死机、非法操作等原因造成CorelDRAW文件损坏,有时打开源文件发现一片空白,源文件保存损坏无法打开怎么办?此时不要着急,你可以试试以下几种办法帮你解决问题!解决方法一、…

垂直梯形校正画质损失多少_投影小常识 梯形矫正竟会影响清晰度

我们在日常使用投影机时,经常会用到梯形矫正这个功能,梯形矫正确实在我们的日常使用中可以起到很好的效果,当环境因素不允许我们去将投影机本身摆正的时候,梯形矫正往往可让我们得到方正的画面,但是梯形矫正也是存在一…

增量同步_使用Kettle工具进行增量数据同步

增量同步的方式有很多种,我使用的是: 快照表 触发器需求:当主库库表发生增删改时,从库库表与主库库表数据保持一致。环境:1、Mysql2、kettle 7.1思路:1、在主库中,将需要同步的库表新建快照表,…

python架构图教程_Python 五分钟绘制漂亮的系统架构图

Diagrams 是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标:AWS、Azure、GCP、K8s、阿里云 和 Oracle 云基于Diagrams提供的节点,你只需要指定一个云产品(实际上选哪个都…

python可视窗口_Python数据可视

1.显现用到的包Pyecharts 是一个用于生成 Echarts 图表的类库。常规的Echarts 是由百度开源的一个数据可视化 JS 库,主要用于数据可视化。简单来说,Pyecharts是一款将python与echarts结合的强大的数据可视化工具。使用 Pyecharts 可以生成独立的网页&…

用极大似然法估计因子载荷矩阵_[转载]第三十六课         因子分析

第三十六课因子分析因子分析(FactorAnalysis)是主成分分析的推广,它也是从研究相关矩阵内部的依赖关系出发,把一些具有错综复杂关系的变量归结为少数几个综合因子的一种多变量统计分析方法。具体地说,就是要找出某个问题中可直接测量的、具有…

mysql in优化_MySQL的一次优化记录 (IN子查询和索引优化)

这两天实习项目遇到一个网页加载巨慢的问题(10多秒),然后定位到是一个MySQL查询特别慢的语句引起的:SELECT *FROM (SELECT DISTINCT t.vc_date, t.c_bankno, t.vc_bankacco, t.vc_moneytype, t.en_totalbala, t.en_usablebala, t1.vc_nameinbank, date_f…

创建mysql的表怎么显示00_Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理...

往数据库里创建新表的时候报错:[Err] 1067 - Invalid default value for updateTimeDROP TABLE IF EXISTS passwd_reset;CREATE TABLE passwd_reset (id int(11) NOT NULL AUTO_INCREMENT,staffId int(11) DEFAULT NULL,toEmail varchar(50) DEFAULT NULL,token var…

mysql sqlite转换_数据库转换工具(SqliteToMysql)

SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具。它能够将SQLITE数据转换成MYSQL数据库,让用户自主配置转换条件,满足用户的数据库格式需要。。相关软件软件大小版本说明下载地址SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具。…

mysql 查看集群状态_MySQL数据库集群正确配置步骤

类型:电子教程大小:8.5M语言:中文 评分:8.3标签:立即下载对MySQL数据库集群进行正确配置的实际操作步骤,以及对其概念的讲述,如果你对其相关的实际操作有兴趣了解的话,以下的文章将会…

oschina mysql limit_MySQL 用 limit 为什么会影响性能?

点击上方“武培轩”,选择“设为星标”技术文章第一时间送达!一,前言首先说明一下MySQL的版本:mysql> select version();-----------| version() |-----------| 5.7.17 |-----------1 row in set (0.00 sec)表结构:m…

mysql外键教程_关于MySQL外键的简单学习教程

在MySQL中,InnoDB引擎类型的表支持了外键约束。外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);2.外键列必须建立了索引,MySQL 4.1.2以后的版…

mybatis mysql 分页sql语句_MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)...

http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430摘要:MySQL数据库实现分页查询的SQL语句写法!一:分页需求:客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据&#…

mysql索引详细介绍简书_Mysql索引介绍

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据&a…

在mysql中建立聚簇索引_给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引...

推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少?MySQL的InnoDB索引数据结构是B树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值,这是了解聚簇索引和非…

根据从日期控件选定的时间以表格形式显示数据_VB项目开发FlexGrid控件使用讲解...

FlexGrid控件使用介绍大家好,在VB开发管理系统中,FlexGrid控件使用是非常普遍的。用FlexGrid ActiveX控件可以在 Visual Basic的窗体中创建一个电子数据表格,也可称之为网格。FlexGrid ActiveX控件可以在网格中显示任何类型的表格式数据&…

arduino无源蜂鸣器歌曲编码_Arduino加无源蜂鸣器,播放音乐《葫芦娃》

Arduino加无源蜂鸣器,播放音乐《葫芦娃》#define NOTE_D0 -1#define NOTE_D1 294#define NOTE_D2 330#define NOTE_D3 350#define NOTE_D4 393#define NOTE_D5 441#define NOTE_D6 495#define NOTE_D7 556#define NOTE_DL1 147#define NOTE_DL2 165#define NOTE_DL3…

mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决

本文主要向大家介绍了线上MySQL数据库机器内存爆掉原因分析与解决,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。现象:阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨上去后,却不下来。累积后内…

mysql atlas更新问题_Atlas几种常见故障解决(不定期更新)

1)使用atlas却发现“读库闲置,框架还是去主库读写数据”配置完atlas之后,发现使用jdbc框架的话,读库和写库各司其职,但是使用mybatis框架之后,就发现框架的读写都去了主库,把读库放置一边,那么这…

如何更改mysql服务名_技术小百科 |【云小课】数据复制服务如何实现对象名映射...

数据复制服务(Data Replication Service,简称DRS)是一种易用、稳定、高效、用于数据库在线迁移和数据库实时同步的云服务。数据复制服务提供了在线迁移、备份迁移、数据同步、数据订阅和多活灾备等多种功能。数据复制服务支持哪些对象名映射数据复制服务的数据同步功…