读取数据到表输入 pentaho
Posted
技术标签:
【中文标题】读取数据到表输入 pentaho【英文标题】:Reading data to table input pentaho 【发布时间】:2020-04-17 08:24:37 【问题描述】:我有问题。也许有人会帮助我。我有如下转型
在 Table_input 中,我从 MSSQL 数据库中读取数据。在 Table_input_2 我从 DB2 数据库读取数据。 在合并连接中,我将 ID 相互比较以及表中的其余属性。在过滤行中,我找到相同 ID 不同的记录。现在,我将差异写在 xlsx 文件中。 在 Table_input 和 Table_input2 中有很多记录——超过 1 亿条。差异通常是由 MSSQL 和 DB2 数据库上的查询执行时间造成的。 我希望针对返回的差异再次执行该过程。我想确定差异是由于查询完成的时间造成的。谁能给我一个提示怎么做?
【问题讨论】:
恐怕我们需要更多信息来回答这个问题。您能否详细说明这些步骤的作用?特别是如何合并行以及过滤器做什么?您谈到两个表中都存在的 ID 字段。我想这是一个外部 ID,而不是一个自动增量字段,对吧?如果是这样,这是一个可用于专门标识可能存在于两个表中的条目的字段吗?这又是什么意思:“通常差异是由 MSSQL 和 DB2 数据库上的查询执行时间造成的”?列的值如何依赖于某些查询的执行时间? 出现差异是因为数据在 DB2 和 MSSQL 中的时间不同,还是因为 Pentaho 查询花费的时间太长以至于数据已经在另一个系统中再次发生了变化? 是的,同时数据发生了变化。我们将数据从 MSSQL 数据库复制到 DB2 数据库。我检查了 MSSQL 源数据库和目标 DB2 之间的差异。查询需要很长时间,同时数据已经基于 MSSQL 发生了变化。因此存在差异。我希望再次完成该过程,仅针对收到的差异。 是 Pentaho 进行复制还是仅验证其他复制是否正确? Pentaho 只检查复制是否正确 【参考方案1】:根据您的简短描述,您有两个应该同步但并不总是同步的源数据库。您正在使用此 Pentaho 作业来查找差异,但在运行时您会发现误报,由于系统再次赶上,差异会在短时间内消失。
如果您想找到持久的差异,您的选择取决于您的操作系统的情况。
如果幸运的话,您可以(或可以获得)来自 MSSQL 表的rowversion。当行更改时,这些会更新。如果到 DB2 的复制包括这些,那么您就可以准确地知道您是否在比较同一行版本。
但是,您可能不会在这里问您是否已经具备上述条件,所以现在我假设您必须在没有可靠时间戳的情况下凑合着做。此外,可能没有看到很少变化的安静时间。
在您的情况下,我将在转换中一次处理 10k、100k 或 1M 行的“小”行集,并使用父作业每次增加起始 ID。这减少了查询时间并有望减少差异。
您可以在我之前的一个答案here 中看到一个完整的示例。它略有不同,因为它是针对总记录未知的偏移量/限制。
这个想法是,您的转换将参数作为输入,告诉它从哪个 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 是数字,您可能可以在转换中删除排序行步骤,从而节省大量时间。如果是字母数字,请保留它们。
Merge(diff) 步骤执行您在合并连接和过滤行中所做的操作,但需要相同的字段布局。可能是一种选择。
最后,我会为时间戳添加 Get System Info,然后将任何更改的 ID 与您检测到的时间戳一起存储在表中。然后只报告持续超过 X 分钟/小时/运行的差异。
【讨论】:
以上是关于读取数据到表输入 pentaho的主要内容,如果未能解决你的问题,请参考以下文章
在 MATLAB App Designer 中将数据从 excel 读取到表中
使用 StAX / Kettle (Pentaho) 读取 XML 文件