SQLException (запрашиваемое имя типа столбца RSMDA неизвестно) в Sybase с использованием Spark - PullRequest
0 голосов
/ 17 марта 2020

Итак, у меня исходный запрос в 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 в качестве альтернативы? Также я ищу решение, которое масштабируется с большими данными.

Спасибо

1 Ответ

0 голосов
/ 18 марта 2020

пусть вопрос 1. Sybase db - это ASA или ASE? 2. попробуйте установить список столбцов после выбора .... и показать результат

...