高效的dask方法,用于读取带有500万行where子句的sql表

时间:2019-03-28 17:35:29

标签: python sqlalchemy dask

我在MSSQL中有一个5500万行的表,而我只需要其中500万行就可以放入一个简单的数据帧。当前,它不支持sql查询,但支持sqlalchemy语句,但是此处描述存在一些问题:Dask read_sql_table errors out when using an SQLAlchemy expression

我尝试实施建议的解决方案,但该过程仍然需要1分钟左右。

我还尝试将数据一次全部加载到pandas数据框中,然后进行整理,这大约需要2分钟。

以公认的快速方式加载约450万行表需要15秒。

generator = pd.read_sql(sql=query, con=uri,chunksize=50000)
dds = []
for chunk in generator:
    dds.append(dask.delayed(dd.from_pandas)(chunk, npartitions=5))
ddf = dd.from_delayed(dds)
CPU times: user 50.1 s, sys: 2.13 s, total: 52.2 s
Wall time: 52.3 s


result = engine.execute(query)
df = pd.DataFrame(result.fetchall())
df.columns = result.keys()
ddf = dd.from_pandas(df,npartitions=10)
CPU times: user 54.3 s, sys: 3.14 s, total: 57.4 s
Wall time: 2min 41s

ddf = dd.read_sql_table(table="4.5mil_table",
uri=uri, index_col='ID')
CPU times: user 117 ms, sys: 4.12 ms, total: 122 ms
Wall time: 16 s

我知道必须有一种更有效的方法来做到这一点,这是我所缺少的。

0 个答案:

没有答案