2017-09-11 31 views
0

我一直在嘗試執行一個非常長的SQL查詢並在R中得到結果到一個數據框中。但是下面一行將引發一個錯誤並顯示部分在控制檯查詢(截斷它)dbGetQuery在R截斷真正長的SQL查詢(長度爲10564個字符)

my_dataframe <- dbGetQuery(conn, my_large_query) 

查詢的長度是10564個字符,其中我使用了大量的CTE的。 我已經通過R studio中的選項菜單刪除了字符串截斷,但是我不知道R中的dbGetQuery函數是否存在字符限制?

有什麼建議嗎?

  • RDMBS:DB2(在IBM AS400)
  • [R包裝:DBI(庫 - RJDBC)
+0

您提出的問題可能取決於多個因素,包括您要連接的數據庫以及用於連接的包。也許你可以包含更多的信息。 (話雖如此,一個長時間的查詢難以捉摸,也許這可能從減少查詢,使用存儲過程,使用視圖,使用參數化查詢等等中受益)。 – r2evans

+0

我們可以看到您的部分嘗試查詢嗎?您可能冗餘重複生產線,並可使用DRY-er解決方案進行優化。 – Parfait

+0

這是一個查詢問題(我碰到了一個CTE,它巧合地是數據庫中的'實際'表)。感謝您的回覆 –

回答

1

你提到改變 '字符串截斷',但如何warning.length

options("warning.length"={integer}) 

我還建議你在任何GUI可用於數據庫的情況下首先測試查詢。當您驗證查詢沒有問題時,請在R中運行它。

當dbGetQuery(假設DBI包)引發sql/database錯誤時,錯誤的實際內容將不會顯示,直到之後查詢的全文。換句話說,如果查詢文本在R錯誤輸出中被截斷,那麼數據庫錯誤代碼/文本將根本不可見。這個問題可能是非常簡單的事情,比如無與倫比的括號或缺少逗號。

請注意錯誤消息是否以Error in dbGetQuery(R問題)或Error in .verify.JDBC.result(數據庫問題)開頭。

+0

在GUI(db2)上執行它,語法很好。選項(「warning.length」)是默認的(即1000),我將其設置爲8170,截斷的字符串不再顯示,但我的會話突然崩潰 –

+0

這是一個數據庫問題「.verify.JDBC.result錯誤」 。更新了SQL語法 - 我從一個壞表中讀取數據(這恰巧是db中的一個有效表)感謝回覆:)感謝幫助。 –