繁体   English   中英

Spark SQL为JDBC查询生成错误的上下限

[英]Spark SQL Generating Wrong Upper and Lower Bounds for JDBC Queries

所以我目前正在使用Spark-SQL进行POC工作,我需要在spark中使用spark-sql查询来并行化读取操作

 JavaRDD<Row> dataset = sqlContext.read().jdbc(jdBcConnectionString, getSqlQuery(), "tran_id"
                lowerbound, upperbound, partitions, props).toJavaRDD();

在您检查生成的查询之前,每个方法似乎都运行良好,并且工作正常(在我看来,这是MS Sql Server)。

下限查询是

exec sp_executesql N'SELECT * FROM table_name WHERE tran_id < 770425 or post_tran_id is null'

而上限查询变为

exec sp_executesql N'SELECT * FROM table_name WHERE tran_id >= 770425'

有人认为,指定范围的本质是获取列值介于指定的下限和上限之间的所有行。 但事实并非如此

请我是新来的火花,还有另一种方法可以实现这一目标

有人认为,指定范围的本质是获取列值介于指定的下限和上限之间的所有行。

不是,条件正确。 像往常一样,阅读文档比假设假设要好:

请注意,lowerBound和upperBound仅用于确定分区步幅,而不是用于过滤表中的行。 因此,表中的所有行都将被分区并返回。 此选项仅适用于阅读。

但是在您的情况下, lowerBound似乎等于upperBound

请我是新来的火花,还有另一种方法可以实现这一目标

如果要过滤where以下位置应用:

dataset.where(col("tran_id").between(lowerBound, upperBound))

或使用子查询作为表参数:

sqlContext.read().jdbc(
  jdBcConnectionString,
  "(SELECT * FROM table_name WHERE tran_id BETWEEN 0 AND 42) AS t", props);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM