我计划将过程中的行数拆分,然后将它们加载到表中,并使用loop继续将某些行加载到表中。
我不确定怎么做。
我的过程:表输入(调用过程-返回9亿条记录)->数据转换->插入/更新步骤(增量加载到目标表)。
现在我必须根据过程中的某个字段从过程中检索一些记录(比如一次100万条),然后将它们加载到表中。必须迭代这个过程,直到过程中的行结束。
请帮我解决这个问题。
我计划将过程中的行数拆分,然后将它们加载到表中,并使用loop继续将某些行加载到表中。
我不确定怎么做。
我的过程:表输入(调用过程-返回9亿条记录)->数据转换->插入/更新步骤(增量加载到目标表)。
现在我必须根据过程中的某个字段从过程中检索一些记录(比如一次100万条),然后将它们加载到表中。必须迭代这个过程,直到过程中的行结束。
请帮我解决这个问题。
1条答案
按热度按时间3ks5zfa01#
除了处理这么多行所需的时间之外,我并不觉得这有什么问题。pdi(spoon/kettle)处理流,而不是像sql中那样的“数据集”,行一收到就被处理。因此,pdi可能永远不必一次处理所有9亿行,也不必等到sql返回所有行之后再开始处理。
这个
Table output
步骤有一个Commit size
值来控制一个事务中发送到目标表的记录数。诀窍是平衡启动新连接所需的时间和处理一个事务中大量行所需的时间。我运行的值从200到5000,这取决于我的需要和系统的能力,但您可能可以更高。听起来更大的问题是从存储过程返回那么多行。使用sp而不是
SELECT
或者VIEW
意味着你必须找到方法来保持低记忆压力。我有几百万行表,我创建
TEMP
表(非表变量)在处理时存储数据,使用单个SELECT * FROM temp..table
在sp的末尾。这将按预期从服务器流式传输数据,并使用最小的内存量。