SQLが作られたのには理由がある。SQLの本質は,非専門家のプログラマがデータベースに対してクエリを行う目的で設計された,ドメイン固有言語なのである。"カジュアルプログラマ" とも呼ばれるこれらの人々は,一般社員やビジネスアナリスト,秘書であり,時には会社の副社長の場合さえある。企業システムがリレーショナルデータベースからNoSQL製品へと移行したといっても,このようなアドホックな帳票出力のニーズがなくなった訳ではない。かえって難しくなっているのだ。
Simba Technologies は ODBC 標準を使って,Apache Casandra,Apache Hadoop/Hive,Google BigQuery,MongoDB でSQL のパワーを実現している。我々は先頃,同社のCTOであるGeorge Chow氏と,彼らのMongoDBドライバに関して話をする機会を得ることができた。
InfoQ まず最初に,あなた方のODBCがMongoDBでどのようなことを実現したのか,説明して頂けますか。参照専用なのか,あるいはデータの更新も可能なのですか。
George Chow: 今のところは参照のみです。私たちのバックログには,すでに多くの機能がリストアップされています (データ更新も含まれています)。これらの機能に優先度を付けるため,パートナやユーザからの支援を望んでいるところです。
InfoQ: MongoDBではネストの深い,非常に複雑なレコードをサポートしています。そのように複雑なレコードは,SQLからの利用者にはどのように見えるのでしょう。つまり,複雑なドキュメントは,リザルトセットのカラムにどのようにマッピングされるのですか。
George Chow: 現在のドライバは,複雑なドキュメントの構成要素(配列やネストしたドキュメントのような)を,JSONにエンコードしたVARCHARで表現します。これを非正規化した付加的な列に分解することを,現在検討しているところです。例えば,次のような簡単なドキュメントを,
{ column1: "somevalue", column2: "someothervalue", somearray3: [ { text: "name1", author: "...", description: "..." { text: "name2"... } ... { text: "..."... } { text: "..."... } { text: "..."... } ] }
以下の列に置き換えます。
- column1
- column2
- somearray3.text
- somearray3.author
- somearray3.description
InfoQ: ドキュメントをJSONベースのvarChar列に置き換えるという方法は,とても分かりやすいと思いますが,現在すでに利用可能なのですか。あるいは,今後のリリースを待たなければならないのでしょうか。
George Chow: JSONベースのvarChar列への変換機能は,バックログにある機能のひとつです。
InfoQ: MongoDB用のODBCドライバは,SQL ServerのLinked Server機能と互換性がありますか。もしそうならば,SQL ServerのテーブルとMongoDBのストアを単一のクエリで操作することは可能でしょうか。
George Chow: 私たちは今,Microsoft ExcelやTableauといった通常のデスクトップアプリから直接アクセス可能なドライバを開発しているところです。すでべのODBCアプリケーションで使えるようにしたいのですが,当面はこの2つのアプリにターゲットを絞っています。他のBigData/NoSQLドライバ(Hadoop/HiveやGoogle BigQuery用など)についても,近いうちにこれと同等以上の内容を報告できると思います。Microsoft SQL ServerのLinked Server機能を実現することに何も問題はないのですが,今のところ優先順位は高くありません。ところで,NoSQLデータベースのデータリンクが必要と思われる理由は何でしょう。技術的な橋渡しという意味で重要だということでしょうか?
InfoQ: SQL ServerからNoSQLへの移行を想定しています。例えばここにストアドプロシージャがあって,通常はテーブルを呼び出しているとします。リンクが使用できれば,アプリケーションをまったく修正しなくても,MongoDBを呼び出すようにプロシージャを変更することが可能なはずです。バックエンドの移行を考える場合,これ以上簡単な方法はないと思うのですが。
エンドユーザがドライバを利用することは考えていませんでしたが,理にかなった方法だと思います。エンドユーザがNoSQL形式のデータベースに直接アクセスできるようなツールは,実はそれほど多くはありません。どのようなクエリが使えるのか,その結果がExcelでどのように見えるのか,例を挙げて頂けますか。
George Chow: 開発中のドライバがどのような動作をするかを理解するために,こちらのデータシートを見てください。
ODBC DSNを定義して,スキーマを次のようにします。
最後にそれをExcelからクエリしてみましょう。Excelが任意のデータソースに対して,SELCT * FROM "music"."tracks" というようなクエリを最初に生成します。