将数据读取到表输入pentaho

将数据读取到表输入pentaho,pentaho,data-warehouse,pentaho-spoon,pentaho-data-integration,data-integration,Pentaho,Data Warehouse,Pentaho Spoon,Pentaho Data Integration,Data Integration,我有问题。也许有人会帮助我。我有如下转换 在表_输入中,我从MSSQL数据库读取数据。在表输入2中,我从DB2数据库读取数据。 在mergejoin中,我将ID与彼此以及表中的其他属性进行比较。在筛选器行中,我找到相同ID不同的记录。现在,我在xlsx文件中写入差异。 在表_input和表_input2中,有许多记录超过1亿条。MSSQL和DB2数据库上的查询执行时间通常会导致差异。 我希望对返回的差异再次执行此过程。我想确定这些差异是在查询完成时产生的。谁能告诉我怎么做吗?根据您的简短描述,

我有问题。也许有人会帮助我。我有如下转换

在表_输入中,我从MSSQL数据库读取数据。在表输入2中,我从DB2数据库读取数据。 在mergejoin中,我将ID与彼此以及表中的其他属性进行比较。在筛选器行中,我找到相同ID不同的记录。现在,我在xlsx文件中写入差异。 在表_input和表_input2中,有许多记录超过1亿条。MSSQL和DB2数据库上的查询执行时间通常会导致差异。
我希望对返回的差异再次执行此过程。我想确定这些差异是在查询完成时产生的。谁能告诉我怎么做吗?

根据您的简短描述,您有两个应该同步的源数据库,但并不总是同步的。您正在使用此Pentaho作业来查找差异,但在运行时,您会发现误报,这些差异会在短时间内由于系统再次追赶而消失

如果您想找到持久的差异,您的选择取决于操作系统的环境

如果幸运的话,您已经(或者可以)从MSSQL表中获得了。当一行发生更改时,这些属性将得到更新。如果到DB2的复制包含这些内容,您就可以确切地知道是否正在比较同一行的版本

但是,您可能不会在这里询问是否已经准备好了上述内容,因此现在我假设您必须在没有可靠时间戳的情况下进行操作。此外,可能没有安静的时间,很少看到变化

在您的情况下,我会在转换中一次处理10k、100k或1M行的“小”行集,并使用父作业每次增加起始ID。这减少了查询时间,并有望减少差异

你可以在我前面的一个答案中看到一个完整的例子。它有点不同,因为它是针对总记录未知的偏移量/限制的

其思想是,您的转换将参数作为输入,告诉它从哪个ID开始以及需要多少行。然后它处理这些数据并报告处理的记录数。如果上一次查询返回了接近0条记录,则完成。由于实时更改,它可能无法精确到达0

父作业将检查您是否已完成,如果未完成,将更新新的开始ID并再次运行转换

对于DB2,表输入的变化如下:

SELECT ...
FROM TABLE
WHERE ID >= ${START_ID} 
ORDER BY ID
LIMIT ${BATCH_SIZE}
和MSSQL(已经很长时间了,可能不正确):

如果ID是数字的,您可能可以在转换中删除排序行步骤,从而节省大量时间。如果是字母数字,请保存它们

合并(差异)步骤与合并联接和筛选行中的操作相同,但需要相同的字段布局。可能是一种选择


最后,我将为时间戳添加Get System Info,然后使用检测到的时间戳将任何更改的ID存储在表中。然后只报告持续时间超过X分钟/小时/次的差异。

恐怕我们需要更多信息来回答这个问题。你能详细说明一下这些步骤的作用吗?特别是如何合并行以及过滤器做什么?您所说的ID字段存在于两个表中。我想这是一个外部ID,而不是一个自动递增字段,对吗?如果是的话,这是一个可以用来专门标识两个表中可能存在的条目的字段吗?这又意味着什么:“MSSQL和DB2数据库上的查询执行时间常常会产生差异”?列的值如何依赖于某些查询的执行时间?出现这种差异是因为数据在不同的时间到达DB2和MSSQL,还是因为Pentaho查询花费了很长时间,以至于数据在另一个系统中再次发生了更改?是的,同时数据也发生了更改。我们将数据从MSSQL数据库复制到DB2数据库。我检查MSSQL源数据库和目标DB2之间的差异。查询需要很长时间,同时数据已经基于MSSQL进行了更改。因此存在差异。我希望这个过程再次进行,只针对收到的差异。Pentaho是进行复制的人还是Pentaho只是验证其他复制是否正确?Pentaho只是检查复制是否正确
SELECT TOP ${BATCH_SIZE} ...
FROM TABLE
WHERE ID >= ${START_ID}
ORDER BY ID