在数据仓库多维数据集中应用了哪些数据结构和算法?

时间:2010-05-23 03:22:39

标签: sql data-warehouse ssas

据我所知,多维数据集是优化的数据结构,用于聚合和“切片”大量数据。我只是不知道它们是如何实施的。

我可以想象很多这项技术都是专有技术,但是我可以使用任何资源来开始实现我自己的立方体技术吗?

集合理论和许多数学可能都涉及(欢迎作为建议!),但我主要对实现感兴趣:数据结构和查询算法。

谢谢!

3 个答案:

答案 0 :(得分:2)

有一本很棒的书描述了SSAS实现的许多内部细节,包括存储和查询机制细节:

http://www.amazon.com/Microsoft-Server-Analysis-Services-Unleashed/dp/0672330016

答案 1 :(得分:1)

在星型模式数据库中,通常会获取事实并将其存储在最精细的数据中。

那么让我们从http://www.ciobriefings.com/Publications/WhitePapers/DesigningtheStarSchemaDatabase/tabid/101/Default.aspx

中的图10中获取SalesFact示例

现在,谷物是产品,时间(一天的粒度),商店。

假设您希望按月汇总,预先汇总(此特定示例不太可能需要预先汇总,但如果销售详细信息由客户详细说明,则可能需要按分钟进行预先汇总)。< / p>

然后你会得到一个SalesFactMonthly(或者对现有的事实表添加一个谷物歧视,因为维度是相同的 - 有时在聚合中,你实际上可能会丢失尺寸,就像你可能会丢失颗粒一样,例如,如果你只是想要存储而非产品)。

ProductID
TimeID (only linking to DayOfMonth = 1)
StoredID
SalesDollars

你会这样做:

INSERT INTO SalesFactMonthly (ProductID, TimeID, StoreID, SalesDollars)
SELECT sf.ProductID
    ,(SELECT TimeID FROM TimeDimension WHERE Year = td.Year AND Month = td.Month AND DayOfMonth = 1) -- One way to find the single month dimension row
    ,sf.StoreID
    ,SUM(sf.SalesDollars)
FROM SalesFact AS sf
INNER JOIN TimeDimension AS td
    ON td.TimeID = sf.TimeID
GROUP BY td.Year, td.Month

立方体中发生的事情是你基本上有细粒星和预聚合在一起 - 但是每个实现都是专有的 - 有时你可能甚至没有立方体中最细粒度的数据,因此无法报告。但是,您可能希望切割数据的每种方式都需要存储在该粒度中,否则您无法以这种方式生成分析。

答案 2 :(得分:0)

通常,数据仓库使用关系数据库,但这些表不像操作关系数据库那样进行规范化。

数据仓库面向主题。数据仓库主题表通常具有以下特征:

  • 许多索引。

  • 没有加入,除了查表。

  • 重复数据,主题表是 高度非规范化。

  • 包含派生和汇总的信息。

数据仓库中的数据库表以星型模式排列。星型模式基本上是一个具有查找表数组的主题表。查找表的键是主题表中的外键。如果您绘制主题表的实体关系图,则查找表将围绕主题表,如星点。

就查询而言,这取决于主题表和行数。通常,期望查询需要很长时间(很多分钟,有时是几小时)。

以下是帮助您入门的一般文章:Developing a Data Warehouse Architecture

以下是星型模式设计的高级概述:Designing the Star Schema Database