kettle5.4问题记录

一、Kettle 的 “Use Result Streaming Cursor” 选项

ETL 工具Kettle中, 使用mysql连接的时候, 有一个 “Use Result Streaming Cursor”的选项, 相当于 ((com.mysql.jdbc.Statement)stat).enableStreamingResults(), 这样的话, 每次只取一条数据, 效率很低。

不过, Kettle在配置mysql连接的时候, 高级选项里面将useCursorFetch=true和fetchsize设置了, 按照优先级的关系,会优先使用RowDataCursor。

新版mysql的解决方案

mysql jdbc驱动设置fetchsize 要连接字串里有useCursorFetch=true 才行

jdbc:mysql://127.0.0.1/:3306/test?useCursorFetch=true mysql版本,即驱动版本都在5 以上,就可以使用setFetchSize方法了。测试过了,debug过了.如果无此参数,则只有setFetchSize(Integer.MIN_VALUE);  才有效果,但就是每次rs.next() 取一条了。oracle 一般默认设置10条。

this.statement = connection.prepareStatement(parsedQuery,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);

this.statement.setFetchSize(10);

另外, 在同时出现 useCursorFetch=true 和 ((com.mysql.jdbc.Statement)stat).enableStreamingResults()设置的时候, useCursorFetch有更大的优先级, 这个时候, mysql 的jdbc驱动会使用 RowDataCursor。

二、表输出Prepared statement contains too many placeholders

MySQL的prepared statement只能支持至多65535个占位变量,但原因不详。在批量插入数据时,MySQL的JDBC驱动会将单条的插入语句合并为一条多值的插入语句;而我们导入的数据规模,一条记录有很多列,当导入数据时为1000条记录时,SQL中占位符的数目恰好小于65535;当导入2000条记录时,SQL中点位符的数目已超过65535,语句执行时必然报错。

性能参数:

useServerPrepStmts=false

rewriteBatchedStatements=true

useCompression=true

编码:

characterSetResults=utf8

characterEncoding=utf8

defaultFetchSize=500

useCursorFetch=true

日期格式处理

zeroDateTimeBehavior=convertToNull

三、kettle (表输入)查询MySQL数据 遇到错误:

Unable to get timestamp from resultset at index 125

发现数据中timestamp 类型的值 包含 0000-00-00 或 0000-00-00 00:00:00的时候会出现这个错误

jdbc driver处理日期类型产生的问题,通过下面方式解决:

1、使用date_format函数格式化

2、在jdbc URL链接加入参数(zeroDateTimeBehavior=convertToNull):jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull

3、如果是hibernate可以配置下面参数:

<property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property>

pan调用ktr的方式

运行一段时间报错:

2022/03/01 07:02:31 - 表输入.0 - Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)

2022/03/01 07:02:31 - 表输入.0 - IO 错误: Connection reset

解决方法,在sh文件中的java 命令行中增加参数:-Djava.security.egd=file:/dev/../dev/urandom

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shibushi114

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值