[英]Write DataFrame to Hive using pyodbc DSN connection
如何使用 pyodc 連接將 dataframe 寫入 hive 表。 寫入時會出現編程錯誤。從本地將數據寫入 hive 的任何其他方式。
錯誤
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)
您正在將原始(DBAPI) pyodbc.Connection
給 pandas 的to_sql
。 正如to_sql 的文檔所述,這樣的Connection
object 被假定為 sqlite3 連接,因此to_sql
正在發送查詢
SELECT name FROM sqlite_master WHERE type='table' AND name=?;
詢問數據庫。 這不適用於 Hive(或 SQLite 以外的任何數據庫)。
對於任何其他數據庫,您需要將to_sql
傳遞給 SQLAlchemy Engine
或Connection
object 作為con=
參數。
我使用此源將 df 寫入 Hive: https://docs.microsoft.com/en-us/sql/machine-learning/data-exploration/python-dataframe-sql-server?view=sql-server-ver15
假設您有兩列 df,您可以使用以下代碼: 您需要確保您的表存在於數據庫中。
for index, row in df.iterrows():
writing_query = """
INSERT INTO
table_name
VALUES ('{}','{}')
""" .format(row[0], row[1])
conn = pyodbc.connect("DSN=*****", autocommit=True) # Creates a connection with the database
cursor = conn.cursor() # Creates a cursor
cursor.execute(writing_query) # Asks the cursor to execute the query
conn.close() # Closes the connection
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.