使用Scala在Spark中使用Teradata JDBC创建和查询易失性表

时间:2016-01-19 18:06:29

标签: scala jdbc apache-spark teradata

在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测试查询中的易失性表的功能。原始查询具有多个易失性表。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

我不了解Scala,也不了解Spark,但是在查看Java文档中的read.jdbc方法(Spark Javadoc)时,它期望将一个表名作为第二个参数。

因此,Spark库正在做某种" select * from(table parameter value)"这证明了错误信息(正如dnoeth已经说过的那样)