抄訳 Data Cube : A Relational Aggregation Operator Generalizing Group-By, Cross-Tab, and Sub-Totals(1997)

October 15, 2022

SQLのGROUP BYと集約関数を組み合わせて0次元や1次元の値を出力できる。 一方、ピボットテーブルのように、ある属性値の同じレコードの別の属性値を集計し、さらに集計値の集計値を求めることがある。 (DATA) CUBEは、GROUP BYを多次元に拡張した演算子であり、ヒストグラム、ピボットテーブル、ロールアップ、ドリルダウンの計算に使える。

GROUP BYに続いてCUBEを書けるように、SQLの構文を拡張する。

GROUP BY
{ <column name> | <expression>)
  [ AS <correlation name> ]
      [ <collate clause>  ]
,...}
  [ WITH CUBE ]

たとえば、車のメーカー、色、年ごとの売上があるとき、以下の画像の左のデータから右の結果を得ることができる。 集計の軸になる属性数が\(n\)のとき、一つ以上の属性を軸にする選び方は\(2^n-1\)通りある。 cubeは、その全ての選び方でえられたレコードと元のテーブルをunionした結果になる。 datacube

雑記

CUBEはsnowflakeのようなOLAPのデータベースで採用されている。 後半にCUBEの実装方針があるが、実験などの評価はなく、SQLの構文の拡張を提案にとどまる。 処理性能を評価するなら、CUBEを使わずUNIONを使う場合と比較するのだろう。


論文のリンク

本文中の画像を論文から引用をしました。