0

パンダからread_sqlおよびto_sqlメソッドを使用するために、sqlalchemyを使用してteradataに接続しようとしました。

ただし、接続はとても遅いです。pd.read_sql('select current_date') のような単純なものでも、完了するまでに 30 秒以上かかります。

なぜこれがとても遅いのか、私にはよくわかりません。以前に同様の問題を経験したことがある場合は、その理由と解決方法を教えてください。ありがとう!

更新:
cProfile と sqlTAP を試してみたところ、遅いのは方言が生成したクエリが原因であることがわかりました。has_table ミートホッドは dbc.tablesvx ビューへのクエリを実行します。このクエリは、ビューが約 55,000 行しかないのに、完了するまでに約100 秒かかります。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 ビューの調整を行った人はいますか? ありがとう。

4

0 に答える 0