我有一种情况,我将从配置单元列中获取查询作为文本。我应该通过连接到源系统来获取该查询的行数。
下面是我的代码(注意:其中包含一些case语句和for循环。我粘贴了简化形式的代码)
val tableResult = sqlContext.sql(s"select param_id,db_validation,type,src_dbtype,src_hostname,src_dbname,src_schema,src_tables,src_query from hivedb.db_vld_param1 where db_validation = 'Y' and param_id in (1300)")
val rdd= tableResult.collect()
val src_query= rdd(0).getString(8) // (my query is SELECT * FROM Schema.Table WHERE Primarykey = 1139)
val connectionString= "jdbc:sqlserver://hostname;database=DB;user=USER;password=PSWD"
val count_df= sqlContext.read.format("jdbc").option("url",(s"$connectionString")).option("dbtable",(s"""(SELECT count(*) row_count from (${src_query})a ) as temp""")).option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver").load()
但是我遇到了错误
NoViableAltException(307 @ [147:1:selectExpression:(expression | tableAllColumns);])org.apache.spark.sql.AnalysisException:无法 在's'''SELECT * FROM Schema.Table WHERE主键附近识别输入 在选择表达式中= 1139''',';第1行pos 19
但是当我从终端通过命令执行代码命令时,它工作正常。 有人知道什么时候出现这种错误。