У меня есть такой фрейм данных:
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 ...