簡體   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