繁体   English   中英

读取数据到表输入 pentaho

[英]Reading data to table input pentaho

我有问题。 也许有人会帮助我。 我有如下转型在此处输入图像描述

在 Table_input 中,我从 MSSQL 数据库中读取数据。 在 Table_input_2 我从 DB2 数据库中读取数据。 在合并连接中,我将 ID 与表中属性的 rest 进行比较。 在过滤行中,我找到相同 ID 不同的记录。 现在,我将差异写入 xlsx 文件。 在 Table_input 和 Table_input2 中有很多记录——超过 1 亿条。 差异通常是由 MSSQL 和 DB2 数据库上的查询执行时间造成的。 我希望针对返回的差异再次执行该过程。 我想确定这些差异是由于查询完成的时间造成的。 谁能给我一个提示怎么做?

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

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

如果幸运的话,您可以从MSSQL表中获得(或可以获得)行版本。 当行更改时,这些会更新。 如果对 DB2 的复制包括这些,您就知道您是否在比较同一行版本。

但是,您可能不会在这里问您是否已经具备上述条件,所以现在我假设您必须在没有可靠时间戳的情况下凑合。 此外,可能没有看到很少变化的安静时间。

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

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

这个想法是您的转换将参数作为输入,告诉它从哪个 ID 开始以及要采用多少行。 然后它处理这些并报告已处理的记录数。 如果最后一个查询返回接近 0 条记录,那么您就完成了。 由于实时变化,它可能不会完全达到 0。

父作业检查您是否完成,如果没有更新新的 START_ID 并再次运行转换。

对于 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 是数字,您可能可以在转换中删除 Sort Rows 步骤,从而节省大量时间。 如果是字母数字,请保留它们。

Merge(diff) 步骤执行您在 Merge Join 和 Filter rows 中所做的操作,但需要相同的字段布局。 可能是一种选择。

最后,我会为时间戳添加获取系统信息,然后将任何更改的 ID 与您检测到的时间戳一起存储在表中。 然后只报告持续超过 X 分钟/小时/运行的差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM