我正在尝试使用 SPARK SQL CONTECT 在以下查询中获取记录
data_config.db2_qry = select a.e_no,a.e_name,来自scheema.employee a with ur ur
但是它正在抛出以下错误
com.ibm.db2.jcc.am.sqlsyntaxerrorexception:db2 sql错误:sqlcode = -199,sqlState = 42601,sqlerrmc = with; with; with;在;在group dorge inter with lode there there there supers suppersect nofe nofe nofe nofe nofe nofe nofe nofe nofe nofe nofe)/p>
但是,如果我直接在大型机控制台中运行相同的查询,则可以正常工作。
如何在sql上下文中使用与子句?
我正在使用Spark版本2.4.0
我正在检索下面的记录
filt_cond ="(" data_config.db2_qry ")ref_id"
db2df = sqlcontext.read.format(" jdbc")。选项(" url",data_config.db2_url).option(" driver", " com.ibm.db2.jcc.db2driver")。选项( " dbtable",filt_cond).option("用户",data_config.db2_uname).option("密码", data_config.db2_passwd).load()
问题是在查询中发送到大型机DB2的查询,Spark JDBC方法选择用于推动"使用"需求更改。
Spark JDBC阅读方法是
def jdbc(url: String, table: String, properties: Properties): DataFrame
在这种方法中说,我们将以下查询推向DB2 SQL引擎
"select a, b, c, d from table where d is not null with UR as table"
,在大型机DB2 SQL引擎内推动的查询不是相同的查询。Spark将SQL发送为
select a, b, c from (select a, b, c from table where d is not null with UR) as table
这是麻烦开始的地方。
如果您想在大型机SPUFI或QMF或其他工具中查看SQL的相同错误,请尝试通过SPARK运行构造的查询,而不是我们在代码中写的内容。
要在将"使用UR"语法添加到SQL时克服此问题,而不是上面的Spark JDBC方法切换到Spark JDBC方法,该方法允许我们构造谓词。
def jdbc(url: String, table: String, predicates: Array[String],
connectionProperties: Properties): DataFrame
将SQL推为""select a, b, c, d from table as tbl"
使用predicates= Array("d is not null with UR")
在这种情况下,预期查询被推下。希望这可以帮助您实现解决方案的方向。
在这里,您可以在Spark JDBC上查看更多详细信息读取方法 - 链接