Pentaho Ketter和Oracle之间的数字格式不匹配?

Pentaho Ketter和Oracle之间的数字格式不匹配?,oracle,oracle11g,pentaho,kettle,Oracle,Oracle11g,Pentaho,Kettle,我在Oracle 11g中创建了一个数据库表,并填充了以下代码: CREATE TABLE TEST_TABLE (CODE NUMBER(1,0)); INSERT INTO TEST_TABLE (CODE) VALUES (3); 现在,我想把这张桌子用作Pentaho水壶改造中的锁桌。我希望确保列的值来自此表,如果不是,则中止。我有以下设置: 该数据帧有一个名为Test of type integer的列和一行。查找的配置如下所示: 但是,无论Test的值是3还是4,查找总是会失败,转

我在Oracle 11g中创建了一个数据库表,并填充了以下代码:

CREATE TABLE TEST_TABLE (CODE NUMBER(1,0));
INSERT INTO TEST_TABLE (CODE) VALUES (3);
现在,我想把这张桌子用作Pentaho水壶改造中的锁桌。我希望确保列的值来自此表,如果不是,则中止。我有以下设置:

该数据帧有一个名为Test of type integer的列和一行。查找的配置如下所示:

但是,无论Test的值是3还是4,查找总是会失败,转换都会中止。但是,如果我选中“从表加载所有数据”框,它将按预期工作

所以我的问题是:为什么它不工作,除非我缓存整个表

另外两项意见:

当它工作时,行被打印在log中,我注意到Test像[3]一样打印,fromdb像[3]一样打印,没有额外的空间。不过,我不知道这是否有什么意义。 如果我更改数据库表,以便将代码创建为INT,它就可以工作。这让我相信它与数字格式有关。在我的实际应用程序中,我不能更改数据库表。我想我应该改变考试的格式,但是改成什么?将其设置为数字没有帮助,长度为1且精度为0的数字也没有帮助。
看起来问题的根源在Oracle11gJDBC和PDI的元层之间。您可以做的最简单的事情是:插入一个表输入步骤,从TEST_表中选择*,右键单击并显示输出字段。您应该看到oracle11g的NUMBER1,0.0的PDI等价物来比较整数和数字。Kettle是用Java编写的,所以如果测试字段是整数类型,而数据库字段中的代码是数字,而Java BigDecimal中有自己的类型,那么比较这些数字可能很重要。@YuvalHerziger感谢您的建议!根据Show output fields,它是一个长度为1、精度为0、小数点和掩码为的整数;-。但是,将数据网格中的格式设置为这样并没有帮助。非常奇怪@Anders!您是否尝试过在从数据库中提取后,使用元数据选项卡下的选择值将其屏蔽为整数?“我知道这听起来很傻,但尝试从来都没有坏处。”安德斯-我也会走同样的路。另外,通常您希望让数据库服务器受到尽可能少的骚扰,而数据库查找步骤在这方面的成本可能相当高。老实说,如果您可以在转换服务器上使用持久性存储进行操作,那会更好。我认为问题的根源似乎在oracle11g jdbc和PDI的元层之间。您可以做的最简单的事情是:插入一个表输入步骤,从TEST_表中选择*,右键单击并显示输出字段。您应该看到oracle11g的NUMBER1,0.0的PDI等价物来比较整数和数字。Kettle是用Java编写的,所以如果测试字段是整数类型,而数据库字段中的代码是数字,而Java BigDecimal中有自己的类型,那么比较这些数字可能很重要。@YuvalHerziger感谢您的建议!根据Show output fields,它是一个长度为1、精度为0、小数点和掩码为的整数;-。但是,将数据网格中的格式设置为这样并没有帮助。非常奇怪@Anders!您是否尝试过在从数据库中提取后,使用元数据选项卡下的选择值将其屏蔽为整数?“我知道这听起来很傻,但尝试从来都没有坏处。”安德斯-我也会走同样的路。另外,通常您希望让数据库服务器受到尽可能少的骚扰,而数据库查找步骤在这方面的成本可能相当高。老实说,如果您可以在transformation server上使用持久存储进行操作,那会更好。