从Jaydebeapi Netezza读取的熊猫read_sql非常慢

时间:2020-08-03 15:40:01

标签: python pandas performance jaydebeapi read-sql

我正在使用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))

该查询是来自database.table的简单选择*

我正在读取具有700K行的表,并创建一个csv(创建时大小为600 MB);读取的sql花了很多时间来读取数据库表。 数据库开始日期时间是2020-08-03 10:26:11.317 数据库结束日期时间是2020-08-03 11:15:19.841

您看到的将近一个小时。为什么要花这么长时间阅读?

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

我的服务器没有内存问题;它具有超过200G的可用内存空间,并且在运行该进程时几乎不占用任何CPU。什么是瓶颈?还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

遇到了类似的问题...查询200亿个行表需要20分钟才能通过read_sql运行,而通过SSMS平均只需要25s。我不确定为什么(我一直在试图找出问题的原因而找到了您的问题),但是添加chunksize作为参数会产生奇迹。我将其设置为10 ** 5。查询下降到平均22秒。

int_df = pd.read_sql(query,conn,chunksize = 10 ** 5)

希望这会有所帮助。