SQLはリングワ・フランカ

ちなみにリングワ・フランカはこういう意味です。

共通の母語を持たない人同士の意思疎通に使われる言語のことを指す。

リングワ・フランカ - Wikipedia

で象本の第二版のHiveの章のところでSQLはリングワ・フランカであるという記述が出てきます。ちなみに日本語訳された第一版にはHiveの記述はありません。

Hadoop: The Definitive Guide

Hadoop: The Definitive Guide

Of course, SQL isn't ideal for every big data problem-it's not a good fit for building complex machine learning algorithms, for example-but it's great for many analysis, and it has the huge advantage of being very well known in the industry.
What's more, SQL is the lingua franca in business intelligence tools(ODBC is a common bridge, for example), so Hive is well placed to integrate with these products.

ふーむ、確かにSQLは複雑な機会学習のアルゴリズムを実装するには向いてないけれど、それ以外の多くの解析では活躍できるし知っている人も多いよね。でもちゃんとSQL書ける人ってかなり少なくて、僕みたいにJavaでのアプリ開発をメインにやってきた人はORマッパー使うだろうからそんなにSQL書く機会が無かったりするんだよね。ただ個人的にはSQLって賞味期限が一番長い言語だと思っている(2番目はJavaScript)ので、身につけて損は無いはず。

HiveはHadoopの上で動作するFacebookが開発したデータウェアハウス用のフレームワークです。HiveはSQLに比べるとHavingが無いとかデータ型に日付型が無いとかあるわけですがまあSQLですね。Hiveのクエリ(HiveQL)というほぼSQLなものを実行するとHadoopからデータが取れます。

5/16から新しい現場に入って2週間が経ちましたが毎日TeraTermからHiveのHiveQLを書いて実行しています。最初はgroup byに指定してないカラムをselect句に指定して怒られたりしてました。お前何年目だって感じですね。ゆとりでサーセンw ていうか仕事でgroup by打ったの初めてかも(汗

FacebookがHiveを開発した理由はSQLはリングワ・フランカであること、MapReduceのプログラムをJavaで書くのがつらいからということもあるようですが、集計処理がしやすいっていうことも大きいと思いますね。まあこれはSQLならではなわけです。手続き型言語SQLのgroup by書くの面倒でしょ。レコード全部読み込んでグループのキーのリストを作って、またレコード全部読んでグループのキーをMapのキーにして、バリューはグループのキーに対応するレコードのリストにして、、、もっといいやり方があるかもしれませんが面倒ですね。SQLなら一発です。

Facebookにとってはこうした集計処理がスムーズに行うことが重要だったのではないかと想像するわけですね。

例えば広告について考えてみます。

FacebookGoogleやYahooのようなリスティング広告(検索キーワードに連動して出てくる広告。クリックすると広告料が発生する。)とは違い、ターゲットを明確に絞って広告を出すことが出来ます。国、地域などのエリア情報、年齢、性別といったセグメント毎に広告の配信設定をすることができます。

広告主は期間毎にどれだけクリックされたかのレポートを見ることが出来ます。

クリック数が多いならCPC(Cost Per Click、クリック毎の単価)じゃなくてCPM(Cost Per Mille、広告が1回表示されることを1インプレッションと数え1000インプレッション毎の単価)にしたほうがいいとか考えるかもしれません。

ともあれ、こういった集計処理はgroup by全開な感じしますよね。こうした集計処理を大規模かつスムーズに行うためにHadoopを採用し、Hiveを作ったのではないかと勝手に想像しています。

RDBMSじゃなくてもSQLっぽいものは使われているので、SQLは賞味期限が長くリングワ・フランカですね。英語みたいなもんかも。