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 联接语法内使用别名。将表名称用作列名称前缀,如"表.列"。使用源数据库支持的联接条件。输入多个联接时,按类型将联接分组,然后按以下顺序列出:正常、左外、右外。在每个嵌套查询中仅包括一个右外联接。从"端口"选项卡中选择端口名称以确保准确性。

  • 单击"确定"。

 

时间: 2024-10-09 04:04:26

Informatica 常用组件Source Qualifier之 外部联接的相关文章

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

联接源数据 可以使用一个源限定符转换来联接来自多个关系表的数据.这些表必须能从相同的实例或数据库服务器访问.当映射使用相关的关系源时,您可以在一个源限定符转换中同时联接两个源.在会话期间,源数据库在传递数据至PowerCenter 之前先执行联接.如果源表编制了索引,此操作可以增强性能.提示: 为异类源使用联接转换以及用联接转换联接平面文件. 默认联接 当您在一个源限定符转换中联接相关表时,PowerCenter 将基于每个表中的相关键来联接表. 这种默认联接是内同等联接,在 WHERE 子句中

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

使用已排序端口时,PowerCenter 将添加端口至默认查询中的 ORDER BY 子句.PowerCenter Server 将添加配置的端口号,从源限定符转换的顶部开始.在映射中包括以下任何转换时,您可以使用已排序端口来提高性能: 聚合.为已排序输入配置聚合转换时,您可以使用已排序端口发送已排序的数据.聚合转换中的分组依据端口必须与源限定符转换中的已排序端口顺序相匹配. 联接.为已排序输入配置联接转换时,您可以使用已排序端口发送已排序的数据.按与源限定符转换中相同的方式来配置已排序端口的顺

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

可以配置 Designer 在您将源拖到映射中时默认创建源限定符转换,您也可以手动创建源限定符转换. 默认创建源限定符转换 可以配置 Designer 在您将源拖到映射中时自动创建一个源限定符转换. 要自动创建源限定符转换: 在 Designer 中选择"工具-选项". 选择"格式"选项卡. 在"工具"选项中,选择 Mapping Designer. 打开源时选择"创建源限定符". 手动创建源限定符转换 可以在 Mapping

Informatica 常用组件Source Qualifier之 User Defined Join

User defined join :      输入用户定义的联接与输入自定义 SQL 查询类似.但是,只需输入 WHERE 子句的内容,而不是整个查询. 添加用户定义的联接时,源限定符转换包括默认 SQL 查询中的设置.但是,如果在添加用户定义的联接后修改默认查询,PowerCenter 将仅使用在源限定符转换中的 SQL 查询属性中定义的查询. 可以在用户定义的联接中包括映射参数和变量.包括字符串映射参数或变量时,请使用适用于源系统的字符串标识符.对于大多数数据库,您应用单引号将字符串参数

Informatica 常用组件Source Qualifier之 Distinct

如果希望 PowerCenter 从源选择唯一值,您可以使用"选择相异"选项.例如,您可以使用此功能从列出总销售额的表中提取唯一客户标识.使用"选择相异"过滤器可以较早地过滤掉不必要的数据,这有助于提高性能. 默认情况下,Designer 生成 SELECT 语句.如果选择"选择相异",源限定符转换将在默认 SQL 查询中包括此设置.          例如,启用"选择相异"选项.Designer 将把 SELECT DIST

Informatica 常用组件Source Qualifier之 SQL Query

源限定符转换提供 SQL 查询选项以覆盖默认的查询.您可以输入您的源数据库支持的 SQL 语句.输入查询之前,请连接您要在映射中使用的所有输入和输出端口. 编辑 SQL 查询时,您可以生成并编辑默认查询.当 Designer 生成默认的查询时,它将合并所有其它配置的选项,例如过滤器或已排序端口数.结果查询将覆盖您随后可能在转换中配置的所有其它选项. 可以在 SQL 查询中包括映射参数和变量.包括字符串映射参数或变量时,请使用适用于源系统的字符串标识符.对于大多数数据库,您应用单引号将字符串参数或

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

  可以在源限定符转换的"属性"选项卡中添加会话前和会话后 SQL 命令.您可能要使用会话前 SQL 以在会话开始时将时间标识行写入源表. PowerCenter 在读取源之前对源数据库运行会话前 SQL 命令, 在写入目标之后对源数据库运行会话后 SQL 命令. 可以在会话属性"映射"选项卡上的"转换"视图中覆盖 SQL 命令.您还可以配置 PowerCenter 在运行会话前或会话后 SQL 命令遇到错误时是停止还是继续.      当您在源

Informatica 常用组件Lookup之五 转换属性

查找转换的属性标识数据库源.PowerCenter 如何处理转换,以及它如何处理高速缓存和多项匹配. 创建映射时,为每个查找转换指定属性.创建会话时,您可在会话属性中覆盖某些属性,如每个转换的索引和数据高速缓存大小. 选项 查找类型 说明 Lookup SQL Override 关系 覆盖默认 SQL 语句以查询查找表. 指定希望 PowerCenter 用以查询查找值的 SQL 语句.仅在已启用查找高速缓存的情况下使用. Lookup Table Name 关系 指定转换将查找和高速缓存其值的

Informatica 常用组件Lookup之四 查找组件

在映射中配置查找转换时,请定义以下组件: 查找源 端口 属性 条件 元数据扩展 查找源         您可以使用平面文件或关系表作为查找源.创建查找转换时,您可以从以下位置导入查找源: 资料库中的任何关系源或目标定义 资料库中的任何平面文件源或目标定义 PowerCenter Server 和 PowerCenter Client 机器都可以连接到的任何表或文件 查找表可以是单个表,您也可以使用查找 SQL 覆盖以将相同数据库中的多个表联接起来.PowerCenter 为所有传入查找转换的行,