数据仓库中的直方图

时间:2011-03-13 17:58:50

标签: mysql data-warehouse

我收到了以下格式的大量样本:

 <timestamp> <dim1> <dim2> <dim3> 324
 <timestamp> <dim1> <dim2> <dim3> 3565
 <timestamp> <dim1> <dim2> <dim3> 122
 <timestamp> <dim1> <dim2> <dim3> 2333

324,3565,...是测量值,我想将它们存储在数据仓库中。

测量值将四舍五入到最接近的百位(300,3600,100,2300)。

我如何存储这个并快速创建事实的直方图?

一种(坏)方法是在事实表中为每个“桶”(即100,200,300,...)添加一列,然后在每列上使用SUM()来构建直方图。缺点是显而易见的:事实表将是巨大的和非灵活的(样本范围有限)

任何人都有任何聪明的想法?

1 个答案:

答案 0 :(得分:0)

嗯,你必须以某种方式离婚。一种方法 - 假设您的存储区范围不经常更改 - 是添加一个范围(dimBucket)的表,并在ETL期间为每个值分配一个存储桶密钥。如果值范围发生变化,则必须重新计算整个事实表以分配新的BucketKeys。所以,像这样 - 注意ValueRange是一个像'100-199', '200-299', ...

这样的字符串
SELECT
  ValueRange
, sum(SaleAmount)  AS SaleValue
, count(1)         AS Transactions
from factSale  AS f
JOIN dimBucket AS b ON b.BucketKey = f.BucketKey
GROUP BY ValueRange;

enter image description here

我发现很难使用通用<dim>, <dim>, <dim>,所以我使用了自己的例子。

另一种方法是不要在DW级别考虑它,而是使用分析包。几乎每个分析/数据挖掘包都提供了几种类型的离散化。试试Weka,它是开源的,相当不错; R也很受欢迎。