繁体   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