マッピングでのトランザクション制御トランスフォーメーションの使用
トランザクション制御トランスフォーメーションはトランザクションジェネレータです。トランザクション制御トランスフォーメーションは、マッピングでトランザクション境界を定義および再定義します。また、先行するアクティブソースまたはトランザクションジェネレータから渡されるトランザクション境界を削除したり、新しいトランザクション境界を後続に渡したりします。
Transaction Controlトランスフォーメーションは、マッピング内の後続のトランスフォーメーションおよびターゲットに対して有効な場合と無効な場合があります。受け取ったトランザクション境界を削除するトランスフォーメーションをTransaction Controlトランスフォーメーションの後に配置した場合、Transaction Controlトランスフォーメーションは後続のトランスフォーメーションまたはターゲットに対して無効になります。トランザクション境界を削除するものには、以下のアクティブソースおよびトランスフォーメーションが含まれます。
- •トランスフォーメーション範囲がすべての入力レベルのAggregatorトランスフォーメーション
- •トランスフォーメーション範囲がすべての入力レベルのJavaトランスフォーメーション
- •トランスフォーメーション範囲がすべての入力レベルのJoinerトランスフォーメーション
- •トランスフォーメーション範囲がすべての入力レベルのRankトランスフォーメーション
- •トランスフォーメーション範囲がすべての入力レベルのSorterトランスフォーメーション
- •保存済みクエリまたはユーザー入力クエリを使用する、トランスフォーメーション範囲がすべての入力レベルのSQLトランスフォーメーション
- •トランザクション制御トランスフォーメーション
- •複数のアップストリームトランザクション制御点に接続されている、複数の入力グループを持つ任意のトランスフォーメーション
トランザクション制御トランスフォーメーションは、ターゲットに対して無効であっても、後続のトランスフォーメーションに対しては有効である場合があります。トランスフォーメーション範囲が「トランザクション」レベルの後続のトランスフォーメーションでは、先行するトランザクション制御トランスフォーメーションによって定義されたトランザクション境界を使用することができます。
以下の図に示した有効なマッピングでは、トランザクション制御トランスフォーメーションはソータートランスフォーメーションに対しては有効ですが、ターゲットに対しては無効です。
この例では、TransactionControl_1はターゲットに対しては無効ですが、ソータートランスフォーメーションに対しては有効です。ソータートランスフォーメーションのトランスフォーメーション範囲は「トランザクション」です。TransactionControl_1で定義されたトランザクション境界が使用されます。アグリゲータトランスフォーメーションのトランスフォーメーション範囲は「すべての入力」です。TransactionControl_1で定義されたトランザクション境界が削除されます。トランザクション制御トランスフォーメーションTransactionControl_2は、ターゲットに対する有効なトランザクション制御トランスフォーメーションです。
複数のターゲットを持つトランザクション制御マッピングの例
複数のターゲットを持つマッピングでは、トランザクション制御トランスフォーメーションは、ターゲットによって有効な場合と無効な場合があります。各ターゲットが有効なTransaction Controlトランスフォーメーションに接続されている場合、そのマッピングは有効です。マッピング内のターゲットのうち1つでも有効なTransaction Controlトランスフォーメーションに接続されていないものがある場合、そのマッピングは無効です。
以下の図に、有効と無効の両方のトランザクション制御トランスフォーメーションを含む、有効なマッピングを示します。
データ統合はTransactionControl_1を処理し、トランザクション制御式を評価して、トランザクション境界を作成します。マッピングには、TransactionControl_1とTarget_1の間にトランザクション境界を削除するトランスフォーメーションは含まれず、TransactionControl_1はTarget_1に対して有効になります。データ統合は、Target_1に対してTransactionControl_1が定義したトランザクション境界を使用します。
しかし、マッピングにはTransactionControl_1とTarget_2の間にトランザクション境界を削除するトランスフォーメーションが含まれているため、TransactionControl_1はTarget_2に対しては無効になります。データ統合でトランスフォーメーション範囲を[すべての入力]に設定してアグリゲータトランスフォーメーションを処理すると、TransactionControl_1で定義されたトランザクション境界が削除され、オープントランザクション内のすべての行が出力されます。次にデータ統合は、TransactionControl_2を評価し、トランザクション境界を作成して、そのトランザクション境界をTarget_2に対して使用します。
TransactionControl_1でロールバックが発生した場合、データ統合はTarget_1からの行だけをロールバックします。Target_2からの行はロールバックしません。
以下の図に、有効と無効の両方のトランザクション制御トランスフォーメーションを含む、無効なマッピングを示します。
マップレットmplt_TransactionControlには、トランザクション制御トランスフォーメーションが含まれています。これはTarget_1およびTarget_2に対して無効です。Aggregator_1のトランスフォーメーション範囲は「すべての入力」です。これはTarget_1に対するアクティブソースです。Aggregator_2のトランスフォーメーション範囲は「すべての入力」です。これはTarget_2に対するアクティブソースです。TransactionControl_2はTarget_2に対して有効です。
Target_1が有効なトランザクション制御トランスフォーメーションに接続していないため、このマッピングは無効です。