先日SQL Has Problems. We Can Fix Them: Pipe Syntax in SQLという論文を読んだ。この論文における現状認識は、雑にまとめてしまえば以下のようなところだろう。

  • SQLの構文には欠点がある
    • 記述の流れと処理の流れが一致しない
    • 煩雑な記述が必要となりやすい
    • 拡張性に乏しい
  • SQLの構文のうち句や式の部分は悪くない
  • SQLの構文以外の部分は良い
  • SQLを別言語で置き換えるのは難しい

言われてみるまで拡張性については考えたことがなかった。確かにテーブル名やカラム名と区別をつけられるように予約語を追加するのは難しそうだ。しかし区別がつけられなければ既存のクエリに対する破壊的変更となり得る。いっそPRQLなど別言語への移行できれば楽かもしれないが過去の資産が膨大すぎてそれも難しい。

これらの解決手段として論文ではパイプ構文なるものが提案されていた。

  • あくまで新しい構文の追加なので既存のクエリがそのまま使える
    • パイプを表す記号として|>を採用し、既にビット単位の論理和で使われている|との曖昧性を避けている
    • |> の直後に現れるのは SELECTEXTEND などのキーワードのみなのでテーブル名やカラム名との区別の問題がない
  • 新しい構文についても句や式の部分は既存の構文を踏襲しており馴染みやすい

パイプ構文はもうZetaSQL実装されていてGoogle社内でも利用されつつあるらしい。これがあればプログラムによるクエリの組み立ても楽になるだろうし各種ツールとの相性も良いと思うので是非とも普及して欲しい。