【问题标题】:Optimizing pd.read_sql优化 pd.read_sql
【发布时间】:2021-01-22 02:25:47
【问题描述】:
conn1 = pyodbc.connect('DSN=LUDP-Training Presto',uid='*****', pwd='****', autocommit=True) 

 sql_query =        "SELECT             zsourc_sy, zmsgeo, salesorg, crm_begdat, zmcn, zrtm, crm_obj_id, zcrmprod, prod_hier, hier_type, zsoldto, zendcst, crmtgqtycv, currency, zwukrs, netvalord, zgtnper,zsub_4_t \
                    FROM                `prd_updated`.`bw_ms_zocsfs05l_udl` \
                    WHERE               zdcgflag = 'DCG' AND crm_begdat >= '20200101' AND zmsgeo IN ('AP', 'LA', 'EMEA', 'NA')"

我必须将以下查询加载到 pandas 数据帧中,但由于该表包含超过 1000 万行数据,因此 pd.read_sql 语句已经加载了几个多小时。有没有办法加快这个过程?

contract_table = pd.read_sql(sql_query,conn1)

【问题讨论】:

  • 请不要在问题中使用图片。编辑您的问题并以文本形式分享查询。

标签: python sql performance pyodbc


【解决方案1】:

您可以将 chunksize 参数传递给 read_sql 函数 (docs),这会将其变成一个生成器,该生成器返回具有指定行数的数据帧的迭代器。

df_iter = pd.read_sql(sql_query,conn1, chunksize=100)

for df in df_iter:
    for row in df: # 100 rows in each dataframe in this example
        # do work here

生成器是处理因太大而无法一次全部放入内存的数据的有效方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多