微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不同列的SCD类型不同

如何解决不同列的SCD类型不同

在单一维上为不同的列使用不同的SCD类型是否有意义?还是将维度表分为两个表总是更好?

例如,操作系统向我发送以下数据:

ID | CHANNEL_CODE | NAME | TYPE
1  |      A       |  X   |  0
2  |      B       |  Y   |  1

CHANNEL_CODE =自然密钥的情况下,TYPE应该是SCD类型2,而NAME可能是SCD类型1。假设NAME经常被更改。

解决方法

我总是在一个表中保留0、1和2型。

我也将类型0-s和类型1-s相同,以其他方式将类型2-s对待。

  • 类型1/0的更改导致更新SCD表中具有相同业务/自然ID的所有版本,以反映新信息。
  • 类型2更改导致更新SCD表中的最新行以包含新的更改日期作为有效日期,并更新当前指示符以包含FALSE,以及包含新数据的新行valid-from作为更改日期,有效期至“ 9999-12-31”。

使用这种类型的登台数据:

CREATE TABLE stg_customer (
     cust_id            INT NOT NULL -- natural identifier,cust_chg_dt        DATE         -- change date,cust_first_name    VARCHAR(30)  -- type 1,cust_last_name     VARCHAR(30)  -- type 1,cust_phoneno       VARCHAR(30)  -- type 1,cust_loyalty_lvl   INT          -- type 2,cust_org_id        INT          -- type 2
) ;

...我的SCD表如下:

CREATE TABLE dim_customer_scd (
  cust_key         BIGINT 
      DEFAULT dim_customer_scd_seq.NEXTVAL NOT NULL -- surrogate key,primary key,cust_id          BIGINT       NOT NULL  -- natural identifier,cust_from_dt     DATE         NOT NULL  -- effective begin date,cust_to_dt       DATE         NOT NULL  -- effective end date,cust_is_current  BOOLEAN 
    DEFAULT(cust_to_dt='9999-12-31') NOT NULL -- current indicator,cust_cre_ts      TIMESTAMP(0) NOT NULL  -- created timestamp,cust_udt_ts      TIMESTAMP(0) NOT NULL  -- updated timestamp,cust_first_name  VARCHAR(30)            -- Type 1 column,cust_last_name   VARCHAR(30)            -- Type 1 column,cust_phoneno     VARCHAR(30)            -- Type 1 column,cust_loyalty_lvl INT                    -- Type 2 column,cust_org_id      INT                    -- Type 2 column
)
;
,

IMO的答案取决于...

如果您需要一个维度中字段的当前值和历史值,并且数据量和更改频率使其切实可行,请实施 SCD类型7

如果维度中少数字段的数据是易失性的,并且维度中的记录数很大,请实施 SCD类型4 SCD类型5

,

通常情况下,这取决于情况。

首先,请确保您了解OLAP模型与RDBMS存储之间的区别。 RDBMS的存储策略不必反映OLAP模型。

您可以轻松地将SCD类型拆分为单独的表,然后将它们合并到视图中以为OLAP模型提供单个源。这使基础表具有完全不同的ETL策略。

如果您的大多数列都是类型2,那么单独的表就没有多大意义,因为收益很小。但是,如果您的大多数列都不是类型2,则您可能会在ETL和处理任务中看到一些性能提升。 Skinner表在OLAP处理中更快地读取和更新。

另外,如果您使用视图,则建议使用左联接进行调查以合并表。在许多OLAP负载处理模型中,负载处理一次查询单个属性。使用多个表作为左联接时,查询处理器可以丢弃提供结果不需要的表引用,而不是通过内部联接过滤数据。这样可以提高整体OLAP处理速度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。