Informatica 常用组件Source Qualifier之六 外部联接
可以使用源限定符和应用程序源限定符转换在相同的数据库中执行两个源的外部联接。当 PowerCenter 执行外部联接时,它将返回其中一个源表的所有行和另一个源表中匹配联接条件的行。
如果您需要联接两个表并返回其中一个表的所有行,可使用外部联接。例如,当您希望联接注册客户表和每月购买情况表以确定注册客户的购买行为是否活跃时,您就可以执行外部联接。使用外部联接,您可以联接注册客户表和每月购买情况表,并返回注册客户表中的所有行,包括上个月无购买行为的客户。如果您执行正常联接,PowerCenter 将仅返回在该月内有购买行为的注册客户,以及仅由注册客户进行的购买行为。
使用外部联接,您可以在联接转换中生成与主外部联接或细节外部联接相同的结果。但是,使用外部联接将减少数据流中的行数。这可以提高性能。
PowerCenter 支持两种外部联接:
- 左外联接。 PowerCenter 将返回联接语法左侧表中的所有行,并返回两个表中满足联接条件的所有行。
- 右外联接。 PowerCenter 将返回联接语法右侧表中的所有行,并返回两个表中满足联接条件的所有行。
注: 覆盖默认查询时,您可以在外部联接中使用嵌套查询语句。
Informatica 联接语法
输入联接语法时,您可以使用 Informatica 或数据库特定的联接语法。使用 Informatica 联接语法时,PowerCenter 将在会话期间转化语法并将它传递至源数据库。
注:始终为联接条件使用数据库特定的语法。
使用 Informatica 联接语法时,将整个联接语句用大括号括起来 ({Informatica syntax})。使用数据库语法时,输入源数据库支持的语法,不要用大括号括起。
使用 Informatica 联接语法时,使用表名称作为列名称的前缀。例如,如果在 REG_CUSTOMER 表中具有名为 FIRST_NAME 的列,请在联接语法中输入 "REG_CUSTOMER.FIRST_NAME"。另外,使用别名作为表名称时,请使用 Informatica 联接语法内的别名以确保 PowerCenter Server 能识别别名。
下表列出了创建外部联接时可以在不同位置为不同源限定符转换输入的联接语法:
|
转换
|
转换设置
|
说明
|
|---|---|---|
|
源限定符转换
|
用户定义的联接
|
创建联接覆盖。会话期间,PowerCenter 将联接覆盖附加至默认查询的 WHERE 子句后。
|
|
SQL 查询
|
直接在默认查询的 WHERE 后输入联接语法。
|
|
|
应用程序源限定符转换
|
联接覆盖
|
创建联接覆盖。会话期间,PowerCenter 将联接覆盖附加至默认查询的 WHERE 子句后。
|
|
提取覆盖
|
直接在默认查询的 WHERE 后输入联接语法。
|
可以在单个源限定符中将左外联接和右外联接与正常联接合并。您可以使用多个正常联接和多个左外联接。
合并联接时,请按以下顺序输入联接:
- 正常
- 左外
- 右外
正常联接语法
可以在源限定符中使用联接条件来创建正常联接。但是,创建外部联接时,您需要覆盖默认联接才能执行外部联接。因此,您需要在联接覆盖中包括正常联接。在联接覆盖中合并正常联接时,先列出正常联接,再列出外部联接。您可以在联接覆盖中输入多个正常联接。
要创建正常联接,请使用以下语法:
{ source1 INNER JOINsource2onjoin_condition }
下表是联接覆盖中显示正常联接的语法:
|
语法
|
说明
|
|---|---|
|
source1
|
源表名称。PowerCenter 将从此表中返回与联接条件匹配的行。
|
|
source2
|
源表名称。PowerCenter 将从此表中返回与联接条件匹配的行。
|
|
join_condition
|
联接条件。使用源数据库支持的语法。您可以通过 AND 运算符组合多个联接条件。
|
例如,您具有包含注册客户数据的 REG_CUSTOMER、每月刷新一次的 PURCHASES 表
要返回显示六月份每次交易相关的客户名称的行,可使用以下语法:
{ REG_CUSTOMER INNER JOIN PURCHASES on REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID }
PowerCenter 将返回具有匹配客户标识的行。它不包括在六月份没有购买行为的客户。它也不包括非注册客户进行的购买行为。
左外联接语法
可以使用联接覆盖创建左外联接。您可以在单个联接覆盖中输入多个左外联接。与其它联接一同使用左外联接时,请在语句中任何正常联接后面一并列出所有左外联接。
要创建左外联接,请使用以下语法: { source1 LEFT OUTER JOINsource2onjoin_condition }
|
语法
|
说明
|
|---|---|
|
source1
|
源表名称。对于左外联接,PowerCenter 将返回此表中的所有行。
|
|
source2
|
源表名称。PowerCenter 将从此表中返回与联接条件匹配的行。
|
|
join_condition
|
联接条件。使用源数据库支持的语法。您可以通过 AND 运算符组合多个联接条件。
|
例如,使用在 正常联接语法 中描述的相同 REG_CUSTOMER 和 PURCHASES 表,您可以使用以下联接覆盖来确定有多少客户在六月份有购买行为:
{ REG_CUSTOMER LEFT OUTER JOIN PURCHASES on REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID }
PowerCenter Server 将返回 REG_CUSTOMERS 表中的所有注册客户,并对在六月份没有购买行为的客户使用空值。它不包括非注册客户进行的购买行为。
可以使用多个联接条件来确定有多少注册客户在六月份单次购买花费超过 $100.00:
{REG_CUSTOMER LEFT OUTER JOIN PURCHASES on (REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID AND PURCHASES.AMOUNT > 100.00) }
如果需要合并同期内退货的信息,您可以使用多个左外联接。
要确定在六月份有多少客户进行了购买和退货,您可以使用两个左外联接:
{ REG_CUSTOMER LEFT OUTER JOIN PURCHASES on REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID LEFT OUTER JOIN RETURNS on REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID }
PowerCenter 对缺少的值使用 NULL。
右外联接语法
您可以使用联接覆盖创建右外联接。如果逆转联接语法中的表顺序,右外联接将返回与左外联接相同的结果。仅在联接覆盖中使用一个右外联接。如果要创建不止一个右外联接,请尝试逆转源表的顺序,并把联接类型更改为左外联接。
将右外联接与其它联接一起使用时,请在联接覆盖末尾输入右外联接。
要创建右外联接,请使用以下语法:
{ source1 RIGHT OUTER JOINsource2onjoin_condition }
|
语法
|
说明
|
|---|---|
|
source1
|
源表名称。PowerCenter 将从此表中返回与联接条件匹配的行。
|
|
source2
|
源表名称。对于右外联接,PowerCenter 将返回此表中的所有行。
|
|
join_condition
|
联接条件。使用源数据库支持的语法。您可以通过 AND 运算符组合多个联接条件。
|
可以将右外联接与左外联接一起使用,以联接和返回两个表中的所有数据,作用与完全外部联接相似。例如,您可以使用以下联接覆盖提取六月份的所有注册客户和所有购买行为:
{REG_CUSTOMER LEFT OUTER JOIN PURCHASES on REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID RIGHT OUTER JOIN PURCHASES on REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID }
创建外部联接
可以输入外部联接作为联接覆盖或作为默认查询的覆盖的一部分。
创建联接覆盖时,Designer 会把联接覆盖附加到默认查询的 WHERE 子句后。在会话期间,PowerCenter 将转化 Informatica 联接语法并将它包括在用于提取源数据的默认查询中。可能的话,输入联接覆盖而不是覆盖默认查询。
覆盖默认查询时,在默认查询的 WHERE 子句中输入联接语法。在会话期间,PowerCenter 将转化 Informatica 联接语法,然后使用查询来提取源数据。如果在创建覆盖之后更改转换,PowerCenter 将忽略更改。因此,如果可能的话,输入外部联接语法作为联接覆盖。
要创建外部联接作为联接覆盖:
- 打开源限定符转换,然后单击"属性"选项卡。
- 在源限定符转换中,单击"用户定义的联接"字段中的按钮。
在应用程序源限定符转换中,单击"联接覆盖"字段中的按钮。
- 输入联接语法。
请勿在联接的起始处输入 WHERE。PowerCenter Server 在查询行时会添加。
用大括号 ( { } ) 将 Informatica 联接语法括起来。
使用表别名及 Informatica 联接语法时,请在 Informatica 联接语法内使用别名。
将表名称用作列名称前缀,如"表.列"。
使用源数据库支持的联接条件。
输入多个联接时,按类型将联接分组,然后按以下顺序列出:正常、左外、右外。在每个嵌套查询中仅包括一个右外联接。
从"端口"选项卡中选择端口名称以确保准确性。
- 单击"确定"。
要创建外部联接作为提取覆盖:
- 在连接应用程序源限定符转换的输入和输出端口之后,双击转换的标题栏并选择"属性"选项卡。
- 在应用程序源限定符转换中,单击"提取覆盖"字段中的按钮。
- 单击"生成 SQL"。
- 在 WHERE 子句中紧接 WHERE 输入联接语法。
用大括号 ( { } ) 将 Informatica 联接语法括起来。使用表别名及 Informatica 联接语法时,请在 Informatica 联接语法内使用别名。将表名称用作列名称前缀,如"表.列"。使用源数据库支持的联接条件。输入多个联接时,按类型将联接分组,然后按以下顺序列出:正常、左外、右外。在每个嵌套查询中仅包括一个右外联接。从"端口"选项卡中选择端口名称以确保准确性。
- 单击"确定"。
Informatica 常用组件Source Qualifier之六 外部联接的更多相关文章
- Informatica 常用组件Source Qualifier之三 联接查询
联接源数据 可以使用一个源限定符转换来联接来自多个关系表的数据.这些表必须能从相同的实例或数据库服务器访问.当映射使用相关的关系源时,您可以在一个源限定符转换中同时联接两个源.在会话期间,源数据库在传 ...
- Informatica 常用组件Source Qualifier之一 概述
转换类型:主动.已连接 1 Source Qualifier 概述 当你添加关系表或平面文件源定义至映射时,需要将它连接至 Source Qualifier 组件.Source Qualifier ...
- Informatica 常用组件Source Qualifier之九 创建SQ转换
可以配置 Designer 在您将源拖到映射中时默认创建源限定符转换,您也可以手动创建源限定符转换. 默认创建源限定符转换 可以配置 Designer 在您将源拖到映射中时自动创建一个源限定符转换. ...
- Informatica 常用组件Source Qualifier之七 使用排序端口
使用已排序端口时,PowerCenter 将添加端口至默认查询中的 ORDER BY 子句.PowerCenter Server 将添加配置的端口号,从源限定符转换的顶部开始.在映射中包括以下任何转换 ...
- Informatica 常用组件Source Qualifier之五 User Defined Join
User defined join : 输入用户定义的联接与输入自定义 SQL 查询类似.但是,只需输入 WHERE 子句的内容,而不是整个查询. 添加用户定义的联接时,源限定符转换包括默认 ...
- Informatica 常用组件Source Qualifier之二 默认查询
2 默认查询 对于关系源,PowerCenter Server 将在运行会话时为每个源限定符转换生成查询.对于每个在映射中使用的源列,默认查询均为 SELECT 语句.也就是说,PowerCenter ...
- Informatica 常用组件Source Qualifier之八 会话前和会话后 SQL
可以在源限定符转换的"属性"选项卡中添加会话前和会话后 SQL 命令.您可能要使用会话前 SQL 以在会话开始时将时间标识行写入源表. PowerCenter 在读取源之前对源 ...
- Informatica 常用组件Source Qualifier之八 Distinct
如果希望 PowerCenter 从源选择唯一值,您可以使用"选择相异"选项.例如,您可以使用此功能从列出总销售额的表中提取唯一客户标识.使用"选择相异"过滤器 ...
- Informatica 常用组件Source Qualifier之七 输入过滤器
通过输入源过滤器,可以降低 PowerCenter 查询的行数.如果在源过滤器中包括字符串 "WHERE" 或较大对象,PowerCenter 将使会话失败. 源限定符转换包括默 ...
随机推荐
- javascript copy text to clipboard
本段代码摘自微软docs网站上,目前需要解决在IE浏览器中触发copy事件的方法,也可以直接调用jquery. <!DOCTYPE html> <html> <head& ...
- 【LOJ】 #2521. 「FJOI2018」领导集团问题
题解 这道题很显然可以想出来一个\(n^2\)的dp,也就是dp[u][i]表示以u为根的子树最大值是i的点集最大是多少(i是离散化后的值) 就是对于每个儿子处理出后缀最大值然后按位相加更新父亲,我们 ...
- CentOS7.6使用flatpak安装软件
1.安装flatpak(CentOS 7已默认安装Flatpak) yum -y install flatpak 2.添加Flathub仓库 flatpak remote-add --if-not-e ...
- 解析kubernetes架构
一. 简介: kubernetes是一个开源的容器管理工具,是基于GO语言开实现的,轻量级和便携式的应用,可以把kubernetes cluster在linux主机上部署.管理和扩容docker容器的 ...
- list容器详解
首先说说STL ( STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL现在是C++的一部分,因此不用额外安装什么.它被内建在你的编译器之内.因为STL的list是一个简单的容器, ...
- EF-CodeFirst模式的简单使用
要求: 引用EntityFramework SqlServer数据库 一个C#项目 项目结构: 将实体模型映射到数据库,只需要在下面三个地方进行配置. 实体类(数据库映射) DbContext上下文( ...
- linux——(6)vim与vi
概念:vi与vim的区别 vi是一款老式的文字处理软件,不过现在依然广泛使用,所有的UnixLike系统都会内置vi文本编辑器. vim可以看出vi的升级版,不过vi更像是一个程序开发工具,功能也比v ...
- 【BZOJ 2440】 2440: [中山市选2011]完全平方数 (二分+容斥原理+莫比乌斯函数)
2440: [中山市选2011]完全平方数 Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数 ...
- BZOJ3052 [wc2013] 糖果公园 【树上莫队】
树上莫队和普通的序列莫队很像,我们把树进行dfs,然后存一个长度为2n的括号序列,就是一个点进去当作左括号,出来当作右括号,然后如果访问从u到v路径,我们可以转化成括号序列的区间,记录x进去的时候编号 ...
- Codeforces 835 F. Roads in the Kingdom
\(>Codeforces\space835 F. Roads in the Kingdom<\) 题目大意 : 给你一棵 \(n\) 个点构成的树基环树,你需要删掉一条环边,使其变成一颗 ...