Hard sources — not covered by free tools
Also parsed — certify what free tools miss
Runtimes
After migration
Parser-driven modernization of PowerCenter repository XML and IDMC CDI taskflows. Full lineage, automated conversion, validated parity.
PowerCenter mapping parsed into interactive lineage graph
One source, every target. Deterministic parsers read the estate and emit native code for the platform you pick — not PowerCenter mappings lifted into hosted PowerCenter.
Informatica estate → MigryX parser → native platforms
Deterministic parseAI where it helpsThe parser is deterministic: the same input produces the same output on every run. Every output is validated against the original, row by row, before go-live.
When PowerCenter 10.5.x extended support expires there are no further security patches or bug fixes, which turns an architecture decision into a compliance one. Programs of this size take longer than the time remaining.
Investment has moved to IDMC. That path means cloud lock-in and consumption pricing measured in IPUs, which is a different cost model than the perpetual licences most PowerCenter estates were budgeted against.
Reusable mapplets, session overrides, and parameter files encode rules that were never documented. Every quarter of delay adds mappings and removes the people who understand them.
An unconnected Lookup with a dynamic cache, called from an Expression and feeding conditional logic. Hand rewrites stall here because the call is a side effect rather than a data flow. MigryX parses it structurally.
-- Unconnected Lookup: LKP_CUSTOMER_TIER
-- Called via :LKP.LKP_CUSTOMER_TIER(CUST_ID)
-- Dynamic cache enabled
Source: CUSTOMER_DIM (Oracle)
Lookup Condition:
CUST_ID = IN_CUST_ID
Return Port: TIER_CODE
Default: 'UNKNOWN'
-- Expression port calling the lookup:
OUT_TIER = :LKP.LKP_CUSTOMER_TIER(CUST_ID)
OUT_DISCOUNT = IIF(OUT_TIER = 'GOLD', 0.15,
IIF(OUT_TIER = 'SILVER', 0.10, 0.0))
# Unconnected lookup → broadcast join
from pyspark.sql import functions as F
customer_tier = (
spark.read.table("customer_dim")
.select("cust_id", "tier_code")
)
df = (
df.join(F.broadcast(customer_tier), "cust_id", "left")
.withColumn("tier_code",
F.coalesce("tier_code", F.lit("UNKNOWN")))
.withColumn("discount",
F.when(F.col("tier_code") == "GOLD", 0.15)
.when(F.col("tier_code") == "SILVER", 0.10)
.otherwise(0.0))
)
Unconnected lookup semantics are preserved as a join, the dynamic cache becomes a broadcast, and the default value and nested IIF logic convert structurally rather than by hand.
Every PowerCenter transformation in your repository maps to a defined target equivalent, recorded in the lineage report.
| PowerCenter Component | Target Equivalent | Notes |
|---|---|---|
| Source / Target definition | Table read and write | Connection objects mapped to target connectors |
| Expression transformation | Projected columns and expressions | Port-level expressions and variable ports |
| Filter / Router | .filter() and branch outputs | Router groups become separate branches |
| Joiner transformation | .join() | Join type and master/detail order preserved |
| Connected Lookup | Left join on lookup condition | Cache settings mapped to join strategy |
| Unconnected Lookup | Broadcast join plus expression | Call sites resolved from Expression ports |
| Aggregator | .groupBy().agg() | Group-by ports and sorted-input handling |
| Sorter / Rank | .orderBy(), window functions | Rank becomes ROW_NUMBER or RANK |
| Update Strategy (DD_*) | MERGE or upsert writer | Insert, update, delete flags mapped |
| Sequence Generator | Identity or sequence | Persisted current value carried over |
| Normalizer | Explode or unpivot | Occurs-based multiple-occurring fields |
| Mapplet | Reusable module or function | Called once per mapping reference |
| Session / Workflow | Orchestrated task graph | Dependencies and parameter files preserved |
| IDMC CDI taskflow | Task graph in the target orchestrator | Taskflow steps and parameters parsed |
MigryX Data Matching compares PowerCenter session output against the new pipeline output, row by row and column by column, with configurable tolerance rules and mismatch drill-down.
See how Data Matching works →An XML export of the folders in scope, produced by the Repository Manager or pmrep. That export contains the mappings, mapplets, sessions, workflows, and parameter definitions needed for parsing. Direct repository database access is not required.
Both are covered as sources. PowerCenter is read from repository XML, and IDMC is read from exported CDI assets and taskflows. Customers moving off PowerCenter frequently evaluate both leaving Informatica entirely and moving to IDMC, so the same parsed inventory supports either decision.
DD_INSERT, DD_UPDATE, DD_DELETE and DD_REJECT flags are resolved into a MERGE or an equivalent upsert on the target, with the original row-level routing preserved so reject handling is not silently dropped.
Their contents are extracted and reported separately from the deterministic transformations, because embedded code carries assumptions the parser cannot verify. Those come with a review report rather than being converted silently.