SAS 内存不足错误

SAS out of memory error

我在 SAS DIS(数据集成工作室)中得到一个 "The remote Process is out of memory":

由于我的方法可能是错误的,我将解释我正在处理的问题以及我已经决定的解决方案:

我有一长串需要清理的客户名单。为了实现这一点,我使用了一个包含正则表达式模式及其相应替换的 .csv 文件; (我使用这种方法是因为它更容易向文件添加新模式并将其上传到服务器以供部署的作业读取,而不是对新规则进行硬编码并重新部署作业)。

为了让我的数据步骤利用文件中的规则,我在数据步骤的第一次迭代中将模式及其替换添加到数组中,然后将它们应用到我的名字中。类似于:

DATA &_OUPUT;

    ARRAY rule_nums{1:&NOBS} _temporary_;
    IF(_n_ = 1) THEN
        DO i=1 to &NOBS;
            SET WORK.CLEANING_RULES;
            rule_nums{i} = PRXPARSE(CATS('s/',rule_string_match,'/',rule_string_replace,'/i'));
        END;
    SET WORK.CUST_NAMES;
    customer_name_clean = customer_name;
    DO i=1 to &NOBS;
        customer_name_clean = PRXCHANGE(a_rule_nums{i},1,customer_name_clean);
    END;
RUN;

当我 运行 在大约 10K 行或更少的行上执行此操作时,它总是会完成并且完成得非常快。如果我尝试 ~15K 行,它会阻塞很长时间并最终抛出 "Out of memory" 错误。

为了尝试解决这个问题,我构建了一个循环(使用 SAS DIS 循环 t运行sformation),其中我首先对数据集的行进行编号,然后在 10000 个名称的批次中应用前面的逻辑一个时间。很长一段时间后,我遇到了同样的内存不足错误,但是当我检查我的目标 table (Teradata) 时,我注意到它 运行 并加载了除最后一次迭代之外的所有数据。当我将循环大小从 10000 切换到 1000 时,我看到了完全相同的行为。

出于测试目的,我一直只处理大约 50 万行,但很快将不得不处理数百万行,我担心这将如何工作。作为参考,我正在应用的清理规则集目前有 20 行,但可能会增加到几百行。

谢谢!

问题原来是作业生成的日志太大。可能的解决方案是禁用日志记录或将日志重定向到可以定期清除的位置 and/or 已经足够 space.