PowerCenter——Source Qualifier组件

学习整理~

 

正文

在所有的应用场景中,Source Qualifier(简称SQ)都会出现,他的主要作用是连接数据源,转化数据源的数据类型为PowerCenter的数据类型。当然,不同的数据源对应的SQ的作用和用法也不一样,下面的举例说明主要为数据库数据源。

其实不难理解,不同的数据源,在关联的时候相同存在不同的字段类型。例如某字段在DB2中为VARCHAR,而在Oracle中为VARCHAR2。在PowerCenter中,为了维持关联,那么必须要标准化,统一化字段的类型。常规的分析可能会将DB2的数据类型转化为Oracle的数据类型,或者将Oracle的数据类型转化为DB2的数据类型。但是这都不是最优的选择,假如又多了一些源,例如又多了一个MS SQL SERVER。所以最优的选择是需要一个中间型,这时候SQ就出现了,它能够自动的实现数据类型的映射。而且我们会发现这个组件有一个好处,当我们的源数据和数据目标不是一个数据库的时候,一个中间媒介会提供很大的帮助。

 

Mapping

源 -> SQ -> (Transformations) -> Target

 

 

实现

实现Mapping,双击SQ,选择进入Properties Tab界面。

 

SQL QUERY

这时候我们会发现有一个SQL QUERY的选项栏,单击进入SQL EDITOR界面,这里是可以自定义SQL函数的。单击Generate SQL之后,PowerCenter会自动的生成当前的SQL语句。在修改SQL语句的时候需要满足以下的条件:

    1.修改的SQL语句必须满足源数据库的语法要求。例如源数据库是Oracle的,则需要使用Oracle的语法;源数据库为DB2的,则需要使用DB2的语法。

    2.SELECT后面的字段顺序是有要求的,它必须跟下游组件的字段名称和顺序保持一致性,如果对SELECT后面的字段使用了函数,尽量使用字段别名。

当然,能够实现SQL文,意味着我们也可以在这里写关联的语句,这个后文会说。

 

Source Filter

在前面说的Properties Tab界面我们发现还有一个Source Filter选项栏。这个选项栏顾名思义就是起到过滤的作用。例如一张员工表,我们需要的是薪资大于5000的数据,在Source Filter中写入 EMP.SQL > 5000,PowerCenter在之后的读取数据库数据的时候只有SAL大于5000的数据才能通过。(这个功能也可以在之前的SQL QUERY中实现)

需要注意的是源限定符转换包括默认SQL查询中的源过滤器,如果在添加了源过滤器之后修改默认查询,PowerCenter将使用源限定符转换SQL查询部分中定义的查询。

可以在源过滤器中使用包括映射参数和变量,包括字符串映射参数和变量。这边请注意使用适用于源系统的字符串标识符,当然,对于大部分数据库来讲,应用单引号将字符串参数或变量括起来。

在某些特定条件下,我们也会需要更改日期时间映射参数和变量的日期格式。

这边其实PowerCenter中是存在一个Filter 组件的,但是是存在差别的,Filter组件的运行是由PowerCenter服务器执行的,而SQ中的过滤是由数据库执行的。对于资源性能的影响需要自行根据实际考量。

 

Number Of Sorted Ports

在Properties Tab界面有一个Number Of Sorted Ports选项栏。这个顾名思义是做排序的一个功能。例如我们在里面输入2,同样的用SQL Query -> Generate SQL查看。会发现SQL文中出现了ORDER BY 语句,并且,排序的字段为前两个字段。

在使用排序时,PowerCenter将添加端口到默认的查询的ORDER BY的语句中。PowerCeter Server将添加配置的端口号,从源限定符转换的顶部开始。在映射中包含聚合or联接转换时,可以使用已排序的端口来提高性能。

    聚合:为已排序输入配置聚合转换时,使用已排序的端口发送到已排序数据,聚合转换中的分组依据端口必须与源限定符转换中的已排序端口顺序相匹配。

    联接:为已排序输入配置联接转换时,可以使用已排序的端口发送已排序数据,按与源限定符转换中相同的方式来配置已排序端口的顺序。

这边需要注意,在聚合和联接转换之前,可以先使用排序器转换掉关系文件和平面文件。源数据排序顺序也必须符合会话排序顺序。

 

数据库关联

上面有介绍过可以在SQL QUERY中自定义SQL文。这边也就存在了数据表之间的关联能力了。

实现方法也很简单,直接写SQL文就可以。

 

综合举例:场景:需求获取部门名称,包含Accounting且工资大于5000的员工信息。

可以在SQL QUERY中SQL语句表达如下:

SELECT EMP.EMPNO,EMP.ENAME,EMP.JOB

FROM

  EMP,DEPT

WHERE

 DEPT.DEPTNO = EMP.DEPTNO

AND EMP.SAL > 5000

AND DNAME LIKE '%Accounting%'

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值