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