主页>技术社区>IT 技术>数据库>MySQL>MySQL教程

采用 Kettle 分页处理大数据量抽取任务

eIT.com.cn 2022/11/24 14:52:15 阅读 74 次

打印


采用 Kettle 处理大数据量抽取任务

作者:

原文地址:

需求

Oracle中某张表历史数据导入的一张表里面。

源表(Oracle):table1

目标表():table2

数据量:20,000,000

思路

由于服务器内存资源有限,所以,无法使用Kettle一次性从源表导入目标表千万级别的数据,考虑采用导入的方式来进行数据传输,即:

根据实际情况设置每次处理的数据量,比如:5,000条,然后根据总的数据条数和每次处理的数据量计算出一共分几页,

假设总数据量有:20,000,000,所以页数为:20,000,000/5,000=4,000

注: 若存在小数,小数部分算一页,比如:20.3算21页

步骤

根据需求的条件,首先对数据进行:

数据量:20,000,000

每页数据量:5,000

页数:4,000

源表(Oracle):table1

目标表():table2

主流程:transfer_table1_to_table2.kjb

流程说明:

transfer_table1_to_table2.kjb: 主流程

build_query_page.ktr: 构造页数游标

loop_execute.kjb: 根据页数来执行数据导入操作

我们分别来看各个部分的构成:

build_query_page.ktr: 构造页数游标

这一步中,我们需要构造类似这样的数据结构:

其中P_PAGE是表头,其余为数,

注: 取数我通过这个表的rownum来构造

selectrownumas P_PAGE from ._balances_hist whererownum<=4000

具体实现如下图:

loop_execute.kjb: 根据页数来执行数据导入操作

在上一步中,我们构造了页数,步中,我们遍历上一步中的数,通过数找出相应的数据集进行操作,

其中set_values.ktr和execute_by_page.ktr两个转换

loop_execute.kjb具体实现如下:

set_values.ktr:表示从上一步中获得的页数

execute_by_page.ktr:表示根据页数进行数据导入操作

其中query_by_page采用Oracle经典三层嵌套算法:

SELECT b.rn,b.* FROM(SELECT A.*, ROWNUM RN FROM (SELECT * FROM table1) A WHERE ROWNUM <= (${VAR_P_PAGE}*5000) ) b WHERE RN >= ((${VAR_P_PAGE}-1)*5000+1)

注: ${VAR_P_PAGE}为每次的数。

select_field为设置需要导入的列名:

output_target目的是到目标表table2:

因为要遍历上一次执行的结果,那么需要在transfer_table1_to_table2.kjb的loop_execute.kjb中做如下设置:

最后,执行transfer_table1_to_table2.kjb即可。

总结

通过上述,我们可以很好的内存不足的情况下,大数据量在不同的之导入工作。

FAQ

  • 在Kettle导入大量数据的过程中,可能会出现连接断开的现象:

(Idle connection timeout if we keep kettle idle for 8hours).

办法:

总结

以上是为你收集整理的全部内容,希望文章能够帮你解决所遇到的程序开发问题。






相关内容

• MySQL的索引与事务 (2022/12/6 7:56:56)
• 【MySQL】MVCC原理分析 + 源码解读 -- 必须说透 (2022/12/6 7:56:55)
• CDH大数据平台 29Cloudera Manager Console之superset之MySQL元数据配置(markdown新版三) (2022/11/29 12:05:25)
• mysql 锁机制与原理详解 (2022/11/28 16:05:02)
• [MSSQL]汉字转拼音函数实现语句 (2022/11/26 6:11:29)
• 采用 Kettle 分页处理大数据量抽取任务 (2022/11/24 14:52:15)
• Oracle Flashback 和 RMAN 示例 (2022/11/24 14:52:15)
• MySQL 的安装和配置 (2022/11/24 14:52:15)
• NFT是什么?一篇文章搞懂NFT的概念 (2022/11/23 18:08:16)
• [MySQL]复杂查询(进阶) (2022/11/23 9:22:28)



热门栏目


特别声明


最新资讯
热讯排行



合作媒体友情链接
生活常识小贴士 软件开发教程 智慧城市生活网 息县通生活服务[移动版] 息县商圈[移动版] 美食菜谱
健康养生 法律知识 科技频道 电影影讯 留学考研学习 星座生肖|解梦说梦




关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明

      Copyright © 2023 eIT.com.cn. All Rights Reserved. 豫ICP备2022012332号