我尝试使用 sqlalchemy 连接 teradata,以便使用 pandas 的 read_sql 和 to_sql 方法。
但是,连接速度太慢了。即使是简单的东西,例如 pd.read_sql('select current_date'),也需要 30 多秒才能完成。
我真的不明白为什么这么慢。如果有人以前遇到过类似的问题,请告诉我为什么以及如何解决这个问题。谢谢!
更新:
我尝试了 cProfile 和 sqlTAP 并意识到缓慢是由于方言生成的一些查询。has_table 肉类方法将运行对 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 视图进行过任何调整?谢谢。