pyodb c запрос обрезает переменные строки, но не при непосредственном выполнении (Impala) - PullRequest
0 голосов
/ 22 марта 2020

У меня есть такой фрейм данных:

df = pd.DataFrame(
    [['quite_long_string_1', 'abcdefghijk_1'],
    ['quite_long_string_2', 'abcdefghijk_2'],
    ['quite_long_string_3', 'abcdefghijk_3']],
    columns=["col1", "col2"]
)

Мое соединение установлено через pyodb c, и запрос выглядит так:

string = "INSERT INTO {0}.{1}(col1, col2) VALUES (CAST(? AS VARCHAR(255)), CAST(? AS VARCHAR(255)))".format(lab, table)
with conn.cursor() as cursor:
    for index, row in df.iterrows():
        cursor.execute(string, (row["col1"], row["col2"]))
    cursor.commit()

После запуска этого я go в мою таблицу через Hue, и данные выглядят так:

quite_lo abcdefg
quite_lo abcdefg

Теперь, когда я go напрямую через Hue (Impala) со строкой:

INSERT INTO mylab.mytable(col1, col2) VALUES (CAST('quite_long_string_1' AS VARCHAR(255)), CAST('abcdefghijk_1' AS VARCHAR(255)))

полные строки показаны как нормальные / ожидаемые. Почему это работает для одного, а не для другого? Сообщение об ошибке не выдается, только первые 7 символов отображаются только при вставке через библиотеку pyodb c. Я на Windows 7 Enterprise.

Для соединения у меня есть:

try:
    conn = pyodbc.connect('DSN=mydsn', autocommit=True)
    conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
    conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
    conn.setencoding(encoding='utf-8')
except pyodbc.Error as e:
    logger.debug("Hadoop connection error: {0}\n".format(e))

И использование SELECT version() дает impalad version 2.12.0-cdh5.15.1 RELEASE ...

...