可以使用源限定符和应用程序源限定符转换在相同的数据库中执行两个源的外部联接。当 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. PHP 中文乱码解决方式

    1.PHP代码在PHP Storm中乱码,设置PHP Storm的默认文件编码格式为UTF-8: 文件->设置->编辑器->文件编码->将所有默认编码调整为UTF-8: 2.对 ...

  2. 【LOJ】#2172. 「FJOI2016」所有公共子序列问题

    题解 听说是什么序列自动机? 我们考虑对于每个位置的串,下面拼接相同的字符时,拼接最近的一个,这样可以保证不重不漏 为了实现这个我们需要什么呢,我们需要一个链表,记录一下每个位置的下一个字符会转移到哪 ...

  3. C# 字符串提取数字

    转自:http://www.cnblogs.com/dolphin-gjh/p/6121792.html 一.使用正则表达式 1 string str = "sztq数字提取123sztq数 ...

  4. chakra在vs2017中编译出现的问题

    转:http://blog.csdn.net/ink_cherry/article/details/73437981 1.无法找到vs2010生成工具 MSB8020 无法找到 Visual Stud ...

  5. CodeForces 805C Find Amir

    直觉. 先走$1$走到$n$,然后从$n$走到$2$,然后从$2$走到$n-1$,然后从$n-1$走到$3$.一次花费为$0$,一次花费为$1$. #include <cstdio> #i ...

  6. 验证Xcode真伪的方法,来自苹果官网

    验证Xcode真伪的方法,来自苹果官网   Xcode的验证你的版本 2015年9月22日    注意:中文为有道翻译,看下验证方法即可.   我们最近将应用程序从应用程序商店,还建有Xcode的假冒 ...

  7. Unity Shader 之 透明效果

    透明效果 透明效果一般有两种实现方法: 第一种,使用透明度测试(Alpha Test) 第二种,使用透明度混合(Alpha Blending) 透明度测试和透明度混合机制: 透明度测试(Alpha T ...

  8. Ubuntu下查看软件版本及安装位置

    查看软件版本: XXX --version 或 aptitude show xxx 也可用apt-show-versions (要先安装sudo apt-get install apt-show-ve ...

  9. Linux下对拍脚本

    使用说明:        1. 被测代码.正确代码.生成器代码均使用文件输入输出: 2. 对拍前会清屏,请注意:        3. 输出文件的文件名请和代码文件名保持一致:        4. 若无 ...

  10. 可以在GitHub或者码云里 直接搜索 项目 比如 哔哩哔哩

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Search · 哔哩哔哩 哔哩哔哩 · 搜索 - 码云 还有就是 以前的项目 可以不要 ...