Informix JDBC PySpark считывает результаты в именах столбцов как значения столбцов - PullRequest
0 голосов
/ 13 февраля 2019

Я читаю данные из различных источников JDBC, используя метод чтения PySpark.JDBC читает из Teradata, mySQL, Oracle, SQL Server - все работает на 100%, однако сейчас я пытаюсь читать из Informix, и в результате заголовки столбцов в значениях столбцов вместо фактических данных:

query_cbu = '''
SELECT first 5 
ac2_analysis_p
FROM informix.ac2_aux_cust
        '''

Задание параметра заголовка не помогло:

df_cbu = \
      spark.read.format("jdbc") \
      .option("url", url) \
      .option("dbtable", '({}) tbl'.format(query_cbu)) \
      .option("user", db_username) \
      .option("password", db_password) \
      .option("header", "true") \
      .load()

df_cbu.show()

Результат:

+--------------+
|ac2_analysis_p|
+--------------+
|ac2_analysis_p|
|ac2_analysis_p|
|ac2_analysis_p|
|ac2_analysis_p|
|ac2_analysis_p|
+--------------+

При использовании того же самого драйвера jdbc (ifxjdbc.jar) значения возвращаются корректно из DBVisualiser:

enter image description here

Я не могу представить себе какой-либо механизм, который может вызвать это,Может кто-нибудь посоветовать мне, где начать искать проблему?

1 Ответ

0 голосов
/ 14 февраля 2019

Я верю (и я видел это когда-то раньше, так что уходит из памяти здесь), что вам нужно включить DELIMIDENT в URL вашего драйвера JDBC.

DELIMIDENT=Y

https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.jdbc_pg.doc/ids_jdbc_040.htm#ids_jdbc_040

Причина в том, что в то время как другие драйверы JDBC уже указывают имена пользователей / таблиц в метаданных, которые использует Spark, Informix JDBC делаетне смущает слой Sparks JDBC.Включение DELIMIDENT в драйвере добавляет их.Есть и другие последствия использования DELIMIDENT, поэтому убедитесь, что он делает то, что вы хотите, но его можно включить.

...