据我所知,多维数据集是优化的数据结构,用于聚合和“切片”大量数据。我只是不知道它们是如何实施的。
我可以想象很多这项技术都是专有技术,但是我可以使用任何资源来开始实现我自己的立方体技术吗?
集合理论和许多数学可能都涉及(欢迎作为建议!),但我主要对实现感兴趣:数据结构和查询算法。
谢谢!
答案 0 :(得分:2)
有一本很棒的书描述了SSAS实现的许多内部细节,包括存储和查询机制细节:
http://www.amazon.com/Microsoft-Server-Analysis-Services-Unleashed/dp/0672330016
答案 1 :(得分:1)
在星型模式数据库中,通常会获取事实并将其存储在最精细的数据中。
中的图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