代理键的理解

来源:互联网 发布:古墓丽影崛起数据损毁 编辑:程序博客网 时间:2024/05/21 09:55

        在创建维度表时总是用代理键,只是对它的定义以及具体作用的理论文字一直提取不好,今天读到的一段关于代理键的文字让我对此窃喜一阵:

        “我们在建立维度表时要充分使用代理键。代理键是数值型的 ID 号码,它唯一标识了每一维度成员。更重要的是,在聚合时,数值型字段的匹配和比较, JOIN 效率高,便于聚合。同时,代理键对缓慢变化维度有着重要的意义,在原数据主键相同的情况下,它起到了对新数据与历史数据的标识作用。

       在此,我们不妨谈一谈维度表随时间变化的问题,这是我们经常会遇到的情况,我们称其为缓慢变化维度。      比如我们增加了新的产品,或者产品的 ID 号码修改了,或者产品增加了一个新的属性,此时,维度表就会被修改或者增加新的记录行。这样,我们在 ETL 的过程中,就要考虑到缓慢变化维度的处理。对于缓慢变化维度,有三种情况:     

        1 、缓慢变化维度第一种类型:历史数据需要修改。这种情况下,我们使用 UPDATE 方法来修改维度表中的数据。例如:产品的 ID 号码为 123 ,后来发现 ID 号码错了,需要改写成 456 ,那么,我们就在 ETL 处理时,直接修改维度表中原来的 ID 号码为 456 。     

        2 、缓慢变化维度第二种类型:历史数据保留,新增数据也要保留。这时,要将原数据更新,将新数据插入,我们使用 UPDATE / INSERT 。比如:某一员工 2005 年在 A 部门, 2006 年时他调到了 B 部门。那么在统计 2005 年的数据时就应该将该员工定位到 A 部门;而在统计 2006 年数据时就应该定位到 B 部门,然后再有新的数据插入时,将按照新部门( B 部门)进行处理,这样我们的做法是将该维度成员列表加入标识列,将历史的数据标识为“过期”,将目前的数据标识为“当前的”。另一种方法是将该维度打上时间戳,即将历史数据生效的时间段作为它的一个属性,在与原始表匹配生成事实表时将按照时间段进行关联,这种方法的好处是该维度成员生效时间明确。 

        3 、缓慢变化维度第三种类型:新增数据维度成员改变了属性。例如:某一维度成员新加入了一列,该列在历史数据中不能基于它浏览,而在目前数据和将来数据中可以按照它浏览,那么此时我们需要改变维度表属性,即加入新的字段列。那么,我们将使用存储过程或程序生成新的维度属性,在后续的数据中将基于新的属性进行查看

原创粉丝点击