簡體   English   中英

如何有效地將混合類型 pandas DataFrame 加載到 Oracle 數據庫中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM