【发布时间】:2021-02-02 09:31:15
【问题描述】:
我在数据仓库中有一个典型的事实表——该表有一些代理键和度量。在数据中,仓库也是查找表——其中不维护历史的小维度。只需代理键、业务键和一两个属性。在事实表加载期间,代理键取自查找表(连接基于业务键)。所以基本上在事实加载的某个阶段,我们在事实内部有业务键,用于从查找表中获取代理键,在该操作之后,业务键就消失了,然后例如在数据集市(用于报告目的)中,我们可以仅对某些属性使用代理键将查找与事实结合起来。到目前为止,该过程相当简单,因为我们只使用一个业务键来设置属性值。
但现在有些情况我们应该使用 3 甚至更多。
例如这些是条件:
COLUMN_1 = 'ABC'
AND COLUMN_2 <> 'Z'
AND COLUMN_3 IN ('1', '2')
COLUMN_1 = 'ABC'
AND COLUMN_2 <> 'Z'
AND COLUMN_3 IN ('3', '4', '5')
COLUMN_1 <> 'ABC' OR COLUMN_2 = 'Z'
COLUMN_1、COLUMN_2、COLUMN_3 是事实表中显示的业务键。 上面的逻辑肯定会应用在查找加载中,所以假设我们将有 3 个代理键:1、2 和 3。
但主要问题是 - 哪种方法更适合事实表:
- 要将逻辑从查找加载复制到事实加载?性能更好,但对维护更不利(如果将来需要更改,则需要在两个地方应用更改),并且代理键也需要硬编码。
- 将上述条件置于连接条件中?显然更利于维护,但性能更差(事实表每天插入大约 10 000 000 行)。
- 或许还有其他解决方案?在源系统中结合上述条件也不是一种选择。
欢迎所有建议。
【问题讨论】:
标签: sql database oracle data-modeling data-warehouse