Kettle多线程导致的抽取问题解决
kettle 使用中的一些常见问题
kettle 使用中的一些常见问题问题1:从excel 中抽取数据,插入到oracle 9 数据库中,报下面的错误.2008/06/25 13:30:57 - 插入更新数据表.0 - Insert row: ![field1=1.3965E8, field2=1,798, field3=2002/05/27 00:00:00.000]2008/06/25 13:30:57 - oracl - ERROR : java.sql.SQLException: ORA-01722: 无效数字2008/06/25 13:30:57 - oracl - ERROR : atoracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)原因:从错误信息可以看出,字段"field2" 对应的数据是1,798,该字段在数据库中是Number 类型,Oracle 不能将1,798 格式的字符串转换为数字。
解决方法:在【Excel输入步骤】-【字段】标签下对应的字段设置为正确的类型。
将"field2" 设置为"Number" 类型(默认是String 类型)。
问题2: 由sqlserver 向mysql 迁移数据, 迁移以后的数据是乱码原因: 这是由于mysql 的默认编码是utf-8, 而中文环境下客户端的默认编码一般都是gbk 或gb18030, 由于客户端和服务器编码不一样导致保存到mysql 的数据是乱码解决方法: 在新建连接窗口中有一个选项(option) 标签, 在这个标签下可以设置数据库的一些连接参数. 在这里我们要设置mysql 的客户端编码参数, 参数名characterEncoding, 参数值gbk.问题3: 在SQLServer 表输入步骤中使用以问号作为参数的sql 语句(参数的值从以前的步骤中获得),向mysql 数据库导入数据(使用mysql 表输出步骤).在执行的时候报告错误Unable to get queryfields for SQL: AND e.LOCAL_TIME>? 00909 PRS INC Invalid character.原因: 从错误语句看,是参数没有被替换掉, 因为发送给mysql 服务器的是这样的语句"AND e.LOCAL_TIME>?". 参数没有被替换掉是因为从以前步骤中读取的参数值是null. 解决方法: 增加对null 值的判断, 可以有两种方法, 如果这个值是从数据库获取的,一般的数据库都提供了处理null值的函数,如mysql 的ISNULL 函数. 如果这个值是从其他步骤获得的,可以通过Javascript 步骤进行判断并转换.问题4: 使用PDI 3.x 版本连接DB2 数据库时会报下面的错误Error connecting to database: (using class com.ibm.db2.jcc.DB2Driver)encoding not supported!!原因: PDI 自带的DB2 JDBC Driver 的版本比较低,无法连接GBK 编码的DB2 数据库。
kettle jvm参数使用
kettle jvm参数使用Kettle是一种用于ETL(抽取、转换、加载)的开源工具,它是Pentaho数据集成套件的一部分。
在Kettle中,可以使用JVM参数来优化和调整Kettle的性能和行为。
以下是一些常见的Kettle JVM参数的使用方法和作用:1. 内存设置,可以使用-Xms和-Xmx参数来设置Kettle的初始堆大小和最大堆大小。
例如,可以使用“-Xms512m -Xmx1024m”来将初始堆大小设置为512MB,最大堆大小设置为1GB。
这有助于避免内存溢出错误,并提高Kettle的处理大数据量的能力。
2. 垃圾回收设置,可以使用-XX:+UseG1GC参数启用G1垃圾回收器,以提高垃圾回收的效率和性能。
例如,“-XX:+UseG1GC”可以用于启用G1垃圾回收器。
3. 线程设置,可以使用-XX:ParallelGCThreads参数来设置并行垃圾回收线程的数量,以充分利用多核处理器的性能。
例如,“-XX:ParallelGCThreads=4”可以设置并行垃圾回收线程为4个。
4. 类加载设置,可以使用-XX:MaxPermSize参数来设置永久代的最大大小,以避免类加载相关的问题。
例如,“-XX:MaxPermSize=256m”可以将永久代的最大大小设置为256MB。
5. 运行模式设置,可以使用-XX:+AggressiveOpts参数启用侵入式优化,以尝试提高Kettle的整体性能。
例如,“-XX:+AggressiveOpts”可以用于启用侵入式优化。
需要注意的是,使用JVM参数需要谨慎,应该根据具体的应用场景和系统配置来选择合适的参数,以达到最佳的性能和稳定性。
同时,建议在使用JVM参数之前对其作用和影响进行充分了解,以避免不必要的问题和风险。
kettle循环调用
kettle循环调用Kettle是一款非常流行的ETL工具,它可以快速地进行数据抽取、转换和加载。
在使用Kettle时,可能会遇到循环调用的情况,这种情况需要进行一定的处理才能避免出现问题。
本文将分步骤阐述如何使用Kettle避免循环调用。
第一步:分析循环调用的原因在使用Kettle时,可能会遇到从一个作业调用另一个作业的情况,也可能会遇到在一个作业中多次调用同一个转换的情况。
这些都属于循环调用的范畴。
循环调用的本质是两个或多个作业或转换之间存在依赖关系,导致它们之间相互调用,从而形成了循环。
因此,我们需要仔细分析依赖关系,找出循环调用的源头,并进行相应的调整。
第二步:调整依赖结构在分析完循环调用的原因后,我们就需要对依赖关系进行调整,以避免循环调用的出现。
具体的调整方法可能因情况而异,但通常包括以下几个方面。
1、重新设计作业和转换之间的关系,将它们的依赖关系改为线性关系,避免出现错综复杂的交叉依赖。
2、通过避免重复调用同一个转换,减少循环的出现。
例如,可以将一个转换的输出存储到数据库中,然后在需要使用这个转换的时候,直接从数据库中读取,而不是重复调用转换。
3、使用参数化作业或转换,将变量作为输入参数传递,避免出现硬编码的情况,使得作业或转换之间的依赖关系更加灵活。
第三步:使用值对象如果需要在多个作业或转换之间传递大量数据,一种常见的方式是使用值对象。
值对象是一个在作业或转换之间传递数据的容器,它可以包含多个字段和值,这些值可以在多个作业或转换之间传递和共享。
使用值对象可以避免在多个作业或转换之间频繁地传输数据,提高数据传输的效率。
同时,值对象可以帮助我们规范化数据的格式,防止因格式错误导致的运行出错。
第四步:利用异常处理机制在Kettle中,异常处理机制是一个非常重要的组成部分,它可以帮助我们在运行过程中遇到错误时,及时发现并解决问题。
在处理循环调用时,我们可以使用异常处理机制来避免死循环的发生。
kettle error while executing sqlldr
kettle error while executing sqlldr全文共四篇示例,供读者参考第一篇示例:kettle是一款功能强大的数据集成工具,广泛应用于企业的数据处理和分析中。
SQL Loader是Oracle数据库系统中用于快速地将数据从外部文件加载到数据库表中的工具。
在使用kettle进行数据加载处理时,经常会遇到SQL Loader执行过程中出现错误的情况。
本文将探讨kettle中SQL Loader错误的原因和解决方法,帮助读者更好地应对这一常见问题。
一、错误现象在使用kettle执行数据加载作业时,可能会遇到SQL Loader出现各种错误的情况。
常见的错误现象包括但不限于:无法连接到数据库、数据加载异常、字段类型不匹配、数据量过大导致内存溢出等。
这些错误会导致数据加载任务无法成功完成,影响数据处理的准确性和效率。
二、错误原因1. 数据源问题:数据源文件格式不正确、数据源文件路径错误、数据源文件乱码等问题都会导致SQL Loader无法正确加载数据。
2. 字段映射问题:在定义数据加载作业时,字段映射关系不正确或不完整也会导致SQL Loader错误。
3. 数据量过大:当数据量过大时,SQL Loader可能会出现内存溢出等问题,从而导致数据加载失败。
4. 数据库连接问题:数据库连接超时、连接参数设置不正确等问题也会导致SQL Loader错误。
5. SQL Loader参数设置问题:参数设置不正确或不完整也会导致SQL Loader执行出错。
三、解决方法1. 检查数据源文件:首先要确认数据源文件的格式正确,文件路径正确,文件内容不含乱码等问题。
可以使用文本编辑器查看数据源文件内容,并尝试重新生成数据源文件。
2. 检查字段映射关系:确认数据加载作业中定义的字段映射关系正确和完整,字段名、数据类型等信息都要与目标表一致。
3. 拆分数据量:当数据量过大时,可以尝试拆分数据源文件,分批加载数据,从而减少内存占用和提高加载效率。
kettle内存溢出解决方法
kettle内存溢出解决方法
Kettle内存溢出是指在使用Kettle进行数据处理时,由于数据量过大或程序错误等原因,导致Kettle占用的内存超出了系统所分配的内存限制,造成程序异常终止。
解决Kettle内存溢出问题的方法如下:
1.增大内存分配:可以通过修改Kettle启动时的内存分配参数,如增加启动时分配的堆空间,来提高Kettle的内存分配,减少内存溢出的可能性。
2.优化程序代码:通过优化程序代码,减少程序中不必要的内存占用,可以有效地减少内存溢出的发生。
3.优化数据处理流程:可以通过优化数据处理流程,减少单个步骤的数据处理量,将大数据集分割为多个小数据集处理等方式来降低内存占用。
4.使用缓存:对于无法避免的大数据集处理,可以考虑使用缓存来降低内存占用。
可以将数据分批读取,处理后放入缓存中,再将缓存中的数据批量写入到目标数据源。
5.使用压缩算法:对于大的数据集合,可以使用压缩算法进行压缩,减小数据占用的内存空间。
在数据处理过程中,可以将压缩数据读取到内存中,再进行解压缩处理。
kettle 分层解析
kettle 分层解析摘要:1.Kettle 分层解析简介2.Kettle 分层解析的步骤3.Kettle 分层解析的优点4.Kettle 分层解析的局限性5.Kettle 分层解析的应用示例正文:1.Kettle 分层解析简介Kettle 分层解析是一种数据处理技术,主要用于将大量数据分解为多个较小的子集,以便更容易管理和分析。
这种技术可以帮助用户更有效地从数据中提取信息,从而实现对数据的快速处理和解析。
2.Kettle 分层解析的步骤Kettle 分层解析主要包括以下几个步骤:(1)数据抽取:从原始数据源中抽取所需数据。
(2)数据转换:将抽取的数据进行清洗、转换和集成,使其符合分析要求。
(3)数据存储:将转换后的数据存储到临时数据库或其他存储介质中,以便后续分析。
(4)数据分析:对存储的数据进行分析,以提取所需的信息和知识。
(5)结果呈现:将分析结果以图表、报告等形式呈现给用户。
3.Kettle 分层解析的优点Kettle 分层解析具有以下优点:(1)易于管理和维护:将大量数据分解为多个较小的子集,有助于提高数据处理的效率,降低维护成本。
(2)灵活性:Kettle 分层解析可以根据实际需求对数据进行定制,以满足不同场景的分析需求。
(3)可扩展性:Kettle 分层解析可以很容易地与其他数据处理工具和系统集成,以实现更高效的数据处理。
4.Kettle 分层解析的局限性尽管Kettle 分层解析具有很多优点,但仍存在以下局限性:(1)对硬件资源要求较高:由于需要处理大量数据,Kettle 分层解析对硬件资源有一定要求,可能导致成本上升。
(2)数据安全风险:Kettle 分层解析可能导致数据泄露,因此在使用过程中需要注意数据安全问题。
5.Kettle 分层解析的应用示例Kettle 分层解析在很多领域都有广泛应用,例如:(1)市场调查:通过对大量市场数据进行分层解析,可以提取出有关市场趋势、消费者需求等方面的信息,为企业制定市场策略提供依据。
Kettle常见问题合计
Kettle常见问题合计
【环境】
1.Kettle的界面基于IE浏览器设计,需要至少IE9以上
2.UTF-8编码下汉字是3个字符,需要注意
【转换】
1.数据库抽取数据出现乱码:在表输入处选择语序延迟转换,数据输入时kettle会去获取
编码方式
2.String格式转为date格式需要选择date formart lenient(宽松的时间格式)
【报错】
1.kettle 读取共享对象时发生严重错误:在user/.kettle里把shared.xml里
<sharedobjects></sharedobjects>之间的东西删除
2.Invalid byte 1 of 1-byte UTF-8 sequence:.kettle/repositories.xml 这个文件里面有乱码了
【二次开发】
1.Kettle的登录图片地址在UI/kettle-splash/kettle-ui-swt-7.1.0.0-1
2.jar
【实施】
1.Kettle里在对数据库连接、转换、作业命名时尽量不要使用中文。
史上最强Kettle培训教程资料
流程调试与优化
对整个处理流程进行调试和优化,确保数据处 理的正确性和高效性。
总结与拓展思考
Kettle是一款功能强大的ETL工具, 可以高效地处理大量数据。
Kettle支持多种数据库和文件格式的 输出,可以满足不同的需求场景。
在实际使用中,需要根据具体需求和 数据特点,设计合理的处理流程和方 案。
Kettle支持多种快捷键操 作,用户可以在工具栏中 查看并设置相关快捷键。
视图切换与展示
设计视图
用于可视化设计ETL转换流程和作业调度流程,支持拖拽组件并进行 连线,方便用户进行流程设计。
预览视图
用于预览当前转换/作业的执行结果,帮助用户及时发现并解决问题 。
日志视图
展示当前转换/作业的执行日志信息,包括执行步骤、耗时、错误信 息等,方便用户进行问题定位和排查。
数据抽取策略及实现
抽取策略
根据业务需求和数据特点 ,制定合适的数据抽取策 略,如全量抽取、增量抽 取等。
抽取实现方式
介绍如何通过Kettle实现 数据抽取,包括使用不同 的抽取组件、设置抽取参 数等。
性能优化技巧
分享在数据抽取过程中进 行性能优化的技巧,如并 行抽取、分批抽取等。
数据转换技巧分享
启动Kettle
将下载的压缩包解压到指定目录 ,如C:kettle或
/home/user/kettle。
解压安装包
将Kettle的可执行文件路径添加 到系统的环境变量中,以便在命 令行或终端中直接运行Kettle。
配置环境变量
双击Kettle的可执行文件或在命 令行中输入kettle命令,即可启 动Kettle软件。
错误代码
ERROR: Database connection failed
KETTLE——(二)数据抽取
KETTLE——(⼆)数据抽取
过了个春节,好长时间没有更新了,今天接着写第⼆部分——数据抽取。
进⼊界⾯以后会发现左侧菜单有两个东西:转换和作业;简单说⼀下,转换是单次的转换,不可重复,但可重复利⽤;作业是汇聚了其他操作和多次(可单次)转换,可定时触发,可定时循环。
集体情况后⾯⽅便再说。
KETTLE⽀持很多的种形式的数据输⼊,总体上分三种⽅式:第⼀种数据库数据输⼊(⽀持多种数据库关系和⾮关系型数据库);第⼆种⽂本数据输⼊(常见的多种⽂本,txt,xml等),第三种,有系统⾃动⽣成的的数据(包括⼈⼯在转换的时候添加的数据)。
以数据库数据为例,操作如下。
左侧输⼊——>表输⼊
步骤名称(填写步骤名称),数据库连接(选择输⼊数据的数据库),就和连接资源库时的步骤差不多了(数据库连接),获取SQL查询语句,选择要输⼊的数据所在的表。
得到查询表⾥⾯的所有字段的SQL语句,根据⾃⼰需求,⾃⼰调整。
如果有条件查询⾥⾯存在变量,可勾选【允许……】和【替换……】但注意在前⼀步需要有变量的确定和输⼊,这⾥先做⼀个简单的输⼊,【预览】可看,点击【确定】即可。
⼀个简单的表输⼊就完成了,其他的输⼊基本步骤也是如此,不同的是,如果是⽂本数据,需要告诉KETTLE怎么区分字段,是⽤什么分割的。
⼀般只有数据输⼊是没有⽤的,我们还需要输出,更重要的是中间的转换过程,想要使⽤⼀个⼯具就想好好了解其功能,多试试各种勾选框和按钮的功能。
最基本的数据输⼊完成。
解决多线程中11个常见问题
并发危险解决多线程代码中的11 个常见的问题Joe Duffy本文将介绍以下内容:▪基本并发概念▪并发问题和抑制措施▪实现安全性的模式▪横切概念本文使用了以下技术:多线程、.NET Framework目录数据争用忘记同步粒度错误读写撕裂无锁定重新排序重新进入死锁锁保护戳记两步舞曲优先级反转实现安全性的模式不变性纯度隔离并发现象无处不在。
服务器端程序长久以来都必须负责处理基本并发编程模型,而随着多核处理器的日益普及,客户端程序也将需要执行一些任务。
随着并发操作的不断增加,有关确保安全的问题也浮现出来。
也就是说,在面对大量逻辑并发操作和不断变化的物理硬件并行性程度时,程序必须继续保持同样级别的稳定性和可靠性。
与对应的顺序代码相比,正确设计的并发代码还必须遵循一些额外的规则。
对内存的读写以及对共享资源的访问必须使用同步机制进行管制,以防发生冲突。
另外,通常有必要对线程进行协调以协同完成某项工作。
这些附加要求所产生的直接结果是,可以从根本上确保线程始终保持一致并且保证其顺利向前推进。
同步和协调对时间的依赖性很强,这就导致了它们具有不确定性,难于进行预测和测试。
这些属性之所以让人觉得有些困难,只是因为人们的思路还未转变过来。
没有可供学习的专门API,也没有可进行复制和粘贴的代码段。
实际上的确有一组基础概念需要您学习和适应。
很可能随着时间的推移某些语言和库会隐藏一些概念,但如果您现在就开始执行并发操作,则不会遇到这种情况。
本文将介绍需要注意的一些较为常见的挑战,并针对您在软件中如何运用它们给出一些建议。
首先我将讨论在并发程序中经常会出错的一类问题。
我把它们称为“安全隐患”,因为它们很容易发现并且后果通常比较严重。
这些危险会导致您的程序因崩溃或内存问题而中断。
当从多个线程并发访问数据时会发生数据争用(或竞争条件)。
特别是,在一个或多个线程写入一段数据的同时,如果有一个或多个线程也在读取这段数据,则会发生这种情况。
kettle抽取案例(四)-循环
有的时候,我们想要在Kettle中实现这个循环的功能,比如,批量加载数据的时候,我们要对10张表执行同样的操作,只有表名和一些信息不一样,这时,写个循环就省事儿多了1. 遍历结果集实现(一)这里的话,我们主要是通过一个将结果集返回,然后通过转换的设置来实现的1.1 query_the_result这个转换,只要是将我们要遍历的结果集返回,表输入,我们就是返回了5条记录,来做遍历复制记录到结果,这个控件的作用,就是我们可以在后面的转换继续使用这个结果集。
1.2 traverse_the_result这里呢,我们就是需要遍历的转换了,这里,我们只是获取结果集,然后将结果集输出还有一个很重要的一步,怎样让这个转换可以根据结果集的条数,去循环执行呢?就是这个“执行每一个输入行”我们执行下看看----------------------------------完成---------------------------------------- 2.遍历结果集实现(一)通过----使用JS实现整体流程图:2.1 query_the_result这一步,和上面的一样,就是将结果集返回2.2 travers_the_result这里主要是使用JS将结果集进行遍历,通过JS,将一些结果存放到变量里面,在后面的操作中就可以使用了,通过${xxx}的方式使用这个其实和Java、JS里面循环思路一样,通过结果集的总数“total_num”和下标“LoopCounter”进行判断2.3 evaluate_the_loop_count这一步,就是判断下标的值和结果集的总数,进行对比,2.4 print_the_log输出下,我们想要使用的变量2.5 manage_the_loop_index 这一步,给下标加一,然后获取下一条记录好了,执行下,我们看看好了,循环的使用先介绍到这里。
使用Kettle抽取数据时,出现中文乱码问题解决方案
使用Kettle在不同的数据库抽取数据时,有时会出现中文乱码问题:其解决方案如下:
1.查看数据库的字符集是否是UTF-8(最常用的字符集)
2.如果数据库设置正确仍然存在中文乱码,则可能是因为有的客户端数据库默认的编码集不是UTF-8,我们只需要在输出时对输出的数据库进行编码配置。
我的数据库是MySql,下面是解决图示:
a.我的转换图
b.打开表输出——>数据库连接后的“编辑”——>Advanced,在下方的空白处输入:set names utf8;,设置数据库客户端的字符集为utf8。
c.打开Options,添加参数characterEncoding,设置值为gbk/utf8。
OK!!!。
2024版kettle使用教程(超详细)
分布式计算原理
阐述Kettle分布式计算的原理, 如何利用集群资源进行并行处理 和任务调度。
01 02 03 04
集群配置与部署
详细讲解Kettle集群的配置步骤, 包括环境准备、节点配置、网络 设置等。
集群监控与管理
介绍Kettle提供的集群监控和管 理工具,方便用户实时了解集群 状态和作业执行情况。
03
实战演练
以一个具体的实时数据处理任务为例, 介绍如何使用Kettle设计实时数据处理 流程。
案例四:Kettle在数据挖掘中应用
数据挖掘概念介绍
01
数据挖掘是指从大量数据中提取出有用的信息和知识的
过程,包括分类、聚类、关联规则挖掘等任务。
Kettle在数据挖掘中的应用
02
Kettle提供了丰富的数据处理和转换功能,可以方便地
Chapter
案例一:ETL过程自动化实现
ETL概念介绍
ETL即Extract, Transform, Load,是数据仓 库技术中重要环节,包括数据抽取、清洗、转 换和加载等步骤。
Kettle实现ETL过程
通过Kettle的图形化界面,可以方便地设计ETL流程, 实现数据的自动化抽取、转换和加载。
作业项配置
对作业项进行详细配置,包括数据源、目标库、 字段映射等。
作业项管理
支持作业项的复制、粘贴、删除等操作,方便快速构建作业。
定时任务设置与执行
定时任务设置
支持基于Cron表达式的定时任务设置,实现 周期性自动执行。
立即执行
支持手动触发作业执行,满足即时数据处理 需求。
执行日志查看
kettle 使用中的一些常见问题
kettle 使用中的一些常见问题问题1:从excel 中抽取数据,插入到oracle 9 数据库中,报下面的错误.2008/06/25 13:30:57 - 插入更新数据表.0 - Insert row: ![field1=1.3965E8, field2=1,798, field3=2002/05/27 00:00:00.000]2008/06/25 13:30:57 - oracl - ERROR : java.sql.SQLException: ORA-01722: 无效数字2008/06/25 13:30:57 - oracl - ERROR : atoracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)原因:从错误信息可以看出,字段"field2" 对应的数据是1,798,该字段在数据库中是Number 类型,Oracle 不能将1,798 格式的字符串转换为数字。
解决方法:在【Excel输入步骤】-【字段】标签下对应的字段设置为正确的类型。
将"field2" 设置为"Number" 类型(默认是String 类型)。
问题2: 由sqlserver 向mysql 迁移数据, 迁移以后的数据是乱码原因: 这是由于mysql 的默认编码是utf-8, 而中文环境下客户端的默认编码一般都是gbk 或gb18030, 由于客户端和服务器编码不一样导致保存到mysql 的数据是乱码解决方法: 在新建连接窗口中有一个选项(option) 标签, 在这个标签下可以设置数据库的一些连接参数. 在这里我们要设置mysql 的客户端编码参数, 参数名characterEncoding, 参数值gbk.问题3: 在SQLServer 表输入步骤中使用以问号作为参数的sql 语句(参数的值从以前的步骤中获得),向mysql 数据库导入数据(使用mysql 表输出步骤).在执行的时候报告错误Unable to get queryfields for SQL: AND e.LOCAL_TIME>? 00909 PRS INC Invalid character.原因: 从错误语句看,是参数没有被替换掉, 因为发送给mysql 服务器的是这样的语句"AND e.LOCAL_TIME>?". 参数没有被替换掉是因为从以前步骤中读取的参数值是null. 解决方法: 增加对null 值的判断, 可以有两种方法, 如果这个值是从数据库获取的,一般的数据库都提供了处理null值的函数,如mysql 的ISNULL 函数. 如果这个值是从其他步骤获得的,可以通过Javascript 步骤进行判断并转换.问题4: 使用PDI 3.x 版本连接DB2 数据库时会报下面的错误Error connecting to database: (using class com.ibm.db2.jcc.DB2Driver)encoding not supported!!原因: PDI 自带的DB2 JDBC Driver 的版本比较低,无法连接GBK 编码的DB2 数据库。
kettle解除同步条数限制
kettle解除同步条数限制
现象:最近在进⾏开发kettle程序的时候,在本地环境测试的时候是没有问题的,但是当上线到⽣产环境,每次当数据同步到10000条的时候,程序就卡主,也不报错,就是不往下进⾏了。
问题分析:1、⽣产个本地是相同的环境,所以先排除环境问题的⼲扰
2、在本次进⾏测试的时候,由于只是测试器功能,并未对其性能进⾏测试,故使⽤了少量的⼏条数据,⽽⽣产环境中源表中的数据量是三万条,并且根据问题的现象,判定是是由于数据量引起的。
3、经过排查发现,kettle有⼀个默认的条数限制,默认情况下是10000,也就是说,⼀个集合中只能查询出来10000条数据。
问题解决:既然找到问题的原因,那接下来就是解决问题了。
打开kettle,转换页⾯,双击空⽩处,会出现上图所⽰的弹框,在杂项中会看到记录集合中的记录数,需要修改这⼀栏的数值,也就是解除同步条数的限制,可以⼤概评估⼀下⾃⼰的数据量,来合理的设置该值,设置完成之后,重新运⾏,成功。
kettle error reading information from input stream
kettle error reading informationfrom input stream当你在使用 Kettle(也称为Pentaho Data Integration)时遇到 "Error reading information from input stream" 错误,可能是由于以下原因导致的:1. 文件格式问题:输入流中的数据可能不是 Kettle 预期的格式,或者文件可能已损坏。
确保你正在读取的文件是正确的格式,并且没有损坏。
2. 数据源问题:如果你正在从数据库或其他数据源读取数据,可能存在连接问题或数据源的问题。
确保你的数据源配置正确,并且可以正常连接和读取数据。
3. 编码问题:文件的编码方式可能与 Kettle 不兼容。
尝试更改文件的编码方式或在Kettle 中配置适当的编码。
4. 数据量过大:如果输入流中的数据量非常大,可能超出了 Kettle 的处理能力。
尝试分批次读取数据或优化你的转换步骤。
5. 内存不足:Kettle 可能由于内存不足而无法读取输入流。
确保你的系统有足够的内存来处理数据。
6. 版本兼容性:某些版本的 Kettle 可能存在与特定数据源或文件格式的兼容性问题。
确保你使用的 Kettle 版本与你的数据源和文件格式兼容。
为了解决这个问题,你可以尝试以下步骤:1. 检查文件和数据源:确认文件是否存在、格式正确,并且数据源配置正确。
2. 调整数据源设置:如果是数据源问题,尝试重新配置或连接数据源。
3. 更改编码:如果是编码问题,尝试更改文件编码或在 Kettle 中配置正确的编码。
4. 优化数据处理:如果数据量过大,考虑分批处理或优化转换步骤。
5. 增加内存:如果内存不足,尝试增加系统内存或优化 Kettle 的内存使用。
6. 升级或降级 Kettle 版本:如果是版本兼容性问题,尝试升级到最新版本或降级到兼容的版本。
如果以上方法仍然无法解决问题,建议查看更详细的错误信息,以获取更多线索。
(2)Kettle数据抽取--增量抽取
Kettle数据抽取---增量抽取
使用KETTLE实现数据的增量抽取的方法大致如下:
从目标表中读取最大的时间戳或者增量字段ID,作为条件,然后把源表中所有大于这个增量字段的数据读出来,插入到目标表当中去;
1.打开Kettle工具,打开新建的全量抽取流;
2.选择INPUT,再拖出来一个“表输入”控件
3.打开表输入2,配置相关参数,
在这里,选择数据库连接,连接目标表,然后通过select max 从目标表中找到最大的时间戳或者增量字段;传到表输入
4.源表输入配置
打开“表输入”,需要关注的就是划圈的几个地方,从表输入2中插入一个值,然后SQL条件中的?就是用这个替代的;确定就OK了.
Zftang 2010-10-12。
Kettle多线程导致的抽取问题解决
今天在测试kettle一个转换的问题,据现场描述,在手工执行该job转换时,获取到的时间是正确的,但是一旦使用批处理计划任务调用执行时,获取到的时间就有问题,转换如下:'查找数据库当前时间' 这个步骤的数据库连接是’AA‘,这一步骤的动作是查找当前系统时间select sysdate as cksj from dual’插入/更新‘的数据库连接是’BB‘,这一步骤的动作是把上一步骤得到的时间,更新到表tt的bcgxsj字段中’删除'的数据库连接是‘BB’,这一步骤的动作是删除表t1中CQZT='1'的数据‘获取更新时间’的数据库连接是'BB',这一步骤是获取步骤‘插入/更新’中更新表tt的bcgxsj字段后的值现在出现的问题就是,在单独执行时,发现‘获取更新时间’步骤中,获取到的时间,确实是‘插入/更新’步骤执行后的值,但是,如果通过bat调用,在计划任务中执行时,发现‘获取更新时间’步骤中,获取到的bcgxsj就不对了,查看日志,发现获取到的时间,是更新前的时间。
猜想,应该是kettle多线程的问题。
再仔细看日志,发现执行的步骤好像有点不对发现‘获取更新时间’这一步骤根本不是在’插入/更新‘后执行的,而是一开始就已经连接数据库查询,这样肯定出来的结果不可能是更新后的当前系统时间这步骤甚至比’查找数据库当前时间‘更早执行。
网上查找原因:在多线程软件下处理数据库连接,最推荐的方法是在转换执行的过程中为每个线程创建单一的连接。
因此,每个步骤复制都打开它们自己单独的事务或者事务集。
这将导致一个潜在的后果,就是你在使用同一个数据库资源的场景下,例如一张数据表或者视图,条件竞争在同一个转换中可能而且会经常发生。
一个常见产生错误的场景,就是当你往一个关系数据表里面写入数据,在随后的步骤里面读回。
因为这两个步骤运行在不同的数据库连接下,而且拥有不同的事务上下文,你不能确保这个被第一个步骤写入的数据将可见于其他正在执行读操作的步骤。
使用Kettle增量抽取MongoDB数据实践
1. 增量时间的查询和参数控制 2. ETL的批次信息和调用参数的写入 第一个问题的解决如下: 使用命名参数在Query页中进行过滤, 一开始会担心${}的引用方式会用Mongo的语法冲突, 测试后发现运行正常
第二个问题: 先为结果增加常量值, 如常量值固定则直接写死, 不固定的常量值先设置为空串, 在后面使用字符串替换组件传入命名参数, 最后用字段选择把 空串的常量值移除
先为结果增加常量值如常量值固定则直接写死不固定的常量值先设置为空串在后面使用字符串替换组件传入命名参数最后用字段选择把空串的常量值移除
使用 Kettle增量抽取 MongoDB数据实践
需ቤተ መጻሕፍቲ ባይዱ: 增量抽取MongoDB数据并加载到MSSQL 由于不能使用关系型数据库的自定义SQL, 所以主要遇到的问题有:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
今天在测试kettle一个转换的问题,据现场描述,在手工执行该job转换时,获取到的时间是正确的,但是一旦使用批处理计划任务调用执行时,获取到的时间就有问题,转换如下:
'查找数据库当前时间' 这个步骤的数据库连接是’AA‘,这一步骤的动作是查找当前系统时间
select sysdate as cksj from dual
’插入/更新‘的数据库连接是’BB‘,这一步骤的动作是把上一步骤得到的时间,更新到表tt的bcgxsj字段中
’删除'的数据库连接是‘BB’,这一步骤的动作是删除表t1中CQZT='1'的数据
‘获取更新时间’的数据库连接是'BB',这一步骤是获取步骤‘插入/更新’中更新表tt的bcgxsj字段后的值
现在出现的问题就是,在单独执行时,发现‘获取更新时间’步骤中,获取到的时间,确实是‘插入/更新’步骤执行后的值,
但是,如果通过bat调用,在计划任务中执行时,发现‘获取更新时间’步骤中,获取到的bcgxsj就不对了,查看日志,发现获取到的时间,是更新前的时间。
猜想,应该是kettle多线程的问题。
再仔细看日志,发现执行的步骤好像有点不对
发现‘获取更新时间’这一步骤根本不是在’插入/更新‘后执行的,而是一开始就已经连接数据库查询,这样肯定出来的结果不可能是更新后的当前系统时间
这步骤甚至比’查找数据库当前时间‘更早执行。
网上查找原因:
在多线程软件下处理数据库连接,最推荐的方法是在转换执行的过程中为每个线程创建单一的连接。
因此,每个步骤复制都打开它们自己单独的事务或者事务集。
这将导致一个潜在的后果,就是你在使用同一个数据库资源的场景下,例如一张数据表或者视图,条件竞争在同一个转换中可能而且会经常发生。
一个常见产生错误的场景,就是当你往一个关系数据表里面写入数据,在随后的步骤里面读回。
因为这两个步骤运行在不同的数据库连接下,而且拥有不同的事务上下文,你不能确保这个被第一个步骤写入的数据将可见于其他正在执行读操作的步骤。
一个常见,且简单的解决这个问题的方案就是将这个转换分成2个不同的转换,然后保存数据在临时表或者文件中。
另外一个方案是强制使所有的步骤使用单一数据库连接(仅一个事务),启用转换设置对话框中的“Make the transformation database transactional”选项即可,(这一个我暂时找不到在哪)。
分析我上面转换获取错误时间的原因,
由于‘获取更新时间’ 和'查找数据库当前时间' 这两个步骤,是不同的数据库连接下,所以没办法保证这两个查询的先后顺序。
像日志所述,反而是‘获取更新时间’先执行。
解决办法:
把这两个查询分成两个不同的转换
转换1
转换2
然后建一个job,把这两个转换串行起来
再测试,查看日志,发现时间获取正确。