簡體   English   中英

SAS內存不足錯誤

[英]SAS out of memory error

我在SAS DIS(數據集成工作室)中遇到“遠程進程內存不足”: 在此輸入圖像描述

由於我的方法可能是錯誤的,我將解釋我正在處理的問題以及我已經決定的解決方案:

我有一大堆需要清理的客戶名稱。 為了實現這一點,我使用包含正則表達式模式及其相應替換的.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循環轉換),其中我首先對我的數據集的行進行編號,然后一次以10000個名稱的批量應用前面的邏輯。 很長一段時間后,我得到了同樣的內存不足錯誤,但是當我檢查我的目標表(Teradata)時,我注意到它運行並加載了除最后一次迭代之外的所有數據。 當我將循環大小從10000切換到1000時,我看到了完全相同的行為。

出於測試目的,我一直只使用大約約500K行,但很快將需要處理數百萬,並且擔心這將如何工作。 作為參考,我正在應用的一組清潔規則目前是20行,但可能會增長到幾百行。

  • 使用帶有規則的文件而不是直接在我的datastep中對正則表達式進行硬編碼會顯着降低效率嗎?
  • 有沒有辦法實現這一點而不必循環?
  • 由於我的數據集在每次循環迭代時都被覆蓋,對於1000行長(和3列)的數據集,怎么會出現內存不足錯誤?
  • 最終,我如何解決這個內存不足錯誤?

謝謝!

問題是,作業生成的日志太大了。 可能的解決方案是禁用日志記錄或將日志重定向到可以定期清除和/或具有足夠空間的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM