我们有一个包含四个维度表和一个事实表的数据仓库设计:
我们的问题是:我们想要构建事实表,其中包括计算统计信息(取决于userId,日期范围)和填充外键。
但是我们不知道如何,因为我们不了解如何使用自然键(根据我们阅读的文献,它似乎是我们问题的解决方案)。
我相信一个自然键是userId,这是计算维度数据的所有ETL作业所需要的。
但是有很多困难:
问题似乎是重复淘汰策略。有更好的方法吗?
我们正在使用MySQL 5.1,如果它有任何区别。
答案 0 :(得分:1)
如果您的事实表是跟踪每个用户的登录和页面调用,那么您应该有一组源表来跟踪这些事情,这是您从中加载事实表数据的地方。我可能会在每个用户/登录日期的一行中构建事实表 - 或者甚至更低,以便在可能的情况下保持原子数据。
然后,您将拥有一个包含两个维度的事实表 - 用户和日期。您可以将地址和语言作为维度保留在事实上,但这些只是用户的属性。
您的维度应具有代理键,但也应具有源“业务”或“自然”密钥 - 可以作为维度本身的属性,也可以通过您的同事建议的映射表。使用映射表并不“错误” - 当有多个源时,它确实使事情变得更容易。
如果您将业务键存储在映射表中,或者将维度存储为属性,那么对于要加载的每一行,它都是针对dim或映射表的简单查找(通常通过连接)来获取用户的代理键(然后从用户获取用户的“当前”地址/语言以坚持事实)。日期维度通常具有以YYYYMMDD或其他“自然”格式存储的代理键 - 您可以从源记录中的日期信息中生成此信息,然后将其加载到事实中。
答案 1 :(得分:0)
不要强制单个查询,尝试在分离的查询中加载数据并在某些提供程序中混合数据...