Parser-driven migration of PowerCenter repository XML and IDMC CDI taskflows. Full lineage, automated conversion, validated parity.
PowerCenter mapping parsed into interactive lineage graph
PowerCenter 10.5.x extended support expires in eight months. After that, no security patches, no bug fixes, no compliance coverage. Decisions are being made now.
Informatica is now Salesforce-owned. The on-premise PowerCenter roadmap is effectively frozen. IDMC is the push, but IDMC means cloud lock-in and per-IPU pricing that scales with your data.
Every quarter you wait, more mappings get written, more sessions get configured, more institutional knowledge walks out the door. The codebase only grows.
An unconnected Lookup with dynamic cache and conditional return — the transformation pattern that breaks manual rewrites. MigryX parses it structurally.
-- Unconnected Lookup: LKP_CUSTOMER_TIER
-- Called from Expression via :LKP.LKP_CUSTOMER_TIER(CUST_ID)
-- Dynamic cache enabled, insert else update
Source: CUSTOMER_DIM (Oracle)
Lookup Condition:
CUST_ID = IN_CUST_ID
Return Port: TIER_CODE
Default: 'UNKNOWN'
-- Expression calling unconnected 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
# Cache lookup table as broadcast
customer_tier_lkp = (
spark.read.table("customer_dim")
.select("cust_id", "tier_code")
)
# Join with broadcast (replaces dynamic cache)
df = df.join(
F.broadcast(customer_tier_lkp),
df.cust_id == customer_tier_lkp.cust_id,
"left"
).withColumn(
"tier_code",
F.coalesce(F.col("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 preserved. Dynamic cache mapped to broadcast join. Default value and conditional logic converted structurally.
Every PowerCenter artifact has a defined target equivalent. No manual rewrite, no guesswork.
| PowerCenter Component | Target Equivalent | Notes |
|---|---|---|
| Source Qualifier (relational) | spark.read.jdbc() with pushdown SQL | SQL override and filter conditions preserved |
| Expression Transformation | withColumn() / PySpark expressions | 94 built-in functions mapped with null-handling |
| Aggregator Transformation | groupBy().agg() | Group By ports mapped to keys; aggregates to functions |
| Joiner Transformation | DataFrame.join() | All join types: normal, master outer, detail outer, full |
| Lookup (connected + unconnected) | Broadcast join or Delta Lake lookup | Caching mapped to broadcast; semantics preserved |
| Router Transformation | DataFrame.filter() per group | Multiple output groups as separate DataFrames |
| Update Strategy | Delta Lake MERGE INTO | DD_INSERT/UPDATE/DELETE flags to merge predicates |
| SCD Wizard (Type 2) | Delta Lake MERGE INTO | Effective/expiry dates; time travel replaces snapshots |
| Mapplet | Python function / PySpark module | Input/output groups to function parameters |
| Reusable Transformation | Importable Python module | Shared logic centralized, versioned, unit-testable |
| Workflow | Databricks Workflow / Airflow DAG | Task dependencies, failure handling preserved |
| Session (with partition config) | Spark cluster config + task settings | Partition count, commit interval to Spark config |
MigryX Data Matching compares PowerCenter output against the new pipeline output — row by row, column by column. Configurable tolerance rules, mismatch drill-down, and audit-ready reports.
See how Data Matching works →A major financial services firm used MigryX to migrate 1,800 PowerCenter mappings to PySpark on Databricks — including 340 SCD Type 2 mappings converted to Delta Lake MERGE operations. End-of-day NAV calculation dropped from 3.5 hours to under 30 minutes.
Read the full case study →Upload a PowerCenter mapping export or IDMC CDI task. Get parsed lineage, converted code, and a validation report.
Explore by target platform