2017-10-06 92 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 –