在Spark SQL上下文中不支持子句



我正在尝试使用 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上查看更多详细信息读取方法 - 链接

相关内容

  • 没有找到相关文章

最新更新