在查询结束时需要foo

时间:2018-04-17 19:44:24

标签: pyspark teradata

为什么在查询结束时需要使用单词foo。

import * as Obj from "./file.js";

如果删除单词foo,则代码失败。

1 个答案:

答案 0 :(得分:2)

根据评论中的错误对此处发生的事情进行逆向工程:

java.sql.SQLException: [Teradata Database] [TeraJDBC 15.10.00.33] [Error 3707] [SQLState 42000] Syntax error, expected something like a name or a Unicode delimited identifier or an 'UDFCALLNAME' keyword or '(' between the 'FROM' keyword and the 'SELECT' keyword.

很明显,您的dbtable参数需要SUBQUERY作为输入。无论sqlContext.read.format(" jdbc")发生了什么。选项将查询重写为:

 SELECT <something> FROM <dbtable> <possibly something more here>;

因此,它要求dbtable是一个子查询,这就是为什么你必须将它包装在括号中并给它一个别名foo

如果您阅读SPARK SQL的文档,您会看到:

  

dbtable:应该读取的JDBC表。注意任何事情   可以使用在SQL查询的FROM子句中有效。例如,   您也可以在括号中使用子查询而不是完整的表。

所以你可以给它一个表,或者,你可以选择给它一个子查询。由于它没有指定子查询别名需要foo,所以如果你觉得你可以在mysubquery"this is a poor choice for a subquery alias""f"写下任何合法的别名。如此倾向..