Предложение WITH в искровой SQL-контексте не поддерживается - PullRequest
2 голосов
/ 16 марта 2019

Я пытаюсь получить записи из таблицы мэйнфреймов, используя spark sql context с приведенным ниже запросом

data_config.db2_qry = ВЫБРАТЬ A.E_No, A.E_Name FROM Scheema.Employee A WITH UR

но выдает ошибку ниже

com.ibm.db2.jcc.am.SqlSyntaxErrorException: ошибка SQL DB2: SQLCODE = -199, SQLSTATE = 42601, SQLERRMC = WITH; ГДЕ ГРУППА ЗАКАЖИТСЯ В ПЕРЕКЛЮЧЕНИИ МИНУС, ЗА исключением СОЮЗА), FETCH, DRIVER = 4.19.26

но если я выполню тот же запрос непосредственно в консоли мэйнфрейма, он будет работать нормально.

Как использовать предложение WITH в контексте sql spark?

Я использую версию spark 2.4.0

Я получаю записи, как показано ниже

filt_cond = "(" + data_config.db2_qry + ") ref_id"

db2Df = sqlContext.read.format ("jdbc"). Option ("url", data_config.db2_url) .option ("драйвер", "Com.ibm.db2.jcc.DB2Driver"). Вариант ( "dbtable", filter_cond) .option ("пользователь", data_config.db2_uname) .option ("пароль", data_config.db2_passwd) .load ()

1 Ответ

1 голос
/ 16 марта 2019

Проблема в запросе, который отправляется в Mainframe DB2, выбор метода spark jdbc, используемый для нажатия «WITH UR», требует изменения.

Используемый здесь метод чтения JCDB *

def jdbc(url: String, table: String, properties: Properties): DataFrame

и в этом методе скажем, что мы отправляем следующий запрос в db2 sql engine

"select a, b, c, d from table where d is not null with UR as table", это не тот же запрос, выдвинутый в ядре SQL мэйнфрейма DB2. искра посылает sql как

select a, b, c from (select a, b, c from table where d is not null with UR) as table вот тут и начались неприятности.

если вы хотите увидеть ту же ошибку для sql в Mainframe SPUFI или QMF или с другим инструментом, попробуйте выполнить построенный запрос с помощью spark, а не то, что мы написали в коде.

Чтобы преодолеть эту проблему при добавлении синтаксиса «WITH UR» в SQL вместо вышеуказанного метода spark jdbc, переключитесь на следующий метод spark jdbc, который позволяет нам создавать предикаты.

 def jdbc(url: String, table: String, predicates: Array[String],
 connectionProperties: Properties): DataFrame

нажмите sql как ""select a, b, c, d from table as tbl"

с predicates= Array("d is not null with UR")

в этом случае ожидаемый запрос сдвигается вниз. Надеюсь, что это поможет вам понять, как ее решить.

здесь вы можете увидеть более подробную информацию о методах чтения JDBC-спарк- Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...