PowerCenter——Sequence组件

Go on~

knowledge accumulation~

 

正文

Sequence组件的作用类似于数据库里面的Sequence。每次取值的时候它会自动增长。这是由PowerCenter提供的自增长的序列。通常用于需要生成数据记录的自增长键或者序号的地方。

 

场景:在数据仓库项目中,需要对所有的员工事实表生成一个代理主键(代理主键是数据仓库模型设计的一个概念,可以理解为是一个表的无意义主键),生成主键的列名为EMPNO。

 

开发Mapping:

源 -> SQ -> Sequence -> Target

 

这里需要注意的点:使用Sequence中的NEXTVAL连接代理主键EMPNO,而不是使用CURRVAL。区别,NEXTVAL产生的EMPNO是一个自增长量,使用了CURRVAL产生的数据是一个常量。

 

在Sequence组件中有若干的属性,双击Sequence组件,选择Properties Tab,下面对其中部分会做出解释。

Start Value:使用Sequence的开始值,例如在后面使用了Cycle选项,则还需要在End Value设置值,效果是从开始值到结束值,一直循环。

Increment By:增长量,每次使用运行Sequence的增长量。

End Value:Sequence的最大值,Sequence的支持的最大值为9,223,372,036,854,775,807。

Current Value:每次运行后,Current Value都会产生变化,他是下一次运行的时候的起始值。

Cycle:如果启用,则当达到了设定的最大的End Value之后会重新从Start Value重新产生。

 

 

关于共享的问题

场景:在一个Mapping中,有时候希望两个事实表生成相同的代理键或者符号。

Mapping:

                                          ↗Target 1

源 -> SQ -> Expression ---->Target 2

Sequence → ↑     

 

解释:因为没有图片,不太好看,这边要说一下,这边的SQ直接连接一个Expression组件,然后再外部连接一个Sequence组件到Expression组件中的EMPNO。

那么为什么需要额外连接一个Expression组件,而不是直接连接Sequence组件呢?

很好理解,因为要输出为两个Target表,而在Sequence组件中有一个Current Value,算是Increment By的设置,会导致两个Target的EMPNO是连续的值。

例如Target1中EMPNO为1,2,3,4(假设Target1 & Target 2每一个只有4条),那么按照直接相连Target的Mapping,Target中的EMPNO值会是5,6,7,8。而这就不符合要求了。

 

你可能感兴趣的:(BI)