以前Presto/Trinoでのサブクエリ重複実行問題について書いたのですが、 takezoe.hatenablog.com その後調べたところ、最近のバージョンのPrestoDBではCTEの最適化機能が実装されているようなので少し調べてみました。 以下は公式サイトのCTE最適化機能に関するドキュメントです。 prestodb.io 以下のイシューを起点にして作業が進められているようです。 github.com CTEの出力を一時テーブルに書き出し、それをスキャンするという実装のようです。 github.com 当初は単純にすべてのCTEをマテリアライズするかどうかしか選択できなかったようですが、その後強化されてCTEにプロジェクションやフィルタをプッシュダウンできるようになったり、参照回数が閾値以上の場合にマテリアライズするといったことができるようになっています。 github.com