读取数据到表格输入pentaho

问题描述 投票:0回答:1

我有一些问题。也许有人能帮助我。我有以下的转变enter image description here

在Table_input中,我从MSSQL数据库中读取数据。在Table_input_2中,我从DB2数据库中读取数据.在Merge join中,我比较ID与其他表的属性。在Filter rows中,我找到了相同ID的记录的差异。目前,我将差异写在xlsx文件中。在Table_input和Table_input2中,有很多记录--超过100mln。通常差异是由于MSSQL和DB2数据库的查询执行时间造成的,我希望对返回的差异再次进行处理。我想确定这些差异是由查询完成的时间造成的。谁能给我一个提示,如何做到这一点?

pentaho data-warehouse pentaho-spoon pentaho-data-integration data-integration
1个回答
1
投票

从你的简短描述来看,你有两个源数据库,应该是同步的,但并不总是同步。你使用这个Pentaho作业来寻找差异,但是当运行时,你发现了假阳性,由于系统又赶上了,差异在短时间内消失了。

如果你想找到持续存在的差异,你的选择取决于你的操作系统的情况。

如果你很幸运,你有(或可以得到)以下的方法 排版 从MSSQL表。当一行发生变化时,这些会被更新。如果复制到DB2的过程中包含了这些内容,你就可以准确地知道你是否在比较相同版本的行。

然而,如果你已经有了以上的条件,你可能就不会在这里问了,所以现在我假设你必须在没有可靠的时间戳的情况下进行操作。另外,可能没有看到很少变化的安静时间。

在你的情况下,我会在转换中一次处理10k、100k或1M行的 "小 "行集,并使用一个父作业来增加每次的起始ID。这样可以减少查询时间和希望的差异。

你可以在我之前的一个回答中看到一个完整的例子 此处. 这是略有不同的,因为那个是针对未知总记录的offsetlimit。

我们的想法是,你的转换需要参数作为输入,告诉它从哪个ID开始,要取多少行。然后它处理这些,并报告回处理的记录数。如果最后一次查询得到的记录数接近0,你就完成了。由于实时变化,可能不会精确到0。

上级作业会检查你是否完成了,如果没有,就更新新的START_ID,然后再次运行变换。

你的Table输入会像这样变化,对于DB2。

SELECT ...
FROM TABLE
WHERE ID >= ${START_ID} 
ORDER BY ID
LIMIT ${BATCH_SIZE}

和MSSQL(很久以前的事了,可能不正确)。

SELECT TOP ${BATCH_SIZE} ...
FROM TABLE
WHERE ID >= ${START_ID}
ORDER BY ID

如果ID是数字的,你可能可以在转换中放弃排序行的步骤,节省很多时间。如果是字母数字的,就保留它们。

Merge(diff)步骤做的是Merge Join和Filter Rows中的工作,但需要相同的字段布局。可能是一个选择。

最后,我会添加Get System Info获取时间戳,然后将任何改变的ID存储在一个带有你检测到的时间戳的表中。然后只报告持续超过X分钟hoursruns的差异。

© www.soinside.com 2019 - 2024. All rights reserved.