Weitere ähnliche Inhalte
Ähnlich wie Informatica PowerCenter Transformation Guide
Ähnlich wie Informatica PowerCenter Transformation Guide (20)
Kürzlich hochgeladen (20)
Informatica PowerCenter Transformation Guide
- 2. Informatica PowerCenter Transformation Guide
Version 8.1.1
April 2007
Copyright (c) 1998–2007 Informatica Corporation.
All rights reserved. Printed in the USA.
This software and documentation contain proprietary information of Informatica Corporation and are provided under a license agreement containing
restrictions on use and disclosure and are also protected by copyright law. Reverse engineering of the software is prohibited. No part of this document may be
reproduced or transmitted in any form, by any means (electronic, photocopying, recording or otherwise) without prior consent of Informatica Corporation.
Use, duplication, or disclosure of the Software by the U.S. Government is subject to the restrictions set forth in the applicable software license agreement and as
provided in DFARS 227.7202-1(a) and 227.7702-3(a) (1995), DFARS 252.227-7013(c)(1)(ii) (OCT 1988), FAR 12.212(a) (1995), FAR 52.227-19, or FAR
52.227-14 (ALT III), as applicable.
The information in this document is subject to change without notice. If you find any problems in the documentation, please report them to us in writing.
Informatica Corporation does not warrant that this documentation is error free.
Informatica, PowerCenter, PowerCenterRT, PowerCenter Connect, PowerCenter Data Analyzer, PowerExchange, PowerMart, SuperGlue, Metadata Manager,
Informatica Data Quality and Informatica Data Explorer are trademarks or registered trademarks of Informatica Corporation in the United States and in
jurisdictions throughout the world. All other company and product names may be trade names or trademarks of their respective owners.
Portions of this software and/or documentation are subject to copyright held by third parties, including without limitation: Copyright DataDirect Technologies,
1999-2002. All rights reserved. Copyright © Sun Microsystems. All Rights Reserved. Copyright © RSA Security Inc. All Rights Reserved. Copyright © Ordinal
Technology Corp. All Rights Reserved.
Informatica PowerCenter products contain ACE (TM) software copyrighted by Douglas C. Schmidt and his research group at Washington University and
University of California, Irvine, Copyright (c) 1993-2002, all rights reserved.
Portions of this software contain copyrighted material from The JBoss Group, LLC. Your right to use such materials is set forth in the GNU Lesser General
Public License Agreement, which may be found at http://www.opensource.org/licenses/lgpl-license.php. The JBoss materials are provided free of charge by
Informatica, “as-is”, without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and fitness
for a particular purpose.
Portions of this software contain copyrighted material from Meta Integration Technology, Inc. Meta Integration® is a registered trademark of Meta Integration
Technology, Inc.
This product includes software developed by the Apache Software Foundation (http://www.apache.org/). The Apache Software is Copyright (c) 1999-2005 The
Apache Software Foundation. All rights reserved.
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit and redistribution of this software is subject to terms available
at http://www.openssl.org. Copyright 1998-2003 The OpenSSL Project. All Rights Reserved.
The zlib library included with this software is Copyright (c) 1995-2003 Jean-loup Gailly and Mark Adler.
The Curl license provided with this Software is Copyright 1996-2004, Daniel Stenberg, <Daniel@haxx.se>. All Rights Reserved.
The PCRE library included with this software is Copyright (c) 1997-2001 University of Cambridge Regular expression support is provided by the PCRE library
package, which is open source software, written by Philip Hazel. The source for this library may be found at ftp://ftp.csx.cam.ac.uk/pub/software/programming/
pcre.
InstallAnywhere is Copyright 2005 Zero G Software, Inc. All Rights Reserved.
Portions of the Software are Copyright (c) 1998-2005 The OpenLDAP Foundation. All rights reserved. Redistribution and use in source and binary forms, with
or without modification, are permitted only as authorized by the OpenLDAP Public License, available at http://www.openldap.org/software/release/license.html.
This Software is protected by U.S. Patent Numbers 6,208,990; 6,044,374; 6,014,670; 6,032,158; 5,794,246; 6,339,775 and other U.S. Patents Pending.
DISCLAIMER: Informatica Corporation provides this documentation “as is” without warranty of any kind, either express or implied,
including, but not limited to, the implied warranties of non-infringement, merchantability, or use for a particular purpose. The information provided in this
documentation may include technical inaccuracies or typographical errors. Informatica could make improvements and/or changes in the products described in
this documentation at any time without notice.
- 3. Table of Contents
List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
About This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxx
Document Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxx
Other Informatica Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Visiting Informatica Customer Portal . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Visiting the Informatica Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Visiting the Informatica Knowledge Base . . . . . . . . . . . . . . . . . . . . . . xxxi
Obtaining Technical Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Chapter 1: Working with Transformations . . . . . . . . . . . . . . . . . . . . . . 1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Creating a Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Configuring Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Working with Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Creating Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Configuring Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Linking Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Multi-Group Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Working with Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Using the Expression Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Using Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Temporarily Store Data and Simplify Complex Expressions . . . . . . . . . . 14
Store Values Across Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Capture Values from Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . 15
Guidelines for Configuring Variable Ports . . . . . . . . . . . . . . . . . . . . . . 16
Using Default Values for Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Entering User-Defined Default Values . . . . . . . . . . . . . . . . . . . . . . . . . 20
Entering User-Defined Default Input Values . . . . . . . . . . . . . . . . . . . . . 22
Entering User-Defined Default Output Values . . . . . . . . . . . . . . . . . . . 25
General Rules for Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
iii
- 4. Entering and Validating Default Values . . . . . . . . . . . . . . . . . . . . . . . . . 28
Configuring Tracing Level in Transformations . . . . . . . . . . . . . . . . . . . . . . . 30
Reusable Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Instances and Inherited Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Mapping Variables in Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Creating Reusable Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Promoting Non-Reusable Transformations . . . . . . . . . . . . . . . . . . . . . . 32
Creating Non-Reusable Instances of Reusable Transformations . . . . . . . . 33
Adding Reusable Transformations to Mappings . . . . . . . . . . . . . . . . . . . 33
Modifying a Reusable Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Chapter 2: Aggregator Transformation . . . . . . . . . . . . . . . . . . . . . . . 37
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Ports in the Aggregator Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 38
Components of the Aggregator Transformation . . . . . . . . . . . . . . . . . . . 38
Aggregate Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Aggregate Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Aggregate Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Nested Aggregate Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Conditional Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Non-Aggregate Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Null Values in Aggregate Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Group By Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Non-Aggregate Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Using Sorted Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Sorted Input Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Pre-Sorting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Creating an Aggregator Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Chapter 3: Custom Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Working with Transformations Built On the Custom Transformation . . . 54
Code Page Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Distributing Custom Transformation Procedures . . . . . . . . . . . . . . . . . . 56
iv Table of Contents
- 5. Creating Custom Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Rules and Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Custom Transformation Components . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Working with Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Creating Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Editing Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Defining Port Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Working with Port Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Custom Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Setting the Update Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Working with Thread-Specific Procedure Code . . . . . . . . . . . . . . . . . . . 66
Working with Transaction Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Transformation Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Generate Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Working with Transaction Boundaries . . . . . . . . . . . . . . . . . . . . . . . . . 69
Blocking Input Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Writing the Procedure Code to Block Data . . . . . . . . . . . . . . . . . . . . . . 70
Configuring Custom Transformations as Blocking Transformations . . . . 70
Validating Mappings with Custom Transformations . . . . . . . . . . . . . . . 71
Working with Procedure Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Creating Custom Transformation Procedures . . . . . . . . . . . . . . . . . . . . . . . 73
Step 1. Create the Custom Transformation . . . . . . . . . . . . . . . . . . . . . . 73
Step 2. Generate the C Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Step 3. Fill Out the Code with the Transformation Logic . . . . . . . . . . . 76
Step 4. Build the Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Step 5. Create a Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Step 6. Run the Session in a Workflow . . . . . . . . . . . . . . . . . . . . . . . . . 87
Chapter 4: Custom Transformation Functions . . . . . . . . . . . . . . . . . 89
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Working with Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Working with Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Rules and Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Generated Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Initialization Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Notification Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Table of Contents v
- 6. Deinitialization Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Set Data Access Mode Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Navigation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Property Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Rebind Datatype Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Data Handling Functions (Row-Based Mode) . . . . . . . . . . . . . . . . . . . 117
Set Pass-Through Port Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Output Notification Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Data Boundary Output Notification Function . . . . . . . . . . . . . . . . . . . 121
Error Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Session Log Message Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Increment Error Count Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Is Terminated Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Blocking Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Pointer Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Change String Mode Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Set Data Code Page Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Row Strategy Functions (Row-Based Mode) . . . . . . . . . . . . . . . . . . . . 128
Change Default Row Strategy Function . . . . . . . . . . . . . . . . . . . . . . . 129
Array-Based API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Maximum Number of Rows Functions . . . . . . . . . . . . . . . . . . . . . . . . 130
Number of Rows Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Is Row Valid Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Data Handling Functions (Array-Based Mode) . . . . . . . . . . . . . . . . . . 132
Row Strategy Functions (Array-Based Mode) . . . . . . . . . . . . . . . . . . . . 135
Set Input Error Row Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Java API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
C++ API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Chapter 5: Expression Transformation . . . . . . . . . . . . . . . . . . . . . . 141
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Calculating Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Adding Multiple Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Creating an Expression Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
vi Table of Contents
- 7. Chapter 6: External Procedure Transformation . . . . . . . . . . . . . . . . 145
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Code Page Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
External Procedures and External Procedure Transformations . . . . . . . . 147
External Procedure Transformation Properties . . . . . . . . . . . . . . . . . . . 147
Pipeline Partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
COM Versus Informatica External Procedures . . . . . . . . . . . . . . . . . . . 148
The BankSoft Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Developing COM Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Steps for Creating a COM Procedure . . . . . . . . . . . . . . . . . . . . . . . . . 149
COM External Procedure Server Type . . . . . . . . . . . . . . . . . . . . . . . . 149
Using Visual C++ to Develop COM Procedures . . . . . . . . . . . . . . . . . 149
Developing COM Procedures with Visual Basic . . . . . . . . . . . . . . . . . 156
Developing Informatica External Procedures . . . . . . . . . . . . . . . . . . . . . . . 159
Step 1. Create the External Procedure Transformation . . . . . . . . . . . . . 159
Step 2. Generate the C++ Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Step 3. Fill Out the Method Stub with Implementation . . . . . . . . . . . . 164
Step 4. Building the Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Step 5. Create a Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Step 6. Run the Session in a Workflow . . . . . . . . . . . . . . . . . . . . . . . . 167
Distributing External Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Distributing COM Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Distributing Informatica Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Development Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
COM Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Row-Level Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Return Values from Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Exceptions in Procedure Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Memory Management for Procedures . . . . . . . . . . . . . . . . . . . . . . . . . 173
Wrapper Classes for Pre-Existing C/C++ Libraries or VB Functions . . . 173
Generating Error and Tracing Messages . . . . . . . . . . . . . . . . . . . . . . . 173
Unconnected External Procedure Transformations . . . . . . . . . . . . . . . . 175
Initializing COM and Informatica Modules . . . . . . . . . . . . . . . . . . . . 175
Other Files Distributed and Used in TX . . . . . . . . . . . . . . . . . . . . . . . 179
Service Process Variables in Initialization Properties . . . . . . . . . . . . . . . . . 180
External Procedure Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Dispatch Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Table of Contents vii
- 8. External Procedure Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Property Access Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Parameter Access Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Code Page Access Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Transformation Name Access Functions . . . . . . . . . . . . . . . . . . . . . . . 185
Procedure Access Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Partition Related Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Tracing Level Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Chapter 7: Filter Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Filter Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Creating a Filter Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Chapter 8: HTTP Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Connecting to the HTTP Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Creating an HTTP Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Configuring the Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Configuring the HTTP Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Selecting a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Configuring Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Configuring a URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
GET Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
POST Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
SIMPLE POST Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Chapter 9: Java Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Steps to Define a Java Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 214
Active and Passive Java Transformations . . . . . . . . . . . . . . . . . . . . . . . 215
Datatype Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Using the Java Code Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
viii Table of Contents
- 9. Configuring Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Creating Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Setting Default Port Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Configuring Java Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . 221
Working with Transaction Control . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Setting the Update Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Developing Java Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Creating Java Code Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Importing Java Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Defining Helper Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
On Input Row Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
On End of Data Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
On Receiving Transaction Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Configuring Java Transformation Settings . . . . . . . . . . . . . . . . . . . . . . . . . 229
Configuring the Classpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Enabling High Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Compiling a Java Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Fixing Compilation Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Locating the Source of Compilation Errors . . . . . . . . . . . . . . . . . . . . . 232
Identifying Compilation Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Chapter 10: Java Transformation API Reference . . . . . . . . . . . . . . . 237
Java Transformation API Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
failSession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
generateRow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
getInRowType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
incrementErrorCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Table of Contents ix
- 10. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
isNull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
logInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
logError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
rollBack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
setNull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
setOutRowType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Chapter 11: Java Transformation Example . . . . . . . . . . . . . . . . . . . 251
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Step 1. Import the Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Step 2. Create Transformation and Configure Ports . . . . . . . . . . . . . . . . . . 254
Step 3. Enter Java Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Import Packages Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Helper Code Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
On Input Row Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Step 4. Compile the Java Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Step 5. Create a Session and Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Sample Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Chapter 12: Java Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Expression Function Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Using the Define Expression Dialog Box . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Step 1. Configure the Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
x Table of Contents
- 11. Step 2. Create and Validate the Expression . . . . . . . . . . . . . . . . . . . . . 267
Step 3. Generate Java Code for the Expression . . . . . . . . . . . . . . . . . . 267
Steps to Create an Expression and Generate Java Code . . . . . . . . . . . . 268
Java Expression Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Working with the Simple Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
invokeJExpression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Simple Interface Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Working with the Advanced Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Steps to Invoke an Expression with the Advanced Interface . . . . . . . . . 273
Rules and Guidelines for Working with the Advanced Interface . . . . . . 273
EDataType Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
JExprParamMetadata Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
defineJExpression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
JExpression Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Advanced Interface Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
JExpression API Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
invoke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
getResultDataType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
getResultMetadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
isResultNull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
getInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
getDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
getLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
getStringBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
getBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Chapter 13: Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 283
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Working with the Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . 284
Joiner Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Defining a Join Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Defining the Join Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Normal Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Master Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Detail Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Full Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Using Sorted Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Table of Contents xi
- 12. Configuring the Sort Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Adding Transformations to the Mapping . . . . . . . . . . . . . . . . . . . . . . . 293
Configuring the Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . . . 293
Defining the Join Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Joining Data from a Single Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Joining Two Branches of the Same Pipeline . . . . . . . . . . . . . . . . . . . . . 296
Joining Two Instances of the Same Source . . . . . . . . . . . . . . . . . . . . . . 297
Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Blocking the Source Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Unsorted Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Sorted Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Working with Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Preserving Transaction Boundaries for a Single Pipeline . . . . . . . . . . . . 301
Preserving Transaction Boundaries in the Detail Pipeline . . . . . . . . . . . 301
Dropping Transaction Boundaries for Two Pipelines . . . . . . . . . . . . . . 302
Creating a Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Chapter 14: Lookup Transformation . . . . . . . . . . . . . . . . . . . . . . . . 307
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Connected and Unconnected Lookups . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Connected Lookup Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Unconnected Lookup Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 310
Relational and Flat File Lookups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Relational Lookups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Flat File Lookups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Lookup Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Lookup Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Lookup Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Lookup Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Lookup Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Metadata Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Lookup Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Configuring Lookup Properties in a Session . . . . . . . . . . . . . . . . . . . . 320
Lookup Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Default Lookup Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Overriding the Lookup Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
xii Table of Contents
- 13. Lookup Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Uncached or Static Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Dynamic Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Handling Multiple Matches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Lookup Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Configuring Unconnected Lookup Transformations . . . . . . . . . . . . . . . . . 331
Step 1. Add Input Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Step 2. Add the Lookup Condition . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Step 3. Designate a Return Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Step 4. Call the Lookup Through an Expression . . . . . . . . . . . . . . . . . 333
Creating a Lookup Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Chapter 15: Lookup Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Cache Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Building Connected Lookup Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Sequential Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Concurrent Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Using a Persistent Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Using a Non-Persistent Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Using a Persistent Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Rebuilding the Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Working with an Uncached Lookup or Static Cache . . . . . . . . . . . . . . . . . 344
Working with a Dynamic Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . 345
Using the NewLookupRow Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Using the Associated Input Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Working with Lookup Transformation Values . . . . . . . . . . . . . . . . . . . 349
Using the Ignore Null Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Using the Ignore in Comparison Property . . . . . . . . . . . . . . . . . . . . . . 354
Using Update Strategy Transformations with a Dynamic Cache . . . . . . 354
Updating the Dynamic Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . 356
Using the WHERE Clause with a Dynamic Cache . . . . . . . . . . . . . . . 358
Synchronizing the Dynamic Lookup Cache . . . . . . . . . . . . . . . . . . . . . 359
Example Using a Dynamic Lookup Cache . . . . . . . . . . . . . . . . . . . . . . 360
Rules and Guidelines for Dynamic Caches . . . . . . . . . . . . . . . . . . . . . 361
Sharing the Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Table of Contents xiii
- 14. Sharing an Unnamed Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Sharing a Named Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Lookup Cache Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Chapter 16: Normalizer Transformation . . . . . . . . . . . . . . . . . . . . . . 371
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Normalizer Transformation Components . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Normalizer Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Normalizer Transformation Generated Keys . . . . . . . . . . . . . . . . . . . . . . . 379
Storing Generated Key Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Changing the Generated Key Values . . . . . . . . . . . . . . . . . . . . . . . . . . 379
VSAM Normalizer Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
VSAM Normalizer Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
VSAM Normalizer Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Steps to Create a VSAM Normalizer Transformation . . . . . . . . . . . . . . 385
Pipeline Normalizer Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Pipeline Normalizer Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Pipeline Normalizer Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Steps to Create a Pipeline Normalizer Transformation . . . . . . . . . . . . . 391
Using a Normalizer Transformation in a Mapping . . . . . . . . . . . . . . . . . . . 394
Generating Key Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Chapter 17: Rank Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Ranking String Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Rank Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Rank Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Ports in a Rank Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Rank Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Defining Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Creating a Rank Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Chapter 18: Router Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 409
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
xiv Table of Contents
- 15. Working with Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Input Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Output Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Using Group Filter Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Adding Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Working with Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Connecting Router Transformations in a Mapping . . . . . . . . . . . . . . . . . . 418
Creating a Router Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Chapter 19: Sequence Generator Transformation . . . . . . . . . . . . . . 421
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Common Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Creating Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Replacing Missing Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Sequence Generator Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
NEXTVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
CURRVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Start Value and Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Increment By . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
End Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Current Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Number of Cached Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Creating a Sequence Generator Transformation . . . . . . . . . . . . . . . . . . . . . 432
Chapter 20: Sorter Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Sorting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Sorter Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Sorter Cache Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Case Sensitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Work Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Distinct Output Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Tracing Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Null Treated Low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Transformation Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Table of Contents xv
- 16. Creating a Sorter Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Chapter 21: Source Qualifier Transformation . . . . . . . . . . . . . . . . . 445
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Transformation Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Target Load Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Parameters and Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Source Qualifier Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . 449
Default Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Viewing the Default Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Overriding the Default Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Joining Source Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Default Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Custom Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Heterogeneous Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Creating Key Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Adding an SQL Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Entering a User-Defined Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Outer Join Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Informatica Join Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Creating an Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Common Database Syntax Restrictions . . . . . . . . . . . . . . . . . . . . . . . . 469
Entering a Source Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Using Sorted Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Select Distinct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Overriding Select Distinct in the Session . . . . . . . . . . . . . . . . . . . . . . 474
Adding Pre- and Post-Session SQL Commands . . . . . . . . . . . . . . . . . . . . . 475
Creating a Source Qualifier Transformation . . . . . . . . . . . . . . . . . . . . . . . . 476
Creating a Source Qualifier Transformation By Default . . . . . . . . . . . . 476
Creating a Source Qualifier Transformation Manually . . . . . . . . . . . . . 476
Configuring Source Qualifier Transformation Options . . . . . . . . . . . . . 476
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
Chapter 22: SQL Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Script Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
xvi Table of Contents
- 17. Script Mode Rules and Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Query Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Using Static SQL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Using Dynamic SQL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Query Mode Rules and Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Connecting to Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Using a Static Database Connection . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Passing a Logical Database Connection . . . . . . . . . . . . . . . . . . . . . . . . 490
Passing Full Connection Information . . . . . . . . . . . . . . . . . . . . . . . . . 490
Database Connections Rules and Guidelines . . . . . . . . . . . . . . . . . . . . 493
Session Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Input Row to Output Row Cardinality . . . . . . . . . . . . . . . . . . . . . . . . 494
Transaction Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
High Availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Creating an SQL Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
SQL Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
SQL Settings Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
SQL Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
Chapter 23: Using the SQL Transformation in a Mapping . . . . . . . . 511
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
Dynamic Update Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Defining the Source File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Creating a Target Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Creating the Database Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Configuring the Expression Transformation . . . . . . . . . . . . . . . . . . . . 516
Defining the SQL Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Configuring Session Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Target Data Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Dynamic Connection Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Defining the Source File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Creating a Target Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Creating the Database Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Creating the Database Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Configuring the Expression Transformation . . . . . . . . . . . . . . . . . . . . 521
Table of Contents xvii
- 18. Defining the SQL Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Configuring Session Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
Target Data Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
Chapter 24: Stored Procedure Transformation . . . . . . . . . . . . . . . . 525
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Connected and Unconnected Transformations . . . . . . . . . . . . . . . . . . . . . . 527
Input and Output Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Input/Output Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Return Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Status Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Running a Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Stored Procedure Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Executing Stored Procedures with a Database Connection . . . . . . . . . . 529
Using a Stored Procedure in a Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Writing a Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Sample Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Creating a Stored Procedure Transformation . . . . . . . . . . . . . . . . . . . . . . . 535
Importing Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Manually Creating Stored Procedure Transformations . . . . . . . . . . . . . 537
Setting Options for the Stored Procedure . . . . . . . . . . . . . . . . . . . . . . 538
Using $Source and $Target Variables . . . . . . . . . . . . . . . . . . . . . . . . . 539
Changing the Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Configuring a Connected Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 541
Configuring an Unconnected Transformation . . . . . . . . . . . . . . . . . . . . . . 542
Calling a Stored Procedure From an Expression . . . . . . . . . . . . . . . . . . 542
Calling a Pre- or Post-Session Stored Procedure . . . . . . . . . . . . . . . . . . 545
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Pre-Session Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Post-Session Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Session Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Supported Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
SQL Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Parameter Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Input/Output Port in Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Type of Return Value Supported . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Expression Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
xviii Table of Contents
- 19. Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Chapter 25: Transaction Control Transformation . . . . . . . . . . . . . . 555
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Transaction Control Transformation Properties . . . . . . . . . . . . . . . . . . . . . 557
Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Using Transaction Control Transformations in Mappings . . . . . . . . . . . . . . 560
Sample Transaction Control Mappings with Multiple Targets . . . . . . . 561
Mapping Guidelines and Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Creating a Transaction Control Transformation . . . . . . . . . . . . . . . . . . . . . 565
Chapter 26: Union Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Union Transformation Rules and Guidelines . . . . . . . . . . . . . . . . . . . . 568
Union Transformation Components . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Working with Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
Creating a Union Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
Using a Union Transformation in Mappings . . . . . . . . . . . . . . . . . . . . . . . 574
Chapter 27: Update Strategy Transformation . . . . . . . . . . . . . . . . . 575
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Setting the Update Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Flagging Rows Within a Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Forwarding Rejected Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Update Strategy Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Aggregator and Update Strategy Transformations . . . . . . . . . . . . . . . . 578
Lookup and Update Strategy Transformations . . . . . . . . . . . . . . . . . . . 579
Setting the Update Strategy for a Session . . . . . . . . . . . . . . . . . . . . . . . . . 580
Specifying an Operation for All Rows . . . . . . . . . . . . . . . . . . . . . . . . . 580
Specifying Operations for Individual Target Tables . . . . . . . . . . . . . . . 581
Update Strategy Checklist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Chapter 28: XML Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . 585
XML Source Qualifier Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
XML Parser Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Table of Contents xix
- 20. XML Generator Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
xx Table of Contents
- 21. List of Figures
Figure 1-1. Sample Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Figure 1-2. Example of Input, Output, and Input/Output Ports . . . . . . . . . . . . . . . . . . . . . . . 8
Figure 1-3. Sample Input and Output Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Figure 1-4. Expression Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Figure 1-5. Variable Ports Store Values Across Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Figure 1-6. Default Value for Input and Input/Output Ports . . . . . . . . . . . . . . . . . . . . . . . . . 19
Figure 1-7. Default Value for Output Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Figure 1-8. Using a Constant as a Default Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Figure 1-9. Using the ERROR Function to Skip Null Input Values . . . . . . . . . . . . . . . . . . . . 24
Figure 1-10. Entering and Validating Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Figure 1-11. Reverting to Original Reusable Transformation Properties . . . . . . . . . . . . . . . . . 35
Figure 2-1. Sample Mapping with Aggregator and Sorter Transformations . . . . . . . . . . . . . . . 46
Figure 3-1. Custom Transformation Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Figure 3-2. Editing Port Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Figure 3-3. Port Attribute Definitions Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Figure 3-4. Edit Port Attribute Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Figure 3-5. Custom Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Figure 3-6. Custom Transformation Ports Tab - Union Example . . . . . . . . . . . . . . . . . . . . . . 74
Figure 3-7. Custom Transformation Properties Tab - Union Example . . . . . . . . . . . . . . . . . . 75
Figure 3-8. Mapping with a Custom Transformation - Union Example . . . . . . . . . . . . . . . . . 87
Figure 4-1. Custom Transformation Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Figure 6-1. Process for Distributing External Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Figure 6-2. External Procedure Transformation Initialization Properties . . . . . . . . . . . . . . . . 178
Figure 6-3. External Procedure Transformation Initialization Properties Tab . . . . . . . . . . . . 180
Figure 7-1. Sample Mapping with a Filter Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Figure 7-2. Specifying a Filter Condition in a Filter Transformation . . . . . . . . . . . . . . . . . . 191
Figure 8-1. HTTP Transformation Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Figure 8-2. HTTP Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Figure 8-3. HTTP Transformation Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Figure 8-4. HTTP Transformation HTTP Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Figure 8-5. HTTP Tab for a GET Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Figure 8-6. HTTP Tab for a POST Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Figure 8-7. HTTP Tab for a SIMPLE POST Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Figure 9-1. Java Code Tab Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Figure 9-2. Java Transformation Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Figure 9-3. Java Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Figure 9-4. Java Transformation Settings Dialog Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Figure 9-5. Highlighted Error in Code Entry Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Figure 9-6. Highlighted Error in Full Code Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Figure 11-1. Java Transformation Example - Sample Mapping . . . . . . . . . . . . . . . . . . . . . . . 253
List of Figures xxi
- 22. Figure 11-2. Java Transformation Example - Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . .. . .255
Figure 11-3. Java Transformation Example - Import Packages Tab . . . . . . . . . . . . . . . . . .. . .257
Figure 11-4. Java Transformation Example - Helper Code Tab . . . . . . . . . . . . . . . . . . . .. . .258
Figure 11-5. Java Transformation Example - On Input Row Tab . . . . . . . . . . . . . . . . . . .. . .260
Figure 11-6. Java Transformation Example - Successful Compilation . . . . . . . . . . . . . . . .. . .261
Figure 12-1. Define Expression Dialog Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .267
Figure 12-2. Java Expressions Code Entry Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .268
Figure 13-1. Mapping with Master and Detail Pipelines . . . . . . . . . . . . . . . . . . . . . . . . .. . .284
Figure 13-2. Joiner Transformation Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .286
Figure 13-3. Mapping Configured to Join Data from Two Pipelines . . . . . . . . . . . . . . . .. . .295
Figure 13-4. Mapping that Joins Two Branches of a Pipeline . . . . . . . . . . . . . . . . . . . . . .. . .297
Figure 13-5. Mapping that Joins Two Instances of the Same Source . . . . . . . . . . . . . . . . .. . .297
Figure 13-6. Preserving Transaction Boundaries when You Join Two Pipeline Branches . .. . .301
Figure 14-1. Session Properties for Flat File Lookups . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .321
Figure 14-2. Return Port in a Lookup Transformation . . . . . . . . . . . . . . . . . . . . . . . . . .. . .333
Figure 15-1. Building Lookup Caches Sequentially . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .340
Figure 15-2. Building Lookup Caches Concurrently . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .341
Figure 15-3. Mapping with a Dynamic Lookup Cache . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .346
Figure 15-4. Dynamic Lookup Transformation Ports Tab . . . . . . . . . . . . . . . . . . . . . . . .. . .347
Figure 15-5. Using Update Strategy Transformations with a Lookup Transformation . . . .. . .355
Figure 15-6. Slowly Changing Dimension Mapping with Dynamic Lookup Cache . . . . . .. . .360
Figure 16-1. Normalizer Transformation Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .374
Figure 16-2. Normalizer Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .375
Figure 16-3. Normalizer Transformation Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . .. . .376
Figure 16-4. Normalizer Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .377
Figure 16-5. COBOL Source Definition Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .381
Figure 16-6. Sales File VSAM Normalizer Transformation . . . . . . . . . . . . . . . . . . . . . . .. . .381
Figure 16-7. VSAM Normalizer Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .383
Figure 16-8. Normalizer Tab for a VSAM Normalizer Transformation . . . . . . . . . . . . . . .. . .384
Figure 16-9. Pipeline Normalizer Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .387
Figure 16-10. Pipeline Normalizer Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .387
Figure 16-11. Pipeline Normalizer Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .389
Figure 16-12. Normalizer Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .390
Figure 16-13. Grouping Repeated Columns on the Normalizer Tab . . . . . . . . . . . . . . . . .. . .391
Figure 16-14. Group-Level Column on the Normalizer Tab . . . . . . . . . . . . . . . . . . . . . .. . .393
Figure 16-15. Sales File COBOL Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .394
Figure 16-16. Multiple Record Types Routed to Different Targets . . . . . . . . . . . . . . . . . .. . .395
Figure 16-17. Router Transformation User-Defined Groups . . . . . . . . . . . . . . . . . . . . . .. . .396
Figure 16-18. COBOL Source with A Multiple-Occurring Group of Columns . . . . . . . . .. . .397
Figure 16-19. Generated Keys in Target Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .397
Figure 16-20. Generated Keys Mapped to Target Keys . . . . . . . . . . . . . . . . . . . . . . . . . .. . .398
Figure 17-1. Sample Mapping with a Rank Transformation . . . . . . . . . . . . . . . . . . . . . . .. . .402
Figure 18-1. Comparing Router and Filter Transformations . . . . . . . . . . . . . . . . . . . . . .. . .410
xxii List of Figures
- 23. Figure 18-2. Sample Router Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 411
Figure 18-3. Using a Router Transformation in a Mapping . . . . . . . . . . . . . . . . . . . . . . .. . 413
Figure 18-4. Specifying Group Filter Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 414
Figure 18-5. Router Transformation Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 416
Figure 18-6. Input Port Name and Corresponding Output Port Names . . . . . . . . . . . . . .. . 417
Figure 19-1. Connecting NEXTVAL to Two Target Tables in a Mapping . . . . . . . . . . . . .. . 424
Figure 19-2. Mapping with a Sequence Generator and an Expression Transformation . . . .. . 425
Figure 19-3. Connecting CURRVAL and NEXTVAL Ports to a Target . . . . . . . . . . . . . .. . 426
Figure 20-1. Sample Mapping with a Sorter Transformation . . . . . . . . . . . . . . . . . . . . . .. . 436
Figure 20-2. Sample Sorter Transformation Ports Configuration . . . . . . . . . . . . . . . . . . .. . 437
Figure 20-3. Sorter Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 439
Figure 21-1. Source Definition Connected to a Source Qualifier Transformation . . . . . . .. . 451
Figure 21-2. Joining Two Tables with One Source Qualifier Transformation . . . . . . . . . .. . 455
Figure 21-3. Creating a Relationship Between Two Tables . . . . . . . . . . . . . . . . . . . . . . . .. . 457
Figure 22-1. SQL Transformation Script Mode Ports . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 481
Figure 22-2. SQL Editor for an SQL Transformation Query . . . . . . . . . . . . . . . . . . . . . .. . 484
Figure 22-3. SQL Transformation Static Query Mode Ports . . . . . . . . . . . . . . . . . . . . . .. . 486
Figure 22-4. SQL Transformation Ports to Pass a Full Dynamic Query . . . . . . . . . . . . . .. . 487
Figure 22-5. SQL Transformation Properties Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 503
Figure 22-6. SQL Settings Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 505
Figure 22-7. SQL Transformation SQL Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 507
Figure 23-1. Dynamic Query Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 513
Figure 23-2. Dynamic Query Expression Transformation Ports . . . . . . . . . . . . . . . . . . . .. . 516
Figure 23-3. Dynamic Query SQL Transformation Ports tab: . . . . . . . . . . . . . . . . . . . . .. . 517
Figure 23-4. Dynamic Connection Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 519
Figure 23-5. Dynamic Query Example Expression Transformation Ports . . . . . . . . . . . . .. . 521
Figure 23-6. Dynamic Connection Example SQL Transformation Ports . . . . . . . . . . . . . .. . 523
Figure 24-1. Sample Mapping with a Stored Procedure Transformation . . . . . . . . . . . . . .. . 541
Figure 24-2. Expression Transformation Referencing a Stored Procedure Transformation .. . 542
Figure 24-3. Stored Procedure Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 548
Figure 25-1. Transaction Control Transformation Properties . . . . . . . . . . . . . . . . . . . . . .. . 557
Figure 25-2. Sample Transaction Control Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 559
Figure 25-3. Effective and Ineffective Transaction Control Transformations . . . . . . . . . . .. . 561
Figure 25-4. Transaction Control Transformation Effective for a Transformation . . . . . . .. . 561
Figure 25-5. Valid Mapping with Transaction Control Transformations . . . . . . . . . . . . . .. . 562
Figure 25-6. Invalid Mapping with Transaction Control Transformations . . . . . . . . . . . .. . 563
Figure 26-1. Union Transformation Groups Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 570
Figure 26-2. Union Transformation Group Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 571
Figure 26-3. Union Transformation Ports Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 571
Figure 26-4. Mapping with a Union Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 574
Figure 27-1. Specifying Operations for Individual Target Tables . . . . . . . . . . . . . . . . . . .. . 582
List of Figures xxiii
- 25. List of Tables
Table 1-1. Transformation Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . .. 2
Table 1-2. Multi-Group Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . .. 9
Table 1-3. Transformations Containing Expressions . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 11
Table 1-4. Variable Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 14
Table 1-5. System Default Values and Integration Service Behavior . . . . . . . . . . . . . . .. . .. . . 18
Table 1-6. Transformations Supporting User-Defined Default Values . . . . . . . . . . . . .. . .. . . 20
Table 1-7. Default Values for Input and Input/Output Ports . . . . . . . . . . . . . . . . . . .. . .. . . 22
Table 1-8. Supported Default Values for Output Ports . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 26
Table 1-9. Session Log Tracing Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 30
Table 3-1. Custom Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 64
Table 3-2. Transaction Boundary Handling with Custom Transformations . . . . . . . . .. . .. . . 69
Table 3-3. Module File Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 85
Table 3-4. UNIX Commands to Build the Shared Library. . . . . . . . . . . . . . . . . . . . . .. . .. . . 86
Table 4-1. Custom Transformation Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 91
Table 4-2. Custom Transformation Generated Functions . . . . . . . . . . . . . . . . . . . . . .. . .. . . 92
Table 4-3. Custom Transformation API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . 92
Table 4-4. Custom Transformation Array-Based API Functions . . . . . . . . . . . . . . . . .. . .. . . 94
Table 4-5. INFA_CT_MODULE Property IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 109
Table 4-6. INFA_CT_PROC_HANDLE Property IDs . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 110
Table 4-7. INFA_CT_TRANS_HANDLE Property IDs . . . . . . . . . . . . . . . . . . . . . . .. . .. . 111
Table 4-8. INFA_CT_INPUT_GROUP and INFA_CT_OUTPUT_GROUP
Handle Property IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Table 4-9. INFA_CT_INPUTPORT and INFA_CT_OUTPUTPORT_HANDLE
Handle Property IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 113
Table 4-10. Property Functions (MBCS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 115
Table 4-11. Property Functions (Unicode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 115
Table 4-12. Compatible Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 116
Table 4-13. Get Data Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 118
Table 4-14. Get Data Functions (Array-Based Mode) . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 133
Table 6-1. Differences Between COM and Informatica External Procedures . . . . . . . .. . .. . 148
Table 6-2. Visual C++ and Transformation Datatypes . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 171
Table 6-3. Visual Basic and Transformation Datatypes . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 171
Table 6-4. External Procedure Initialization Properties . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 180
Table 6-5. Descriptions of Parameter Access Functions. . . . . . . . . . . . . . . . . . . . . . . .. . .. . 183
Table 6-6. Member Variable of the External Procedure Base Class. . . . . . . . . . . . . . . .. . .. . 185
Table 8-1. HTTP Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 202
Table 8-2. HTTP Transformation Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 205
Table 8-3. GET Method Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 206
Table 8-4. POST Method Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 206
Table 8-5. SIMPLE POST Method Groups and Ports . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 207
Table 9-1. Mapping from PowerCenter Datatypes to Java Datatypes . . . . . . . . . . . . . .. . .. . 215
List of Tables xxv
- 26. Table 9-2. Java Transformation Properties . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .221
Table 11-1. Input and Output Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .254
Table 12-1. Enumerated Java Datatypes . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .274
Table 12-2. JExpression API Methods . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .276
Table 13-1. Joiner Transformation Properties . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .286
Table 13-2. Integration Service Behavior with Transformation Scopes for the
Joiner Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .300
Table 14-1. Differences Between Connected and Unconnected Lookups . ... . . .. . . .. . .. . .309
Table 14-2. Lookup Transformation Port Types . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .314
Table 14-3. Lookup Transformation Properties . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .316
Table 14-4. Session Properties for Flat File Lookups . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .322
Table 15-1. Lookup Caching Comparison . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .339
Table 15-2. Integration Service Handling of Persistent Caches . . . . . . . . ... . . .. . . .. . .. . .343
Table 15-3. NewLookupRow Values . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .348
Table 15-4. Dynamic Lookup Cache Behavior for Insert Row Type . . . . ... . . .. . . .. . .. . .357
Table 15-5. Dynamic Lookup Cache Behavior for Update Row Type . . . ... . . .. . . .. . .. . .358
Table 15-6. Location for Sharing Unnamed Cache . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .364
Table 15-7. Properties for Sharing Unnamed Cache . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .364
Table 15-8. Location for Sharing Named Cache . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .367
Table 15-9. Properties for Sharing Named Cache . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .367
Table 16-1. Normalizer Transformation Properties . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .376
Table 16-2. Normalizer Tab Columns . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .378
Table 16-3. Normalizer Tab for a VSAM Normalizer Transformation . . . ... . . .. . . .. . .. . .384
Table 16-4. Pipeline Normalizer Tab . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .390
Table 17-1. Rank Transformation Ports . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .404
Table 17-2. Rank Transformation Properties . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .407
Table 19-1. Sequence Generator Transformation Properties . . . . . . . . . . ... . . .. . . .. . .. . .427
Table 20-1. Column Sizes for Sorter Data Calculations . . . . . . . . . . . . . ... . . .. . . .. . .. . .440
Table 21-1. Conversion for Datetime Mapping Parameters and Variables ... . . .. . . .. . .. . .447
Table 21-2. Source Qualifier Transformation Properties . . . . . . . . . . . . . ... . . .. . . .. . .. . .449
Table 21-3. Locations for Entering Outer Join Syntax . . . . . . . . . . . . . . ... . . .. . . .. . .. . .463
Table 21-4. Syntax for Normal Joins in a Join Override . . . . . . . . . . . . . ... . . .. . . .. . .. . .463
Table 21-5. Syntax for Left Outer Joins in a Join Override . . . . . . . . . . . ... . . .. . . .. . .. . .465
Table 21-6. Syntax for Right Outer Joins in a Join Override . . . . . . . . . ... . . .. . . .. . .. . .467
Table 22-1. Full Database Connection Ports . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .491
Table 22-2. Native Connect String Syntax . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .491
Table 22-3. Output Rows By Query Statement - Query Mode . . . . . . . . ... . . .. . . .. . .. . .495
Table 22-4. NumRowsAffected Rows by Query Statement - Query Mode ... . . .. . . .. . .. . .495
Table 22-5. Output Rows by Query Statement - Query Mode . . . . . . . . ... . . .. . . .. . .. . .497
Table 22-6. SQL Transformation Connection Options . . . . . . . . . . . . . . ... . . .. . . .. . .. . .501
Table 22-7. SQL Transformation Properties . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .503
Table 22-8. SQL Settings Tab Attributes . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .505
Table 22-9. SQL Transformation Ports . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .507
Table 22-10. Standard SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . . ... . . .. . . .. . .. . .509
xxvi List of Tables
- 27. Table 24-1. Connected and Unconnected Stored Procedure Transformation Tasks . . . .. . .. . 527
Table 24-2. Setting Options for the Stored Procedure Transformation . . . . . . . . . . . .. . .. . 538
Table 27-1. Constants for Each Database Operation . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 577
Table 27-2. Specifying an Operation for All Rows . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 580
Table 27-3. Update Strategy Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . 581
List of Tables xxvii