【问题标题】:SCALA TERADATA SQL ExceptionSCALA TERADATA SQL 异常
【发布时间】:2018-03-18 12:49:52
【问题描述】:

我是 teradata 和 scala 的新手。我正在 scala 中执行一个查询,该查询抛出 SQL 异常,但相同的查询在 Teradata Studio 中运行良好。

下面是查询:

 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] [SQLState 42000] 语法错误,预期类似于 名称或 Unicode 分隔标识符或“UDFCALLNAME”关键字或 '(' 在'FROM' 关键字和'Select' 关键字之间。

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))

请帮忙。

【问题讨论】:

  • 你能展示包含这个查询的 Scala 代码吗?听起来这可能是您创建字符串文字的方式的问题。
  • 你可以尝试在没有 where 子句的情况下运行它吗?
  • 我也试过了,结果还是一样的错误。它工作的唯一方法是当我喜欢((从testdb.loan中选择*)作为贷款数据)

标签: scala teradata


【解决方案1】:

我可以通过使用下面的代码来修复

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)

【讨论】:

  • 好像 scala 前缀 SELECT * FROM ,这也解释了无法添加 ORDER BY 的原因(在派生表中是不允许的)。我从未使用过 Scala,但应该有一些设置来改变这一点。
  • 你是对的 select * from 得到前缀。如果我需要它,我必须使用结果集并将其转换为 df
  • 您可以在查询中添加 order by,我猜问题是您没有将查询括在两个括号“( ... ) qry”中。
猜你喜欢
  • 1970-01-01
  • 2019-10-10
  • 2019-02-01
  • 1970-01-01
  • 2013-12-30
  • 2021-12-07
  • 2020-08-13
  • 1970-01-01
  • 2017-02-14
相关资源
最近更新 更多