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