"Do the numbers match?"
That is one of the first questions business teams ask after an Alteryx migration.
It sounds simple, but comparing the old Alteryx workflow with a new PySpark workflow can become difficult when both systems read changing production data.
A source table may receive new records between runs. Existing records may be updated. As a result, a workflow can produce different results when run at different times, even when the migration logic is correct.
So how can a team tell whether the migration caused a difference or whether the source data changed?
During a production migration of 48 Alteryx workflows and macros to PySpark, the migration team used a snapshot-pin-and-replay approach to create a controlled basis for parity testing.
Picture a simple case. The existing Alteryx workflow runs at 6:00 AM. The migrated PySpark workflow runs at 6:20 AM. In those 20 minutes, new records may arrive, existing records may change, and upstream systems may finish more processing. The two workflows are no longer reading the same point in time.
If the outputs differ, that does not automatically mean the PySpark workflow is wrong. It might be, or the data may have simply moved. Without a controlled input, you cannot tell which.
The risk grows with scale. In the migration described here, source inputs ran past 400 million rows, and one workflow contained 1,157 tools. At that size, a casual side-by-side comparison explains very little, and a controlled process is the only practical way to learn why outputs differ.
What this means for you: If your plan is “run both and compare the totals,” you will spend weeks chasing differences that are not defects.
The snapshot-pin method creates a fixed source-data baseline for migration testing. Instead of letting each platform query changing production data on its own, the team captures the data once and reuses it. It works in four steps:
Without this, testing tends to become a loop of run, compare, investigate, guess, and rerun, where nobody can be sure a fix worked. With it, the loop is: same input, run both, compare, investigate, correct, replay. The goal is not to make the numbers match once. It is to understand why they match, or why they do not.
What this means for you: Build the snapshot step into your plan before you convert the first workflow.
Not every difference is a defect. A useful validation process sorts each one into a category, so that every difference has a reason and an owner.
| Kind of Difference | What It Looks Like | What to Do |
|---|---|---|
| Migration or semantic difference | The PySpark workflow reproduces the logic differently, for example, in NULL handling, timestamps, strings, filters, decimals, deduplication, or macros | Investigate and fix it when it affects the intended results |
| Source-data or freshness difference | A new transaction, updated record, or changed source value alters the output between runs | Confirm it against the snapshot, and do not treat it as a defect |
| Accepted platform residual | A small difference remains because of platform-specific behavior | Measure it, understand it, document it, review it, and accept it where appropriate |
The third row deserves care. Residuals should never simply be ignored. In this project, the documented accepted residuals were below 0.04% in the measured areas, and we categorized every difference as freshness-related or an accepted platform residual.
What this means for you: “Close enough” is not a finding. A documented, reviewed residual is.
The two platforms handle some details differently, and these are the places to look first:
These are not reasons to avoid migrating. They are the reasons validation needs to be deliberate, as our automated ETL testing and Python ETL automation articles explain.
The snapshot-based approach supported parity validation across the production Alteryx workflows and macros included in the migration. It achieved one-to-one parity on production outputs within the accepted residual bands and separated source-data freshness from platform-specific differences.
It also became a reusable asset. Instead of treating validation as a single comparison, the team retained the snapshots and replayed them whenever a workflow difference needed investigating. That matters most when a migration covers many workflows, or when the same behavior has to be tested more than once. You can read the wider story in our Alteryx to PySpark migration case study.
A practical process covers more than the final output numbers:
If reports sit downstream of the workflows, validate them too, as our reports conversion service does.
This section is planning guidance, not a statement of DataTerrain’s authorization status or government work. Regulated and public sector teams are often asked to show evidence, not just assurance, before a migrated process goes live. A snapshot-based approach helps because the evidence is repeatable and documented:
What this means for you: Sign-off is easier when the evidence was designed in from the start.
Data migration validation should be planned alongside conversion, not left for the final test stage. Planned early, a snapshot-based approach lets a team create repeatable parity tests, investigate differences faster, separate source-data changes from migration issues, document accepted residuals, and build the evidence for production sign-off.
The same discipline applies whichever platform you are moving to, whether that is Spark on AWS (see our Alteryx to AWS Glue article), a lakehouse (see our Databricks migration services and cloud migration to Databricks pages), or a warehouse (see our data warehouse to Databricks article). For Microsoft targets, our Microsoft Fabric migration services page applies, and our ETL migration solution overview covers the broader approach.
The costly mistake is finding out at the final test stage that nobody can explain why the numbers differ. DataTerrain brings 17+ years and 400+ clients in data and reporting modernization, with automated workflow inventory, conversion support, and validation planned alongside conversion from the first week.
Request a free ETL migration assessment
Alteryx vs AWS Glue | Alteryx vs Databricks | Alteryx ETL Best Practices | Alteryx to Microsoft Fabric Migration | Microsoft Fabric Data Pipeline Migration | Traditional vs Modern ETL