[英]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.