Spark 3.0 JdbcRDD Java — проблема с указанием нижнего и верхнего пределов для представлений без столбца ID

#apache-spark

#apache-spark

Вопрос:

Я использую Spark 3.0, в моей Java-программе я запрашиваю данные из представлений, которые находятся в Oracle DB. Я использовал Java API JdbcRDD для запроса представлений. Проблема, с которой я сталкиваюсь, заключается в том, что представление не содержит столбцов ID или timestamp. Итак, я не могу создать свой 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.

Ответ №1:

Я смог преодолеть ограничение, используя ROWNUM в запросе. Используя ROWNUM в качестве нижнего и верхнего пределов, я теперь могу получать данные с помощью 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<=?"`