2014-03-03 20 views
0

當我使用「執行腳本行」上述語法語法(MS SQL)一步......它顯示成功但臨時表沒有被創建。 Plz幫助我解決這個問題。如何創建臨時表使用(選擇*從成表## TEMP)使用Pentaho的數據集成

+0

根據[這](http://stackoverflow.com/questions/3887989/global-temporary-tables-in-sql-server)全局臨時表走時,他們都連接走出去的範圍。一旦轉換結束,將不再有臨時表。請告訴我們更多關於你在做什麼以及你想如何使用臨時表。 –

+0

我們使用Select語句而不是table ...例如「select * into ## Temp from(select * from ABC)X」。在此之後,我們使用information_schema.COLUMNS來使用這個全局臨時表來獲取數據類型和列的其他信息。 – user3374000

+0

實際上,如果我們執行select * into ## Temp from(select * from ABC)X;語句直接在MSSQL數據庫中,然後它工作正常,但如果我們嘗試通過Pentaho數據集成(PDI)工具執行它,則全局臨時表不會被創建。此外,PDI也不會給出任何錯誤...它的運行成功,但全局臨時表沒有被創建。請幫我解決這個問題。 – user3374000

回答

1

是的,你看到的行爲正是我所期望的。它在TSQL提示符下正常工作,在轉換中不會引發錯誤,但轉換完成後該表不存在。

這裏的問題是PDI轉換的執行模型。運行轉換時,每個步驟都會獲得自己的執行線程。在啓動時,任何需要數據庫連接的步驟都有其獨特的連接。處理完成後,所有步驟都從數據庫斷開。這包括定義臨時表的連接。一旦發生這種情況(定義的連接超出範圍),臨時表將消失。

請注意,這意味着在轉換中(與作業相對),您無法假定任何特定順序的完成(無Blocking Steps)。

我們還沒有很多細節對你試圖用這個臨時表做什麼,以及如何你使用它的數據,但我懷疑你想要的內容之外您的轉換堅持。在這種情況下,你有一些選擇,但是像這樣的全局臨時表根本不起作用。

選項浮現在腦海:

  1. 轉換臨時表到永久表中。這是最簡單的 解決方案;你基本上正在製作一個臨時表,用一個步驟(或其他)加載它,然後用Table Input步驟在其他變換中讀取它。
  2. 將表格內容寫入臨時文件,其格式類似於Text File OutputSerialze to File步驟,然後從 其他變換中讀回它。
  3. 將行存儲在內存中。這涉及將您的變換包裝在 作業中,並使用Copy Rows to ResultsGet Rows from Results步驟。

這些方法中的每一個都有自己的優點和缺點。例如,在內存中存儲行將比寫入磁盤或網絡更快,但內存可能有限。

這聽起來像你可能會根據你在做什麼ETL Metadata Injection一步需要另一個步驟。此步驟允許您在很多情況下將元數據從一個轉換動態移動到另一個轉換。請參閱docs以瞭解其中每種方法的工作原理。

如果您想進一步的幫助在這裏,或我做了一個錯誤的假設,請編輯你的問題,你可以添加儘可能多的細節。

相關問題