Итак, у меня исходный запрос в Sybase примерно такой
query = "select * from Table_A A LEFT JOIN TABLE_B B ON A.id = B.id order by id"
Я пытаюсь извлечь данные из исходного запроса в spark, используя jdb c. Похоже, мне нужно обернуть мой запрос в круглые скобки и дать ему псевдоним, чтобы прочитать его в искре, как это
query = "(select * from Table_A A LEFT JOIN TABLE_B B ON A.id = B.id order by id) foo)"
Затем прочитать в фрейме данных искры как:
val src_df = spark.read
.format("jdbc")
.option("url", "$SYBASE_JDBC_URL")
.option("dbtable", query )
.option("user", "$USERNAME")
.option("password", "$PASSWORD")
.load()
Это дает мне следующую ошибку:
Exception in thread "main" com.sybase.jdbc4.jdbc.SybSQLException: An ORDER BY clause is not allowed in a derived table.
Поэтому я изменил свой запрос, чтобы удалить заказ на что-то вроде этого
query = "(select * from Table_A A LEFT JOIN TABLE_B B ON A.id = B.id) foo)"
И я получил еще одну ошибку, подобную этой:
Exception in thread "main" java.sql.SQLException: JZ0P8: The RSMDA Column Type Name you requested is unknown. This is a SAP internal error; please report it to technical support.
Однако, если я запускаю простой сценарий scala для выполнения запроса, он работает нормально.
query = "select * from Table_A A LEFT JOIN TABLE_B B ON A.id = B.id order by id"
val statement = connection.createStatement()
val resultSet: java.sql.ResultSet = statement.executeQuery(query)
Подобный запрос отлично работает с другими базами данных, такими как oracle с spark.
Есть ли способ изменить запрос для работы со Spark? Если нет, могу ли я преобразовать java. sql .ResultSet в dataframe в качестве альтернативы? Также я ищу решение, которое масштабируется с большими данными.
Спасибо