オブジェクト指向、Javaを取り入れた
新しい業界標準「SQL99」詳細解説
第一章 高度なデータ操作(3)
OLAPによる分析手順
OLAP(On-Line Analytical Processingの略語)は、図7に示すような販売実績表のように、時間や地域や製品などを軸とする多次元データベース(図の例は三次元)を、オンラインで分析する処理のことである。日々の大量の販売実績データから販売傾向を分析して効果的な販売戦略を立案することなどに応用されているデータマイニングは、OLAPの代表的なアプリケーションの1つだ。
図7 OLAP対象の多次元データベース(販売実績表)の例 |
ここでは製品の販売実績表をもとにして、SQL92で行える分析手順を想定してみよう。まず全体の売上額を調べる。次のようなSELECT文にSUM列関数を使用すれば求めることができる。
照会1: |
もし販売実績の月別推移を調べたい場合は、次のようにGROUP BY句を使用して、月単位に集約を要求するSELECT文を実行する。
照会2: SELECT 月, SUM(売上額) AS 合計売上額 FROM 販売実績表 GROUP BY 月; |
さらに月別にどの地域で売れているのかを詳細に調べたい場合は、次のようにGROUP BY句に地域名を追加したSELECT文を実行する。
照会3: SELECT 月, 地域名, SUM(売上額) AS 合計売上額 FROM 製品売上表 GROUP BY 月, 地域名; |
このように、大きく集約した照会1の結果から出発して、何らかの課題を見つけては順番に、かつ詳細に掘り下げながらデータを分析する手順を「ドリルダウン」と呼び、逆に詳細なデータからいろいろな次元単位に集約していく分析手順を「ロールアップ」と呼んでいる。問題は、集約したい次元単位に、そのたびごとにSELECT文を作成して実行しなければならず、結果として繰り返し同じ表を読まなければならないことである。この例でいえば、もし販売実績表が非常に大きければ分析に膨大な時間がかかり、一般に対話式の試行錯誤を繰り返しながら分析して行くようなOLAP処理は性能の観点で実用に耐えられない。そこでSQL99では、ドリルダウンしたり、ロールアップしたりするときに実行したい複数のSELECT文の結果行を1回で得ることができるような機能をGROUP BY句に追加した。それによって、効率よくOLAP分析を行うことができるようになる。その機能を以下に順番に説明する。
■ROLLUP
月・地域・製品別に、この順番で売上額を集約して分析したい場合、GROUP BY句にROLLUPオプションを指定する。
照会4: SELECT 月, 地域名, 製品名, SUM(売上額) AS 合計売上額 FROM 販売実績表 GROUP BY ROLLUP(月, 地域名, 製品名); |
図8に照会4の結果行を示す。 結果行の列値がナル(NULL)である列が、集約されてなくなった列であることを示している。 例えば、製品名列の値がナルになっている行の合計売上額は、月・地域別の合計売上額を示し、地域名列と製品名列がナルになっている行の合計売上額は、月別の合計売上額を示す。このように、照会4の結果行には、月・地域・製品別の売上額(元の表の行と同じ)、月・地域別に集約した合計売上額、月別に集約した合計売上額、そして全部の合計売上額といった異なる集約単位の行が含まれている。つまり、照会1と照会2と照会3で得られる全部の結果行が含まれている。
図8 ROLLUPの例
ところでその結果行がどの列で集約されているのかを知るには、列値がナルであるかどうかで判断すると述べたが、ナルを調べなくてもわかる便利なGROUPING関数が提供される。GROUPING関数の引数に指定した列が、集約されてなくなる結果行については、数値の1が返却される。結果行の例を図9に示した。
照会5: SELECT 月, 地域名, 製品名, SUM(売上額) AS 合計売上額, GROUPING(月) AS 月集約, GROUPING(地域名) AS 地域集約, GROUPING(製品名) AS 製品集約, FROM 販売実績表 GROUP BY ROLLUP(月, 地域名, 製品名); |
図9 GROUPING関数の例
■CUBE
照会4では、いわば月を大分類、地域を中分類、製品を小分類として集約したが、地域・製品別であるとか、製品・月別といった、違った組み合わせの集約を行いたい場合もあるだろう。その場合には、GROUP BY句にCUBEオプションを使用する。
照会6: SELECT 月, 地域名, 製品名, SUM(売上額) AS 合計売上額 FROM 販売実績表 GROUP BY CUBE(月, 地域名, 製品名); |
これによって月・地域・製品のすべての組み合わせの集約を1回のSELECT文によって得ることができる。図10に結果行の例を示す。
図10 CUBEの例
■GROUPING SETS
集約単位がROLLUPでは少な過ぎるが、CUBEでは多過ぎる場合、GROUP BY句のGROUPING SETSオプションに特定の集約単位を指定することによって選択することができる。次のSELECT文は、月・製品別の合計売上額と製品・地域別の合計売上額と全体の合計売上額の3種類を求めている。 GROUPING SETSの括弧中の最後の‘()'は、全体の集約を意味している。
照会7: SELECT 月, 地域名, 製品名, SUM(売上額) AS 合計売上額 FROM 販売実績表 GROUP BY GROUPING SETS((月, 製品名), (製品名, 地域名), ()); |
SQL99においてOLAPのために拡張されたGROUP BY句のROLLUPやCUBEなどは、任意の数の次元の列を指定できるので、多次元のデータベースの分析処理に対応でき、大規模なデータベースであってもごれまで以上に効率的に分析処理を行うことができる。しかしOLAPに要求される分析や統計の処理は様々であり、まだ発展段階にある。次の標準として検討されているSQL4では、さらに高度な集約の機能追加を検討している。
図11 照会7の結果行
とびら 新しい業界標準「SQL99」詳細解説 SQL99の背景と特徴 |
第二章 柔軟さを増したデータ構造
ユーザー定義可能な新しいデータ |
第三章 SQLJと今後の標準化動向 クライアント/サーバ環境のための機能強化
|
「Master of IP Network総合インデックス」 |
- 完全HTTPS化のメリットと極意を大規模Webサービス――ピクシブ、クックパッド、ヤフーの事例から探る (2017/7/13)
2017年6月21日、ピクシブのオフィスで、同社主催の「大規模HTTPS導入Night」が開催された。大規模Webサービスで完全HTTPS化を行うに当たっての技術的、および非技術的な悩みや成果をテーマに、ヤフー、クックパッド、ピクシブの3社が、それぞれの事例について語り合った - ソラコムは、あなたの気が付かないうちに、少しずつ「次」へ進んでいる (2017/7/6)
ソラコムは、「トランスポート技術への非依存」度を高めている。当初はIoT用格安SIMというイメージもあったが、徐々に脱皮しようとしている。パブリッククラウドと同様、付加サービスでユーザーをつかんでいるからだ - Cisco SystemsのIntent-based Networkingは、どうネットワークエンジニアの仕事を変えるか (2017/7/4)
Cisco Systemsは2017年6月、同社イベントCisco Live 2017で、「THE NETWORK. INTUITIVE.」あるいは「Intent-based Networking」といった言葉を使い、ネットワークの構築・運用、そしてネットワークエンジニアの仕事を変えていくと説明した。これはどういうことなのだろうか - ifconfig 〜(IP)ネットワーク環境の確認/設定を行う (2017/7/3)
ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。
|
|