在Teradata中查询易失性表时使用Spark 1.5.1时出现以下错误:
Exception in thread "main" java.sql.SQLException: [Teradata Database] [TeraJDBC 15.00.00.20] [Error 3707] [SQLState 42000] Syntax error, expected something like a name or a Unicode delimited identifier or '(' between the 'FROM' keyword and the 'CREATE' keyword.
这是我正在运行的代码,会产生上述错误:
val url = "jdbc:teradata://FOO/, TMODE=TERA,TYPE=DEFAULT"
val properties = new java.util.Properties()
val driver = "com.teradata.jdbc.TeraDriver"
properties.setProperty("driver",driver)
properties.setProperty("username","USER")
properties.setProperty("password","PASSWORD")
var query =
f"""
CREATE VOLATILE MULTISET TABLE tmp AS
( SELECT * FROM database.table )
WITH DATA PRIMARY INDEX(CR_PLCY_ID) ON COMMIT PRESERVE ROWS;
COMMIT;
SELECT * FROM tmp;
"""
var df = sqlContext.read.jdbc(url,query,properties)
旁注:我过度简化了原始查询,以通过JDBC测试查询中的易失性表的功能。原始查询具有多个易失性表。
非常感谢任何帮助或建议。
答案 0 :(得分:0)
我不了解Scala,也不了解Spark,但是在查看Java文档中的read.jdbc方法(Spark Javadoc)时,它期望将一个表名作为第二个参数。
因此,Spark库正在做某种" select * from(table parameter value)"这证明了错误信息(正如dnoeth已经说过的那样)