[英]Pandas: how to identify columns with dtype object but mixed-type items?
[英]How to efficiently load mixed-type pandas DataFrame into an Oracle DB
祝大家新年快樂!
我目前正在努力解決ETL 性能問題,因為我正在嘗試將更大的 Pandas DataFrames(1-2 mio 行,150 列)寫入 Oracle 數據庫。 即使只有 1000 行,Panda 的默認to_sql()
方法也可以運行超過 2 分鍾(參見下面的代碼片段)。
我強烈的假設是,這些性能問題在某種程度上與底層數據類型(主要是字符串)有關。 我在 1000 行隨機字符串(基准:3 分鍾)和 1000 行大隨機浮點數(基准:15 秒)上運行了相同的工作。
def_save(self, data: pd.DataFrame):
engine = sqlalchemy.create_engine(self._load_args['con'])
table_name = self._load_args["table_name"]
if self._load_args.get("schema", None) is not None:
table_name = self._load_args['schema'] + "." + table_name
with engine.connect() as conn:
data.to_sql(
name=table_name,
conn=conn,
if_exists='replace',
index=False,
method=None# oracle dialect does not support multiline inserts
)
return
這里的任何人如何使用 python 將混合數據有效地加載到 Oracle 數據庫中?
非常感謝任何提示、代碼片段和/或 API 建議。
干杯,
正如您在問題中所說,您無法將method='multi'
與您的 db 風格一起使用。 這是插入速度如此之慢的關鍵原因,因為數據是逐行進行的。
使用@GordThompson 建議的 SQL*Loader 可能是相對寬/大表的最快路徑。 設置 SQL*Loader 的示例
要考慮的另一個選項是cx_Oracle 。 使用 ZF79634DCC_Oracle2BC36E4396352520 和 cOracle 數據庫寫入 Pandas DataFrame 時,請參閱 Speed up to_sql()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.