2017-10-06 88 views
0

我是teradata和scala的新手。我在scala中執行一個查詢,該查詢正在拋出SQL Exception,但Teradata studio中相同的查詢運行良好。SCALA TERADATA SQL例外

下面是查詢:

接收
SELECT COUNT(loan_no) 
    ,field1 
    ,field2 
    ,field3 
FROM testdb.loan 
WHERE field1 < DATE '2017-09-30' 
GROUP BY field1 
    ,field2 
    ,field3 
ORDER BY field1 

錯誤是:

java.sql.SQLException中:[Teradata數據庫] [TeraJDBC 15.00.00.20] [錯誤3707] [42000的SQLState ]語法錯誤,預期類似於 名稱或Unicode分隔標識符或'UDFCALLNAME'關鍵字或 '(''FROM'關鍵字和'選擇'關鍵字之間的關係

Scala代碼

val queryString = "SELECT COUNT(loan_no),field1,field2,field3 FROM testdb.loan WHERE field1 < DATE '2017-09-30' GROUP BY field1,field2,field3 ORDER BY field1" 

val connString = 
"jdbc:teradata://test.udaystd.com/,TMODE=TERA,charset=UTF8, 
user="+userid+", password="+passwd+", ,charset=UTF8" 

val dbdriver = "com.teradata.jdbc.TeraDriver" 

val jddf = sqlContext.load("jdbc", 
    Map("url" -> connString, 
    "dbtable" -> queryString, 
    "driver" -> dbdriver)) 

請幫助。

+0

可以顯示包含此查詢的Scala代碼嗎?聽起來像這可能是你創建字符串文字的一個問題。 –

+0

你可以嘗試運行它w/out where子句嗎? –

+0

我也試過,結果是一樣的錯誤。它的工作方式唯一的方法是當我(像(從testdb.loan選擇*)作爲loandata) –

回答

0

我可以通過使用下面的代碼

val queryString = " (SELECT COUNT(loan_no) as loancnt 
,field1,field2,field3 FROM testdb.loan WHERE field1 < DATE '2017-09-30' 
GROUP BY field1,field2,field3) as LOANDATA" 

而且解決,我無法使用order by。所以我在數據框中獲得它之後命令它。

val orderedDF = df.orderBy($"field1".desc) 
+0

看起來像scala前綴'SELECT * FROM',這也解釋了無法添加'ORDER BY'(它不允許在派生表)。我從來沒有與Scala合作,但應該有一些設置來改變這一點。 – dnoeth

+0

你是正確的選擇*獲得前綴。如果我需要它,否則,我必須使用結果集並將其轉換爲df –