kettle-sqlser数据源转ob-mysql注意点
1、
SQL Server 的 JDBC 驱动返回列别名给 Kettle;但是 OceanBase MySQL 模式 的 JDBC 驱动,默认返回原始字段名,不返回 AS 别名。
例子:

转为ob-mysql后,写sql用as别名,在流里字段找不到这个Supplier_ID_New 字段
方案:在连接数据源url添加
&useOldAliasMetadataBehavior=true
2、
问题:数据源是 ob-mysql,kettle 的更新控件是大表,会发生 oom,数据源是 sqlserver,大表就没事
原因:Kettle【更新 / 插入更新】控件的底层逻辑:会一次性把目标表的匹配主键全部读到 JVM 内存,用来做内存 hash 查找;SQL Server JDBC 驱动默认是流式游标(不会一次性全拉),而 OB-MySQL 模式的 OceanBase JDBC 驱动默认fetchSize=0,会把目标表全量一次性加载到 Kettle 堆内存,大表直接 OOM。
方案:【服务端游标】备选,更稳,避免长连接占用
在连接数据源url添加
useCursorFetch=true&useServerPrepStmts=true&defaultFetchSize=1000
useCursorFetch=true&useServerPrepStmts=true:服务端游标,每次拉 1000 行,不会长连接流式读;defaultFetchSize=1000按需调整(1000~5000);- 缺点:数据库侧开销更大,查询速度略慢。

浙公网安备 33010602011771号