SQLアタマアカデミー

最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (1)OLAP関数とは何か

はじめに

この連載では、SQLの独特な考え方に慣れてもらうため、その集合指向的な側面を強調して取り上げてきました。これはほかの言語が持たない特性のため、慣れないうちはそのパラダイムが奇妙に感じられます。その違和感を軽減することが、本連載の目的の一つでした。

一方最近では、SQLの側でも時代のニーズに対応するため、さまざまな機能を追加しています。その一端で、実はかなり手続き型言語の考え方を取り入れるようになっています。そのため、むしろ新機能のほうが一般的なプログラマにとっては「とっつきやすい」と思えるところがあります。

今回取り上げるのは、そうした新機能の一つで、OLAP関数と呼ばれるものです(分析関数とかウィンドウ関数という名前でも呼ばれます⁠⁠。標準SQLでは2003年に標準化されました。この機能はマスターすればもちろん非常に便利なツールですが、それと同時にSQLの未来へ向けた進化を見られるという点でも、おもしろいものです。

読者対象
  • 行間比較をしたいが、相関サブクエリや自己結合は使いたくない人
  • やっぱり行の順序を意識しないと落ち着かない手続き型どっぷりな人
稼働環境(注1)
  • Oracle
  • SQLServer
  • DB2
  • Postgre SQL(8.4以降)

OLAP関数とは何か

OLAP関数というのは、OLAPOnLine Analytical Processingという名前のとおり、データベースを使ってリアルタイムに分析を行う処理に対応した関数のことです。DWHData Ware HouseとかBIBusiness Intelligenceの分野でよく利用されます。

こういう業務の特性は、① 非常に大量のデータに対して、② 複雑なクエリを発行し、③ しかも高速なレスポンスが求められる、という3点です。要するに、DBサーバにとても高い負荷をかけるタイプの業務と言ってよいでしょう。こうしたDBの用途はアメリカではそれなりに広まっていて、Teradata、Oracle Exadata、Netezzaなど専用DBMSも存在します。

OLAPで典型的なクエリには、もちろん一般的な意味での合計や平均も含まれますが、移動平均やランキング、偏差値にパーセンタイル分割など、統計的な処理がメインになります。検索対象となるテーブルの範囲が広く、結合やソートを多用する高負荷処理ばかりです。

こうした処理は伝統的なSQLの構文でも実現できないわけではありませんが、自己結合や相関サブクエリといった高コストな演算を使う必要があり、お世辞にもパフォーマンスはよくありません。しかも、SQLのコードもかなりわかりにくくなります。OLAP関数はこうした難点に対処するために導入された機能です。現在では主要なDBMSが実装していて、オープンソースでもPostgre SQLが8.4から実装しました(My SQLは未サポート⁠⁠。

おすすめ記事

記事・ニュース一覧