【问题标题】:Spark 3.0 JdbcRDD Java - Issue in specifying lowerBound and upperBound for views with no ID columnSpark 3.0 JdbcRDD Java - 为没有 ID 列的视图指定 lowerBound 和 upperBound 的问题
【发布时间】:2020-09-13 22:37:53
【问题描述】:

我正在使用 Spark 3.0,在我的 Java 程序中,我正在从 Oracle DB 中的视图中查询数据。我使用 Java API JdbcRDD 来查询视图。 我遇到的问题是视图不包含任何 ID 或时间戳列。因此,我无法使用 lowerBound 和 upperBound 值构建我的 SQL 查询。 请在下面找到我需要在 Spark 中运行的示例查询。这里 exp_stg.usr 和 exp_stg.prtcpnt 是暴露给我的两个视图。

"SELECT a.participant, 
       a.desc, 
       b.firstname, 
       b.lastname, 
       b.dept, 
       b.telno, 
       b.emailaddr
FROM   usr_stg.prtcpnt a 
       LEFT OUTER JOIN usr_stg.usr b 
                    ON a.participant = b.participant 
WHERE  a.class = 'SpSession' "

我尝试在 spark 和 join 中使用临时表,但查询性能很差,因为每个视图中大约有 ~13,000,000 行。因此,我尝试在 Oracle DB 中使用连接查询。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    我能够在查询中使用 ROWNUM 克服约束。使用 ROWNUM 作为 lowerBound 和 upperBound 我现在可以使用 JdbcRDD 获取数据。 `

    SELECT ROWNUM as id, a.participant, 
           a.desc, 
           b.firstname, 
           b.lastname, 
           b.dept, 
           b.telno, 
           b.emailaddr
    FROM   usr_stg.prtcpnt a 
           LEFT OUTER JOIN usr_stg.usr b 
                        ON a.participant = b.participant 
    WHERE  a.class = 'SpSession' and ?<=ROWNUM and ROWNUM<=?"`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2019-09-24
      • 2017-11-26
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多