Transformer stages, Lookup stages, and job sequences parsed from DSX (.dsx) and ISX (.isx) exports. Converted to PySpark notebooks on Databricks with Delta Lake storage and Workflows orchestration. Full lineage, validated parity.
Upload a job, get converted code →DataStage parallel jobs already think in partitions, hash keys, and sort stages. PySpark on Databricks distributes the same logic across Spark executors with no manual repartitioning. What ran on one parallel engine now runs across a cluster.
Stage variables, derivations, and nested IF/THEN logic in Transformer stages become withColumn() calls with clear naming. No more reverse-engineering a Transformer expression buried inside a .dsx file.
DataStage Director sequences chain jobs with conditional logic, waits, and error handlers. Databricks Workflows handle the same DAG patterns with native retry, parameterized runs, and failure alerting built in.
A Transformer stage with stage variables and derived outputs — converted to PySpark DataFrame operations on Databricks. Partition and sort logic preserved.
-- Parallel Job: Customer_Risk_Score -- Source: DB2_ACCOUNTS (DB2 connector) -- Transformer stage: -- sv_age = DateDiff(CurrentDate(), -- lnk_acct.OPEN_DATE, "yy") -- sv_balance = lnk_acct.BALANCE -- out.RISK = If sv_age < 2 And -- sv_balance > 50000 Then "HIGH" -- Else If sv_age < 5 Then "MEDIUM" -- Else "LOW" -- Lookup: REGION_REF (reference link) -- Target: RISK_SCORED (dataset)
# Transformer → PySpark on Databricks
from pyspark.sql import functions as F
df = spark.read.table("db2_accounts")
ref = spark.read.table("region_ref")
# Stage variables as columns
df = df.withColumn("sv_age",
F.floor(F.datediff(
F.current_date(), F.col("open_date")
) / 365))
df = df.join(F.broadcast(ref),
df.region_id == ref.region_id, "left")
df = df.withColumn("risk",
F.when((F.col("sv_age") < 2) &
(F.col("balance") > 50000), "HIGH")
.when(F.col("sv_age") < 5, "MEDIUM")
.otherwise("LOW"))
df.write.format("delta").mode("overwrite") \
.saveAsTable("risk_scored")
Stage variables become named columns. Lookup stages become broadcast joins. Derivations become withColumn() chains. Output writes to Delta Lake with ACID guarantees.
| DataStage Component | Databricks Equivalent | Notes |
|---|---|---|
| Parallel Job | Databricks Notebook / Job | Runnable PySpark notebook |
| Transformer stage | .withColumn() chains | Stage variables, derivations, conditionals |
| Lookup stage | broadcast join | Reference link semantics preserved |
| Sort stage | .orderBy() | Sort keys and direction preserved |
| Aggregator stage | .groupBy().agg() | All aggregate functions mapped |
| Join stage | .join() all types | Inner, left, right, full outer |
| Filter / Funnel | .filter() / .where() | Predicate expressions preserved |
| Copy stage | Multi-output writes | Fan-out to multiple Delta tables |
| Job Sequence | Databricks Workflow | DAG with conditional branching |
| Shared Container | Reusable notebook module | Parameterized, importable |
| DB2 / Oracle connector | spark.read.jdbc() | JDBC sources preserved |
| Dataset / File stage | Delta Lake table | ACID writes, schema enforcement |
Data Matching compares DataStage production output against Databricks output — row by row, column by column. Mismatches are flagged with column-level evidence before go-live.
See how Data Matching works →Parallel jobs with Transformer stages, Lookup links, and nested sequences converted to PySpark notebooks on Databricks. Stage variables mapped to named columns. Job sequences converted to Databricks Workflows with conditional branching. All outputs validated with Data Matching before decommission.
Read the case study →Upload a DSX or ISX export. Get parsed lineage, PySpark code for Databricks, and a validation report.