我需要用新的pandas数据框替换Hive中的表。我正在使用pyhive创建连接引擎,随后使用带有'if_exists'作为替换的pandas.to_sql。
from pyhive import hive
my_data = pd.read_csv('my_data.csv')
conn = hive.Connection(host="111.11.11.11", port=10000, username="abcd")
my_data.to_sql(name='table_name', con=conn, if_exists='replace', schema='my_schema')
conn.close()
但是,这将导致意外错误,如下所示:
DatabaseError: Execution failed on sql: SELECT name FROM sqlite_master WHERE type='table' AND name=?;
not all arguments converted during string formatting
unable to rollback
其他答案似乎表明这与期望使用SqlAlchemy引擎的to_sql有关-我的印象是pyhive用来创建连接。任何有关如何适当执行此命令的指导将不胜感激。
值得注意的是,在其他地方,该相同的连接从Hive读取数据没有问题。
按预期工作:
conn = hive.Connection(host="111.11.11.11", port=10000, username="abcd")
my_data = pd.read_sql('select * from my_table', conn)
conn.close()
其他答案似乎表明这与期望使用SqlAlchemy引擎的to_sql有关-我的印象是pyhive用来创建连接。
PyHive可以创建一个SQLAlchemyEngine
对象,但不能创建您的方法。如PyHive文档所示,您需要执行以下操作
engine = create_engine('hive://localhost:10000/default')
然后将engine
对象传递给to_sql
。
[read_sql]正常工作
read_sql
通常只能与DBAPI连接一起使用,但是to_sql
需要SQLAlchemy Connectable
(Engine
或Connection
),因为它可能需要生成DDL。有关更多信息,请参见此答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句