2016-07-11 19 views
0

(甚至加入)一個非常大的(11億行)表希望你們能有什麼,我希望能幫助那些在知道一個非常簡單的問題!閱讀Enterprise Guide中從Teradata的

我住(當然,工作)SAS企業指南中,我試圖執行一個簡單的左加入針對Teradata數據表。

該表格非常大(700列,11億行),到目前爲止,我一直通過我的程序頂部的LIBNAME語句進行連接,然後是通常的PROC SQL來讀取數據。

我遇到的問題是它非常緩慢。我在左邊的桌子上用90行成功地完成了連接,花了3個小時才完成。我想要使​​用的真實表格有15,000行。

我曾嘗試通過SQL直通方法連接,但是,這將引發一個hosts文件錯誤,我不能因爲企業的安全限制修復。

有沒有人有過這樣的任務經驗?

我應該提一下,我可以在Teradata中運行一個簡單的select *查詢SQL助手超過1分鐘(16,666,666 obs/s!),所以限制必須介於SAS/Teradata或SAS本身之間。

我很抱歉,我沒有貼實際的代碼片段,因爲他們是我的工作計算機上,但這個已被竊聽我年齡這麼想過我會看到,如果我錯過了什麼花招。

在此先感謝您的幫助。

+0

我應該提到,我只從teradata調用所需的4列,所以它不是因爲我打電話〜700多個不必要的列! – iain

+1

您是否允許在teradata上創建/加載表?由於左側連接是在SAS側完成的,所以大部分問題都與表的滿載有關。 – Jetzler

+0

Teradata中是否都有表格?或者您是否試圖使用Teradata表加入SAS表? – Tom

回答

0

您是否考慮過在Teradata中創建一個易失性表?由於這是在假脫機分配中創建的,因此您不需要明確的權限即可創建表。創建後,您可以將SAS數據集加載到易失性表中,並收集表的連接列和篩選列的統計信息。這將有助於優化程序瞭解有關「小」表的人口統計信息。易失性表格只會在會話期間持續存在,並且不能在多個會話中訪問。

然後重寫你的SAS代碼到SQL到Teradata的加入大表下推到您的揮發性表。結果可以返回到SAS並加載到另一個數據集中。

CREATE VOLATILE TABLE MyTable, NO FALLBACK 
(ColA SMALLINT NOT NULL, 
    ColB VARCHAR(10) NOT NULL 
) PRIMARY INDEX (ColA) 
ON COMMIT PRESERVE ROWS /* This is important */ 
; 

主要索引是Teradata如何分配數據並訪問數據。分佈在同一列的表格將加入「AMP本地」,不需要重新分配。這並非總是可行,因爲您的主索引選擇必須考慮均勻分佈以及訪問路徑。主索引不一定是唯一的,但可以是。

希望這會有所幫助。

1

因此,您要將SAS數據集加入Teradata表並希望返回匹配記錄。您需要使用SAS的DBMASTER =數據集選項。它指定哪個表是。通過告訴SAS,它知道哪個表要移動。

在這裏,我假設librefs已經分配和Teradata數據表是較大的 - 更多OBS - 比SAS數據集。

proc sql threads;從sastables.sasTable1,td.tdTable(dbmaster = yes)中選擇tdTable。* 其中tdTable.idNum = sasTable1。IDNUM;放棄;

如果偶然發現SAS數據集較大,則需要使用MULTI_DATASRC_OPT =選項。可以谷歌這些條款或查看SAS/Access to Relational Databases手冊。這個很不錯。

祝你好運。