联接源数据
可以使用一个源限定符转换来联接来自多个关系表的数据。这些表必须能从相同的实例或数据库服务器访问。
当映射使用相关的关系源时,您可以在一个源限定符转换中同时联接两个源。在会话期间,源数据库在传递数据至PowerCenter 之前先执行联接。如果源表编制了索引,此操作可以增强性能。
提示: 为异类源使用联接转换以及用联接转换联接平面文件。
默认联接
例如,您可以查看当月的所有订单,包括订单编号、订单数量和客户名称。ORDERS 表包括订单编号和每份订单的数量,但是不包括客户名称。要包括客户名称,您需要联接 ORDERS 和 CUSTOMERS 表。因为两个表均包括客户标识,所以您可以在一个源限定符转换中联接两个
表。
当您包括多个表时,PowerCenter Server 将为映射中使用的所有列生成 SELECT 语句。在本例中,SELECT 语句与以下语句类似:
SELECT
CUSTOMERS.CUSTOMER_ID,
CUSTOMERS.COMPANY,
CUSTOMERS.FIRST_NAME,
CUSTOMERS.LAST_NAME,
CUSTOMERS.ADDRESS1,
CUSTOMERS.ADDRESS2,
CUSTOMERS.CITY,
CUSTOMERS.STATE,
CUSTOMERS.POSTAL_CODE,
CUSTOMERS.PHONE,
CUSTOMERS.EMAIL,
ORDERS.ORDER_ID,
ORDERS.DATE_ENTERED,
ORDERS.DATE_PROMISED,
ORDERS.DATE_SHIPPED,
ORDERS.EMPLOYEE_ID,
ORDERS.CUSTOMER_ID,
ORDERS.SALES_TAX_RATE,
ORDERS.STORE_ID
FROM CUSTOMERS, ORDERS
WHERE CUSTOMERS.CUSTOMER_ID=ORDERS.CUSTOMER_ID
WHERE 子句是一个同等联接,它包括来自 ORDERS 和 CUSTOMER 表的 CUSTOMER_ID
自定义联接 如果需要覆盖默认联接,您可以输入 WHERE 子句的内容,这指定了自定义查询中的联接。 在下列情况下您可能需要覆盖默认联接:
2.联接用到的列的数据类型不匹配。
3.您需要指定不同类型的联接,例如外部联接。
异类联接
要执行异类联接,请使用联接转换。当您需要联接下列类型的源时,请使用联接转换:
- 联接不同源数据库的数据
- 联接不同平面文件系统的数据
- 联接关系源和平面文件
创建键关系
如果表具有主键-外键关系,那么您可以在源限定符转换中联接表。但是,您可以在 Source Analyzer 中通过链接不同表中相匹配的列来创建主键-外键关系。这些列不必是键,但它们应该包括在每个表的索引中。
提示: 如果源表超过 1000 行,您可以通过对主键-外键编制索引来增强性能。如果源表少于 1000 行,则对主键-外键编制索引反而会降低性能。
例如,某零售连锁公司办公室需要基于订单提取收到的付款。ORDERS 和 PAYMENTS 表没有共享主键和外键。但是,两个表都包括 DATE_SHIPPED 列。您可以在 Source Analyzer 的元数据中创建主键-外键关系。 注意,两个表未链接。因此,Designer 不会识别 DATE_SHIPPED 列上的关系。
可以通过链接 DATE_SHIPPED 列在 ORDERS 和 PAYMENTS 表之间创建一种关系。Designer 将自动向 ORDERS 和 PAYMENTS 表定义中的 DATE_SHIPPED 列添加主键和外键。