抄訳 Data Cube: A Relational Aggregation Operator Generalizing Group-By, Cross-Tab, and Sub-Totals(1997)
October 15, 2022SQLの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した結果になる。
雑記
CUBEはsnowflakeのようなOLAPのデータベースで採用されている。
後半にCUBE
の実装方針があるが、実験などの評価はなく、SQLの構文の拡張を提案にとどまる。
処理性能を評価するなら、CUBE
を使わずUNIONを使う場合と比較するのだろう。
論文のリンク
本文中の画像を論文から引用をしました。