ETL प्रक्रिया के दौरान मुझे एक पोस्टग्रेस डेटाबेस से दूसरे में JSON कॉलम निकालने और लोड करने की आवश्यकता होती है। हम इसके लिए पांडों का उपयोग करते हैं क्योंकि विभिन्न स्रोतों/गंतव्यों से डेटा पढ़ने और लिखने के कई तरीके हैं और सभी परिवर्तन पायथन और पांडों का उपयोग करके लिखे जा सकते हैं। हम ईमानदार होने के दृष्टिकोण से काफी खुश हैं .. लेकिन हमने एक समस्या को मारा।पांडस का उपयोग कर पोस्टग्रेस में जेएसओएन कॉलम लिखना .to_sql
आमतौर पर डेटा को पढ़ने और लिखना काफी आसान है। आप स्रोत से डेटा पढ़ने के लिए pandas.read_sql_table का उपयोग करें और इसे गंतव्य पर लिखने के लिए pandas.to_sql का उपयोग करें। लेकिन, चूंकि स्रोत तालिकाओं में से एक के पास जेएसओएन (पोस्टग्रेस से) के कॉलम थे, to_sql
फ़ंक्शन निम्न त्रुटि संदेश से क्रैश हो गया था।
df.to_sql(table_name, analytics_db)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/pandas/core/generic.py", line 1201, in to_sql
chunksize=chunksize, dtype=dtype)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/pandas/io/sql.py", line 470, in to_sql
chunksize=chunksize, dtype=dtype)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/pandas/io/sql.py", line 1147, in to_sql
table.insert(chunksize)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/pandas/io/sql.py", line 663, in insert
self._execute_insert(conn, keys, chunk_iter)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/pandas/io/sql.py", line 638, in _execute_insert
conn.execute(self.insert_statement(), data)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 945, in execute
return meth(self, multiparams, params)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
compiled_sql, distilled_params
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
context)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception
exc_info
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1159, in _execute_context
context)
File "/home/ec2-user/python-virtual-environments/etl/local/lib64/python2.7/site-packages/sqlalchemy/engine/default.py", line 459, in do_executemany
cursor.executemany(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'dict'