Pentaho 如何解决Ketter中的in/out mysql参数错误?

Pentaho 如何解决Ketter中的in/out mysql参数错误?,pentaho,kettle,Pentaho,Kettle,我正在使用Ketter进行转换,并尝试在mysql中获取基于整数的'out'参数的值(该字段实际上应该是bigint,但我认为Ketter不支持它) 我已经用decimal实现了解决这个问题的方法,但我花了很长时间试图首先将值返回到id字段(而不是id_1),然后将其转换回整数,以便插入数据库 以下是相关流程: 这是步骤定义: 在从查找现有id出来的入站流上,已经添加了一个名为id的字段,该字段是一个十进制数,可以是值,也可以是空值。如果为null,则在筛选行步骤触发此db过程查找,因此换

我正在使用Ketter进行转换,并尝试在mysql中获取基于整数的'out'参数的值(该字段实际上应该是
bigint
,但我认为Ketter不支持它)

我已经用decimal实现了解决这个问题的方法,但我花了很长时间试图首先将值返回到id字段(而不是
id_1
),然后将其转换回整数,以便插入数据库

以下是相关流程:

这是步骤定义:

在从
查找现有id
出来的入站流上,已经添加了一个名为
id
的字段,该字段是一个十进制数,可以是值,也可以是空值。如果为null,则在
筛选行
步骤触发此db过程查找,因此换句话说,在
db过程
步骤,它将始终为null(因此我不能在此处使用in-out参数)

因此,我想要发生的是,当它离开
db过程
步骤时,
id
应该填充out参数的值(理想情况下它应该是一个整数,但由于这个bug,我可以使用decimal)。但是我将
id\u 1
插入到流中

然后再往下一行,假设id字段中的值是十进制的,那么我需要将其转换回整数,这样就可以将其插入数据库而不会出错。我真的不知道如何在Ketter中编写javascript,也找不到关于该语言的文档

所以我的问题有两个:

  • 我可以让db过程将
    id
    插入到流中吗
  • 如何编写脚本(或使用步骤)将
    id
    (或
    id\u 1
    )转换为整数并将其放回流中的
    id
    字段

  • Kettle基于Java构建并使用JDBC驱动程序。让我总结一些来源并调查这个问题(我将包括Postgresql,因为我使用它最多,而且这些信息对我来说很有价值)

    首先让我们检查数据类型的大小:java.util.Long是8字节长,mysql bigint类型是8字节长,postgresql bigint类型也是8字节长。从物理尺寸上看,除了一个问题,它们实际上是匹配的。Mysql支持unsigned bigint,这超出了java.util.Long的范围。我假设问题出现在java.util.Long的边值、最小值和最大值上

    无论如何,我试图复制(只有在这一刻我才可以在Postgres上复制)

    Postgresql 9.4,JDBC驱动程序Postgresql-9.4-1201-jdbc41.jar,Kettle 5.4.0,jdk7

    一切看起来都很好。很可能是mysql jdbc驱动程序的问题,或者是不支持java.math.BigInteger的Ketter的问题。BigInteger是一种数据类型,用于处理mysql中的无符号bigint值,如下所述

    关于实际问题。解决方案示例如下所示:

    示例csv

    "id" "surname"  "name"  "birth_dt"
    "1" "Gorovits"  "Alex"  "2001-01-01"
    "2" "Osmani"    "Adeb"  "1998-03-06"
    ""  "Maiters"   "John"  "1981-07-07"
    ""  "Mateus"    "Angela"    "2004-04-04"
    "5" "Sander"    "Tom"   "1990-05-05"
    
    注:

    • DBLookup对空值不起作用,因此在运行DBLookup之前,您可能需要筛选具有空值的行
    好的,谢谢,我已经完成了这项工作。实际上,我找到了一个“设置字段”步骤,从id_1中取出值,并将其分配回db procedure分支中的id。然后我不知道怎么做,但我让整数也工作了,所以之前可能是其他问题导致了异常。但现在它仍然在工作,我完全完成了Javascript步骤。