【问题标题】:PDI - GC Overhead Limit ExceededPDI - 超过 GC 开销限制
【发布时间】:2018-06-05 06:53:06
【问题描述】:

所以,我对 PDI 和我的转换流程有一些疑问。 根据我的反流,我收到错误 GC Overhead Limit Exceeded 并且我已经在寻找解决方案,例如增加spoon.bat -Xms -Xmx2g 的内存,但它不起作用。因此,我考虑了替代解决方案,并且我认为也许我应该更改流程(Sorte Merge 使用了很多内存并导致了该错误)。 或者,如果你们对我的问题有其他解决方案,我真的很需要。

下面是我的跨流图片。 谢谢#SorryForMyGrammar

My Transformation Flow

【问题讨论】:

    标签: kettle pentaho-data-integration pdi


    【解决方案1】:

    您可以通过在公式步骤中包含该逻辑来跳过整个拆分和合并操作。

    使用 IF(condition;A;B),其中 condition 是您在过滤行步骤中定义的测试,A 和 B 是各个公式步骤中的现有计算。这样每一行都会得到正确的计算,并且永远不需要加入流。

    【讨论】:

    • 是的,这是更好的解决方案。谢谢,我的跨时间和内存使用是安全的。你真棒wkwkw。
    【解决方案2】:

    您确定要合并,而不是 Dummy 或 Append 流来追加行吗?

    合并行实际上会执行连接。如果您有很多命中,其中一个流中的键与另一个流中的键匹配(或者,更糟糕的是,如果您没有键,这会导致交叉连接),那么您将在基数方面制造一场噩梦。

    更糟糕的是,当有输入行来自过滤器行之外的任一数据流时,合并连接将无法完成,从而将庞大的数据集保留在内存中。

    如果您确实需要合并,则应仔细分析结果集的基数,但还要在合并连接之前添加两个排序行步骤,这必须通过连接键对每个流进行排序,并且还具有解耦的好处数据流流,允许合并连接一次性运行整个流,而不会导致转换中潜在的死锁。

    【讨论】:

    • 好吧,我的转换应该是做 ETL。 - 使用流值查找组合来自 CSV 和数据库(PostgreSQL)的数据 - 连接字段以创建新字段 - 使用 Java 过滤器到 ETL(数据条件),然后计算数据(就像在编程中使用 IF ELSE 语句) -使用 Sorted Merge 将数据再次合并为一个。
    • 我的错误发生在数据到达 Sorted Merge 时。而且我所做的解决方案不起作用。我会尝试它给出结果。根据您的建议,我必须在 Merge Join 前面添加 Sort Row 步骤,这意味着我还需要将 Sorted Merge 更改为 Merge Join。
    • 用有限的行数预览数据,看看这是否是您真正想要的。我觉得不太可能。无论您的目标是什么,这种转变都不会扩大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多