読譜活動 – ZetaSQL

ちょっとばかし ZetaSQL のコードを読んでみるターン。DuckDB しか知らないと Duck 活動してもいまいち自分の SQL 力が高まらないなということで、ガチ勢の SQL パーサを読んでみる。ZetaSQL は Google 社内の SQL 方言をすべて駆逐した本気の二周目 SQL 実装である。これを読めば SQL への理解も高まるというものでしょう。オープンソースへのコードダンプがどのくらいちゃんとしているのかは怪しいが、それは見ればわかるでしょうということで。

  • まずビルドしてみるべく Bazel のインストールからスタート。
  • JDK もいるらしいので apt-get install openjdk-17-jdk
  • ビルドはじまった。WSL2 がんばってくれ・・・
  • ビルドをまちつつコードサイズを調べると・・・
$ find zetasql/ -type f | xargs wc
  ...
  852658  2684718 30878589 total

$ find zetasql/ -type f -name "*.test" | xargs wc
  ...
  408165  1213844 13169468 total

$ find zetasql/ -type f -name "*_test.cc" | xargs wc
 ...
  100019  276858 4024329 total

  • というわけでテストなしで 300k-400k くらい。パーサだけなのに DuckDB よりでかいんじゃないか大企業・・・。なお Java binding があるが、それは数えていない。
  • Python がないといってビルドが失敗している。そして pyenv が入っていない。やれやれ・・・そして Python 3.8+ がサポートされていない!(こんな感じの問題っぽい)ここで breaking change をつっこんでくる Python もどうかと思うが、一体社内の Python バージョンいくつなんだろうな気にしたこともなかったが・・・。
  • ビルドを待ちつつコードで読むか。
  • サンプルを見ると zetasql/public/analyzer.h が入口なのかな。他にもいっぱいファイルあるけど、”Analyzer Famework” を名乗っているので、この AnalyzerOutput に必要なものは全部入っているのかもしれない。しかしもうちょっと E2E なサンプルないかな。
  • と README を読むと execute_query というのがあるらしい。こいつを理解するのがちょうどよい starting point かもしれない。
  • Google C++ はなんか特殊だよな良くも悪くも。新卒とかで入ってきて C++ の、よりによってこんな特殊な dialect をやらされる若者とかちょっと気の毒な気もするが、クラウドとかだと G style の C++ も一定程度は知名度あるのだろうか。たとえば Envoy は Bazel でビルドされる C++ だが、いまちらっと見た感じここまでのヤバさは感じない。ABSL が厳しいのかもしれない。
  • さて Evaluator というのがあって、実際に式や文を評価でいるらしい。しかしこんな実行のコアの部分をフレームワークに握られるとイヤそうだが、どうなのかね。商用製品では別のレイヤでインテグレートしており、これはカジュアルユーザ(とは?)向けなのかもしれないけれど。
  • などといいつつビルドがまったく終わらないこのヤバさ。Duck よりでかいのは間違いない。時間切れにつき今日はここまで。