热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kettle增量导出MongoDB到Mysql表中

一、需求:        将MongoDB表中的数据按照时间戳增量抽取到Mysql表中。二、实现方式:   1.kettle    2.pytho

一、需求:

        将MongoDB表中的数据按照时间戳增量抽取到Mysql表中。

二、实现方式:

      1. kettle 

      2. python 脚本

三、遇到的问题:

         kettle 如何将增量时间作为变量传入到MongoDB Input 中?

         翻遍了百度,没有一篇文章能写明白的,本人将实现方式详尽记载下来,供大家参考!

四、具体实现:

        1. kettle实现

           实现思路:

                    step1: 先全量将MongoDB 导入到 Mysql 表中。(这个不难,百度中有实现。)

                    step2:创建第一个Transformation,获取Mysql 中最大时间字段 例如:Max(time),将其存入到Mysql的一张表中。

                        step2-1: 配置表输入(目的:为了取得全量表中时间字段最大值)

                        step2-2:设置变量

                        step2-3:将变量值输出到表T1中

                    step3:创建第二个Transformation,配置MongoDB Input -> Mysql

                            step3-1 表输入

                            step3-2 设置变量

                            step3-3 配置MongoDB Input

                            step3-4 配置字段选择

                            step3-5 表输出 

                    step4:创建作业执行step2 和 step3 两个转换。

            具体步骤如下:

            step1:先全量将MongoDB 导入到 Mysql 表中。(略)

mongo_test 表(全量表)

《Kettle 增量导出MongoDB到Mysql表中》 step1-1

            step2:创建第一个Transformation,获取Mysql 中最大时间字段 例如:Max(time),将其存入到Mysql的一张表中。

《Kettle 增量导出MongoDB到Mysql表中》 step2
《Kettle 增量导出MongoDB到Mysql表中》 step2-1 表输入
《Kettle 增量导出MongoDB到Mysql表中》 step2-2 设置变量
《Kettle 增量导出MongoDB到Mysql表中》 step2-3 将变量值保存到表t1中

《Kettle 增量导出MongoDB到Mysql表中》 step2 t1 表

step3 :创建第二个Transformation,配置MongoDB Input -> Mysql

《Kettle 增量导出MongoDB到Mysql表中》 step3

 step3-1 表输入

《Kettle 增量导出MongoDB到Mysql表中》

step3-2 设置变量

《Kettle 增量导出MongoDB到Mysql表中》

step3-3 配置MongoDB Input

《Kettle 增量导出MongoDB到Mysql表中》 注意写法

这里需要注意:STRAT_TIME是step3-2中的变量名,这样就可以获取到变量值

step3-4 配置字段选择

《Kettle 增量导出MongoDB到Mysql表中》

step3-5 表输出

《Kettle 增量导出MongoDB到Mysql表中》

step4:创建作业执行step2 和 step3 两个转换。

《Kettle 增量导出MongoDB到Mysql表中》

测试:

1. 当前t1 中的时间为:

        2018-05-19 00:00:00    

2. 向MongoDB中添加一条数据

> db.xk.insert({“name”:”发发发发发财”,”age”:”30″,”time”:”2018-05-20 00:00:00″})

3. 执行job

《Kettle 增量导出MongoDB到Mysql表中》

4. 查看结果:

《Kettle 增量导出MongoDB到Mysql表中》

以上结束:

python 脚本方式也很简单:

==============================================================

#coding=utf-8

# Python 实现 从MongoDB 想MySql 增量导数据

from pymongo import MongoClient

import pymysql

# mongodb

client = MongoClient(‘192.168.107.128’, 27017)

TempleSpider = client[‘xk’]

temple_comment_collect = TempleSpider[‘xk’]

# mysql

mysql = pymysql.connect(‘localhost’, ‘root’, ‘123456’, ‘test’, charset=”utf8″)

# insert sql

sql = ‘insert into mongo_test values(%s,%s,%s)’

# 批量提交

def batch_commit(connect, target_sql, result):

    cursor = connect.cursor()

    list = []

    i = 0

    try:

        for row in result:

            data = (row[‘name’].encode(‘utf-8’), row[‘age’], row[‘time’])

            print(row[‘name’])

            list.append(data)

            if i >= 1000:

                cursor.executemany(target_sql, list)

                connect.commit()

                print(‘1000 条插入成功…’)

                i = 0

                list.clear()

            i = i+1

        if i > 0:

            cursor.executemany(target_sql, list)

            connect.commit()

            print(‘%d 条插入成功……’ % i)

    except Exception as e:

        print(e)

        print(“增量数据导入失败!!!”)

        # 回滚

        connect.rollback()

records = temple_comment_collect.find({“time”: {“$gt”: “2018-05-15 00:00:00”}})

batch_commit(mysql, sql, records)

client.close()

mysql.close()

==============================================================


推荐阅读
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 在使用Visual Studio 2019评估Blazor时,将taghelper添加到剃刀文件时会出现错误。错误信息是"标记助手:@addTagHelper *,BlazorPOC.Validations"。需要在文件顶部添加@using语句"@using BlazorPOC.Validations"来解决这个问题。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • MySQL插入数据的四种方式及安全性分析
    本文介绍了MySQL插入数据的四种方式:插入完整的行、插入行的一部分、插入多行和插入查询结果,并对其安全性进行了分析。在插入行时,应注意字段的定义和赋值,以提高安全性。同时指出了使用insert语句的不安全性,应尽量避免使用。建议在表中定义相关字段,并根据定义的字段赋予相应的值,以增加插入操作的安全性。 ... [详细]
author-avatar
mobiledu2502909447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有