可以使用源限定符和应用程序源限定符转换在相同的数据库中执行两个源的外部联接。当 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之六 外部联接的更多相关文章

  1. Informatica 常用组件Source Qualifier之三 联接查询

    联接源数据 可以使用一个源限定符转换来联接来自多个关系表的数据.这些表必须能从相同的实例或数据库服务器访问.当映射使用相关的关系源时,您可以在一个源限定符转换中同时联接两个源.在会话期间,源数据库在传 ...

  2. Informatica 常用组件Source Qualifier之一 概述

     转换类型:主动.已连接 1 Source Qualifier 概述 当你添加关系表或平面文件源定义至映射时,需要将它连接至 Source Qualifier 组件.Source Qualifier ...

  3. Informatica 常用组件Source Qualifier之九 创建SQ转换

    可以配置 Designer 在您将源拖到映射中时默认创建源限定符转换,您也可以手动创建源限定符转换. 默认创建源限定符转换 可以配置 Designer 在您将源拖到映射中时自动创建一个源限定符转换. ...

  4. Informatica 常用组件Source Qualifier之七 使用排序端口

    使用已排序端口时,PowerCenter 将添加端口至默认查询中的 ORDER BY 子句.PowerCenter Server 将添加配置的端口号,从源限定符转换的顶部开始.在映射中包括以下任何转换 ...

  5. Informatica 常用组件Source Qualifier之五 User Defined Join

    User defined join :      输入用户定义的联接与输入自定义 SQL 查询类似.但是,只需输入 WHERE 子句的内容,而不是整个查询. 添加用户定义的联接时,源限定符转换包括默认 ...

  6. Informatica 常用组件Source Qualifier之二 默认查询

    2 默认查询 对于关系源,PowerCenter Server 将在运行会话时为每个源限定符转换生成查询.对于每个在映射中使用的源列,默认查询均为 SELECT 语句.也就是说,PowerCenter ...

  7. Informatica 常用组件Source Qualifier之八 会话前和会话后 SQL

      可以在源限定符转换的"属性"选项卡中添加会话前和会话后 SQL 命令.您可能要使用会话前 SQL 以在会话开始时将时间标识行写入源表. PowerCenter 在读取源之前对源 ...

  8. Informatica 常用组件Source Qualifier之八 Distinct

    如果希望 PowerCenter 从源选择唯一值,您可以使用"选择相异"选项.例如,您可以使用此功能从列出总销售额的表中提取唯一客户标识.使用"选择相异"过滤器 ...

  9. Informatica 常用组件Source Qualifier之七 输入过滤器

    通过输入源过滤器,可以降低 PowerCenter  查询的行数.如果在源过滤器中包括字符串 "WHERE" 或较大对象,PowerCenter 将使会话失败. 源限定符转换包括默 ...

随机推荐

  1. 【LOJ】#2173. 「FJOI2016」建筑师

    题解 蒟蒻只会\(O(nAB)\)的dp= = 那么先说答案 \(S_{u}(n - 1,a + b - 2) * \binom{a + b - 2}{a - 1}\) 其中\(S_{u}(n,m)\ ...

  2. 关于<c:if>没有<c:else>解决方案-转载

    <c:if>没有<c:else>可以用<c:choose>来取代结构: <c:choose> <c:when test=""& ...

  3. php抓取一个页面的图片

    思路: 1.找到一个页面 2.正则过滤所有的img 3.正则过滤出所有的src的属性 4.获取链接信息,写入文件 file_get_contents(), file_put_contents() 5. ...

  4. PBR Step by Step( 五)Phong反射模型

    Lamertian模型描述了当光源直接照射到粗糙物体表面时,反射光线的分布情况.在现实中,除了直接光照,还有来自周围环境的间接光照. 直接照射到物体表面的光照,又称为局部光照: 间接照射到物体表面的光 ...

  5. iTerm2配置

    1.颜色Solarized 首先下载 Solarized: $ git clone git://github.com/altercation/solarized.git Terminal/iTerm2 ...

  6. 解决关于stack溢出的问题

    开发中经常遇到: 前端遇到Uncaught RangeError: Maximum call stack size exceeded错误 后台遇到java.lang.OutOfMemoryError: ...

  7. 【20181030T1】排列树【树形结构+组合数】

    题面 [正解] 一眼找规律 --**这东西有啥规律啊 哎好像根节点是最小的 好像可以组合数分配子树大小,子树内部-- 可以递归啊! 乱搞一顿就好啦 过了大样例 复杂度\(O(N)\) 切完T2后T3水 ...

  8. NOIP 解题有感

    算法方面: 在搜索问题上,包括贪心等没有固定算法的题目,还有输出格式(包括输入格式)特别容易出错.这也是解题选手的弱点. 1.做搜索题把步骤先用文字写下来,再转换成代码,以避免敲代码时疏漏某个条件. ...

  9. Vue组件深入了解(组件注册和Prop)

    一.组件名 自定义组件的名称强烈推荐遵循W3C规范中的方式:字母全小写且必须包含一个连字符. 二.全局注册和局部注册的区别 全局注册 Vue.component进行注册.全局注册的可以在任何创建的实例 ...

  10. php 导出excel

    <?phpclass Excel { var $inEncode; var $outEncode; public function _construct() { } public functio ...