我尝试使用sqlalchemy连接teradata,以便使用read_sql和to_sql方法形成pandas。
然而,连接速度很慢。即使是简单的东西,比如pd.read_sql('select current_date'),也要花费30多秒才能完成。
我真的不明白为什么这么慢。如果以前有人遇到类似问题,请告诉我为什么以及如何解决这个问题。谢谢!
更新:
我尝试了cProfile和sqlTAP,并意识到缓慢是由于方言生成的一些查询。 has_table meathod将运行对dbc.tablesvx视图的查询,此查询将花费 100秒来完成,而视图只有大约55k行。对于pd.to_sql,可能会多次调用此has_table,并且需要对系统表进行一些其他查询。
-- query from has_table method
SELECT tablename
FROM dbc.tablesvx
WHERE DatabaseName=?
AND TableName=?
-- query form drop_table method
SELECT tablename
FROM dbc.TablesVX
WHERE DatabaseName = ?
AND (tablekind='T'
OR tablekind='O')
似乎我需要做的就是调整系统表以使查询运行得更快。但是,我们的sql帮助人员告诉我,那些系统表已经处于最佳性能。这可能吗?是否有人对teradata DBC视图进行了任何调整?感谢。