1

我正在使用 Pandas 读取 sql 通过 jdbc/jaydebeapi 读取 netezza 表。

start_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
print(" DB Start Date Time is " + str(start_time))

int_df = pd.read_sql(query,conn)

end_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
print(" DB End Date Time is " + str(end_time))

查询是一个简单的 select * from database.table

我正在读取一个包含 700K 行的表并创建一个 csv(创建时大小为 600 MB);读取 sql 需要花费大量时间来读取数据库表。DB 开始日期时间是 2020-08-03 10:26:11.317 DB 结束日期时间是 2020-08-03 11:15:19.841

如您所见,差不多一个小时。为什么要读这么久?

我可以使用 nzsql 在几秒钟内读取此表,而使用 spark 数据帧只需 5 秒钟(包括写入 csv 的操作)。可能是什么错误?我没有转换——只是简单的提取;

我的服务器没有内存问题;它有超过 200G 的可用内存空间,并且在运行进程时几乎没有任何 cpu 使用率。什么是瓶颈?还有其他更好的方法来做到这一点吗?

4

1 回答 1

0

遇到类似的问题...查询 200 亿行表需要 20 分钟才能通过 read_sql,而通过 SSMS 平均只需 25 秒。我不知道为什么(我是如何找到你的问题的,因为我一直在试图弄清楚那部分),但是chunksize作为参数添加可以创造奇迹。我将其设置为 10**5。查询回落至平均 22 秒。

int_df = pd.read_sql(查询、连接、块大小=10**5)

希望这可能会有所帮助。

于 2020-08-25T01:45:38.030 回答