2013-08-02 69 views
2

我正在嘗試重新創建我的OLAP多維數據集。立方體已經存在。然後,我SAS - 錯誤:無法爲NWAY聚合創建索引。

DELETE_PHYSICAL 

刪除物理立方體這種短期

PROC OLAP 

如下之後。 我的工作在批處理失敗,出現錯誤消息

NOTE: The cube registration was found. 
ERROR: Indexes cannot be created for the NWAY aggregation. 
NOTE: Number of NWAY records: 32899296 

有人能告訴我請它爲什麼失敗?我的其他測試工作正常,但那裏立方體/細節表只包含12,000,000行。是否有可能,NWAY聚合的行數太大?

這裏是短臨OLAP代碼:

PROC OLAP 
    CUBE     = "/XXX" 
    DELETE_PHYSICAL; 


    METASVR 
    HOST  = "XXX" 
    PORT  = xxx 
    USERID  = "XXX" 
    PW   = "XXX" 
    olap_schema="XXX"; 

RUN; 

PROC OLAP 
    CUBE     = "/XXX"; 


    METASVR 
    HOST  = "XXX" 
    PORT  = xxx 
    USERID  = "XXX" 
    PW   = "XXX" 
    olap_schema="XXX"; 

RUN; 

感謝名單!

+0

你似乎懷疑這是由於尺寸,所以也許你可以試試下面的兩兩件事:(1)降低該表的大小,然後再試一次看看是否能通過。 (2)啓用一些其他選項來跟蹤性能:PROC OPTIONS GROUP =(排序內存性能);跑; – mvherweg

+0

@Shorack:在處理proc olap之前使用您的代碼示例啓用選項。然而,我與memsize等有什麼關係?它不顯示執行proc olap時的利用率...所以我不能說它是否因內存太少而失敗。 – zuluk

回答

1

根據給定的首選項,無法在nway上創建索引。所以我加了下面的PROC OLAP(NOINDEX NO_NWAY)選項:

PROC OLAP 
    CUBE     = "/xxx" 
    DATA     = xxx.xxx 
    DRILLTHROUGH_TABLE  = xxx.xxx 
    PATH     = '/xxx' 
    DESCRIPTION   = 'xxx' 
    NOINDEX 
    NO_NWAY; 

    METASVR 
    HOST  = "xxx" 
    PORT  = xxx 
    USERID  = "xxx" 
    PW   = "xxx" 
    olap_schema="xxx"; 
RUN; 
2

在我看來,你有太多的唯一值(不一定是太多的行,但太多的獨特組合),因此它不能在分配的空間中正確創建索引。

看看this paper的一些建議。特別是,看看ASYNCINDEXLIMIT和INDEXSORTSIZE - 看看你是否可以增加那些允許它構建的東西。找出離你有多近的一個好方法是使用完整數據集的一個子集運行PROC OLAP,特別是使用感興趣變量的唯一值的子集,以查看您是否可以(例如)一半或四分之一的數據在您當前的限制範圍內。

如果您能夠創建12MM行但不是32MM行,那麼至少您可以嘗試將大小限制加倍並查看是否有效。 SAS的默認大小往往過於保守。

您也可以嘗試打開OPTION MSGLEVEL=I,因爲這應該會提供一些關於它嘗試創建的索引大小的其他信息。