为什么在查询结束时需要使用单词foo。
import * as Obj from "./file.js";
如果删除单词foo,则代码失败。
答案 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"
写下任何合法的别名。如此倾向..