PowerCenter repository XML parsed structurally. Mappings and workflows converted to Snowpark Python and Snowflake SQL. Tasks orchestrated with Snowflake Tasks or Airflow.
Upload a mapping, get converted code →No patches, no compliance coverage after that. Snowflake eliminates both the ETL middleware license and the on-premise warehouse it was writing to.
Expression logic converts to Snowpark Python that runs inside Snowflake's compute — no external Spark cluster, no separate infrastructure. Transformation logic stays close to the data.
PowerCenter Source Qualifier SQL overrides, filter conditions, and SQL transformations convert directly to Snowflake SQL views and stored procedures. The patterns are structurally similar — MigryX maps them without ambiguity.
The Normalizer — a transformation most teams rewrite by hand because it's hard to reason about. MigryX parses the occurs-depth and generates the exact LATERAL FLATTEN equivalent.
-- Normalizer Transformation: NRM_ORDER_LINES -- Input: ORDER_HEADER (1 row per order) -- Occurs: 5 (LINE_ITEM_1..LINE_ITEM_5) -- Generated Key: GK_LINE_SEQ Input Ports: ORDER_ID (pass-through) CUST_ID (pass-through) LINE_ITEM_1 (occurs) LINE_ITEM_2 (occurs) LINE_ITEM_3 (occurs) LINE_ITEM_4 (occurs) LINE_ITEM_5 (occurs) Output Ports: ORDER_ID, CUST_ID, LINE_ITEM (normalized), GK_LINE_SEQ (generated key, 1..N)
-- Normalizer → LATERAL FLATTEN
SELECT
oh.order_id,
oh.cust_id,
f.value::STRING AS line_item,
f.index + 1 AS gk_line_seq
FROM order_header oh,
LATERAL FLATTEN(
input => ARRAY_CONSTRUCT(
oh.line_item_1,
oh.line_item_2,
oh.line_item_3,
oh.line_item_4,
oh.line_item_5
)
) f
WHERE f.value IS NOT NULL;
Occurs-depth parsed from transformation definition. LATERAL FLATTEN + ARRAY_CONSTRUCT replaces the Normalizer with native Snowflake SQL. Generated key mapped to f.index + 1.
| PowerCenter Component | Snowflake Equivalent | Notes |
|---|---|---|
| Source Qualifier | Snowflake SQL SELECT | SQL override → Snowflake SQL view |
| Expression Transformation | Snowpark withColumn() / SQL UDF | 94 built-in functions mapped |
| Aggregator | GROUP BY / Snowpark group_by() | All aggregate functions supported |
| Joiner | Snowflake JOIN | All join types preserved |
| Lookup (connected + unconnected) | LEFT JOIN / Snowpark lookup | Caching → result caching or CTE |
| Router | CASE / multiple CTEs | Per-group output as separate queries |
| Normalizer | LATERAL FLATTEN | Occurs-depth mapped to ARRAY_CONSTRUCT |
| Update Strategy | Snowflake MERGE INTO | DD flags → merge predicates |
| Mapplet | Snowpark function / SQL UDF | Importable, reusable |
| Workflow | Snowflake Tasks / Airflow DAG | Dependencies and scheduling preserved |
| Session config | Warehouse size + task params | Partition count → warehouse scaling |
| Target (relational) | Snowflake table | Schema, constraints mapped |
Data Matching compares PowerCenter output against Snowflake output — row by row, column by column. Tolerance rules handle precision differences between Oracle/SQL Server numeric types and Snowflake NUMBER.
See how Data Matching works →PowerCenter repository XML is parsed once. The conversion engine generates Snowpark Python and Snowflake SQL using the same structural analysis, the same lineage, and the same validation framework. Target-specific output — same proven methodology.
Upload a PowerCenter XML export. Get parsed lineage, Snowpark code, and a validation report.