如何在 Kimball 风格的数据仓库中对这种关系进行维度建模?

Posted

技术标签:

【中文标题】如何在 Kimball 风格的数据仓库中对这种关系进行维度建模?【英文标题】:How do I dimensionally model this relationship in a Kimball-style data warehouse? 【发布时间】:2010-10-11 12:43:36 【问题描述】:

所以我的数据仓库中有两个维度:

dim_machine
-------------
machine_key
machine_name
machine_type


dim_tool
------------
tool_key
tool_name
machine_type

我要确定的是两个维度中的 machine_type 字段具有相同的数据。我应该在两者之间创建一个雪花的第三维还是有其他选择?

【问题讨论】:

【参考方案1】:

请记住,数据仓库是一种非规范化结构,因此数据在维度上重复是正常的。应在操作系统和 ETL 过程中提供完整性。假设,我们有类似下面的模型。

分发工具的业务流程必须知道哪个工具可以安装在哪台机器上。假设机器上安装了错误的工具。最好导入数据以匹配该事实并运行报告以发现业务流程中的错误,而不是因为工具和机器类型不匹配而中断 ETL 流程。

例如,像这样的查询(报告)会发现不匹配并证明非常有用。

select
      'tool-machine mismatch' as alarm
    , full_date
    , machine_name
    , machine_type
    , tool_name
    , matching_machine_type
    , employee_full_name
from fact_installed_tools as f
join dim_machine          as m on m.machine_key  = f.machine_key
join dim_tool             as t on t.tool_key     = f.installed_tool_key
join dim_date             as d on d.date_key     = f.date_key
join dim_employee         as e on e.employee_key = f.employee_key
where machine_type != matching_machine_type ;

【讨论】:

感谢 Damir,帮了大忙 ^^b【参考方案2】:

我不确定您要解决的具体问题是什么?这听起来像是您可以简单地构建到 ETL 流程中的内容:对于这两个维度,将源数据映射到相同的机器类型目标列表。如果出现没有映射的新值,则引发错误(或设置默认占位符值并稍后查看数据)。

一个完全不同的选项是“微型维度”(Kimball 的术语),它包含所有可能的机器/工具组合。如果两个维度密切相关并且经常在搜索中一起使用,那么它可能是合并和简化它们的有用方法。但即便如此,我假设您将检查和清理源数据以符合机器类型。

【讨论】:

我正在尝试解决我在机器和工具之间存在关系的问题。我知道我可以不理会维度,一切都会好起来的。只是不知道将数据反规范化到什么程度(即构建一个 machine_type 维度并将三个维度链接在一起)。虽然可以完成小尺寸,但我们正在研究数十万种组合。 如果机器和工具之间存在关系,那么将它们结合起来似乎是值得考虑的。我不会说多行是个问题:我们在一维中有 350K 行,完全没有问题。 感谢您的支持 - 当然值得考虑。我之前没有考虑过的原因是有效组合列表还没有完全创建。

以上是关于如何在 Kimball 风格的数据仓库中对这种关系进行维度建模?的主要内容,如果未能解决你的问题,请参考以下文章

数仓实践:浅谈 Kimball 维度建模

数仓实践:浅谈 Kimball 维度建模

数据仓库数据库设计方法---关系模型和多维模型比较分析

数据仓库搭建——Inmon与Kimball

数据仓库中的Inmon与Kimball架构

数据仓库Inmon和Kimball架构