#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<=?"`