SQLで書いたほうが圧倒的に速い
―― この辺り(SQL)はミックさんに専門分野だと思いますが、いかがですか?
ミック ► 私が西内さんに初めてお会いしたきっかけは、西内さんが統計解析の現場でSQLをよくお使いなので、ということだったと記憶していますが、そのときに意外だなと思いました。
自分も以前、SQLを使って統計解析のまねごとみたいなことをしていた時期があったのですが、当時はSQLが高度な分析ができる言語という認識はなかったんです。今後はBI(Business Intelligence)ツールという、SQLを出力してくれるパッケージが簡単な切り口の分析を受け持つことになり、統計解析の現場でSQLが使用される機会は減っていくのだろうなと思っていました。
でも、西内さんが先ほどお話しされたように、分析できるようにきれいなデータを揃える作業(データクレンジング)は、アルゴリズムで書けるほど一般化されておらず、「非定形」なアドホック作業になりがちです。そこがうまく機械化できずボトルネックになっているのは、自分の経験を思い返しても確かにありますね。
西内 ► そこを解決すべく「GUI上で何とかします」というツールもあるのですが、分析の変数として使うカラムが増えてきた場合、GUIでやると「オレはいったい何回ドラッグして、何回クリックすればいいんだ?!」となってしまう。SQLで書いたほうが圧倒的に速い。
私は統計解析の際、元々SASをよく使っていたのですが、データを加工する部分と分析する部分の命令体系がきっちり揃い、こなれていてものすごく使いやすい。しかし、SASを使える場所や環境は限られていて、あの便利なデータ加工の機能はどうすればいいんだろうと考えたら、「あ、SQLを覚えればいいじゃないか」と気づいて。それから、ミックさんのSQL解説書を読み込ませていただいて、この数年でSQLを自分にたたき込んだんです。
ミック ► 私の最初の著書『達人に学ぶ SQL徹底指南書』は、私がデータウェアハウスでSQLを使って分析を行っていたころに執筆したものです。なので、まさに自分がこういう分析をしたいとか、こういうふうにデータを加工したいと思ったらこういうふうにSQLを書けばいい、と1つ1つ勉強しながらやっていたことがまとまっています。そういうところが西内さんに響くところがあったのかなぁと、大変うれしく思います。
今の西内さんのお話に関連して、SQLの何が優れているのかを考えて見ると、まず、RDBの中で正規化されたデータを扱うことに特化できているところでしょう。正規化されたデータを非正規化するのはとても単純な作業になります。逆に、そのかっちりした構造に落とせるところと、簡単にできると思ったことが実際に簡単にできるインタフェースを持っているところも、SQLの優れた一面です。
―― 特にSQLに向いているな、と感じる作業はありますか?
ミック ► 統計解析とかローデータ(raw data: 生のデータ)からクレンジングされた品質の高いデータに落としていくといった作業にとても向いていると思います。
基本的に、SQLでできることは手続き型言語でもできます。アプリケーション開発に強い人、つまり手続き型言語に強いのにRDBやSQLをあまり知らないという人たちは、データベース側にあるデータを愚直にアプリケーション側に持ってきて、アプリケーション側ですべて処理したりします。それも可能ですが、パフォーマンスが問題になるのはもちろん、保守性やコードの可読性が悪くなる傾向も見られます。
SQLのよいところは、簡単なことが簡単にやれて、複雑なこともある程度理解すれば比較的簡単にできる点です。また、それを行うときに一番強いDBサーバーのパワーを利用できるというのが、SQLが生まれてから40年間生き残っている理由なんだろうなと思います。
RDBMSにR言語のインタフェースが追加されたり、SQLにWINDOW関数が追加されたりしていますので、いずれデータベースが統計も含んだ大きなプラットフォームになる可能性もありますね。
