BI:事实表设计/数据仓库建模

Posted

技术标签:

【中文标题】BI:事实表设计/数据仓库建模【英文标题】:BI: Fact Table Design/Data warehouse modelling 【发布时间】:2014-08-13 07:48:31 【问题描述】:

由于事实表,我在设计数据仓库和 ETL 流程时遇到了一些问题。它包含超过 1 亿行的 2 年会计数据。维度通过外键与事实表相关,我还使用了代理键、索引和视图。你们将如何处理这样的事实表以确保良好的性能、合理的 ETL 流程以及具有适应性和弹性的数据仓库?将表分区半年是个好办法吗?

【问题讨论】:

您使用的是什么 etl 工具?我会更新我的答案。 我正在使用 ssis... 我有 csv 文件中的数据 【参考方案1】:

首先,您应该重新审视您的数据仓库设计。

在事实表中,每行的外键组合必须是唯一的。如果不是,则 ETL 流程有问题。

您可以通过将事实表中所有行的计数与按每个外键分组的查询行计数进行比较来轻松检查这一点(从 fact_table 组中选择计数(*)按 fk1、fk2、fk..n)。它必须相等。

接下来,您告诉您有代理键作为外键。我认为没有理由重复你应该使用整数。

按月分区事实表,我不明白为什么在半年期间?

1 亿行不算太大。也许您应该考虑一些列式数据库(例如 Vertica)。

【讨论】:

没错...我每行都有唯一性,我所有的键都是整数,它们与业务无关。它们不会显示给最终用户。例如,Account 维度包含 AccountNo,它是 nvarchar,它也是唯一的,但是我没有使用这个 nvarchar 作为 PK,而是创建了一个具有自动增量的自然整数 PK。您将如何对表进行分区?设计看起来很简单......一个事实表,一个度量:数量和几个父子维度+一些桥表,因为是多对多关系。 请用数据图编辑您的问题。也许应该需要进行设计更改。如果您可以在几个 SQL 中消除桥接表,那就去做吧!更少的连接,更快的查询。之后我会建议你数据集市设计和索引策略。【参考方案2】:

我在事实表上创建了一个列存储索引,查询成本(相对于批处理)现在是 14% 的索引和 86% 的没有索引。我觉得还不错。 执行计划如下。

http://uploadimage.ro/img.php?image=4508_execution_plan_sk6y.png

【讨论】:

以上是关于BI:事实表设计/数据仓库建模的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库商业智能及纬度建模初步读书笔记

《数据仓库工具箱 - 纬度建模权威指南》--- 第一章 数据仓库商业智能及纬度建模初步读书笔记

数据仓库设计

数据仓库设计要点

数据仓库之事实表设计

数据仓库维度建模法案例