使用 pyodbc dsn 连接将 dataframe 写到 hive

uqzxnwby  于 2021-04-09  发布在  Hive
关注(0)|答案(1)|浏览(712)

如何使用 pyodc 连接将 dataframe 写入 hive 表,写的时候出现了编程错误。
error

Error                                     Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py in execute(self, *args,**kwargs)
   1430             else:
-> 1431                 cur.execute(*args)
   1432             return cur

Error: ('HY000', "[HY000] [Cloudera][ImpalaODBC] (110) Error while executing a query in Impala: [HY000] : ParseException: Syntax error in line 1:\n...ERE type='table' AND name=?;\n                             ^\nEncountered: Unexpected character\nExpected: CASE, CAST, DEFAULT, EXISTS, FALSE, IF, INTERVAL, LEFT, NOT, NULL, REPLACE, RIGHT, TRUNCATE, TRUE, IDENTIFIER\n\nCAUSED BY: Exception: Syntax error\n (110) (SQLPrepare)")

在处理上述异常时,发生了另一个异常。

DatabaseError                             Traceback (most recent call last) <ipython-input-8-9f82c88c3a27> in <module>
      1 import pyodbc
      2 with pyodbc.connect("DSN=*****", autocommit=True) as conn:
----> 3     df.to_sql(name='Xyz', con=conn, schema='fgh',if_exists='append',index=False)
mklgxw1f

mklgxw1f1#

你将一个原始的(dbapi)pyodbc.Connection传递给pandas的to_sql,正如to_sql的文档所述,这样的Connection对象被假定为一个sqlite3连接,所以to_sql发送的是查询。

SELECT name FROM sqlite_master WHERE type='table' AND name=?;

这在 hive (或任何除 sqlite 以外的其他数据库)上是行不通的,对于其他数据库,你需要把to_sql传递给 sqlalchemyEngineConnection对象作为con=参数。
对于其他数据库,你需要传递to_sql一个sqlalchemyEngineConnection对象作为con=参数。

相关问题