Data and analytics, move by move.
We've moved warehouses, rebuilt pipelines that ran on a scheduler nobody owned, and fixed dashboards that disagreed with finance. The reports kept running the whole time.
- Apache Airflow 2 to Airflow 3upgrade · delivered
- Informatica PowerCenter to IDMC or dbtmigration · delivered
- Power BI Premium P SKUs to Microsoft Fabric F SKUsmigration · delivered
- Tableau to Power BImigration · delivered
- Teradata, Netezza or Hadoop to Snowflakemigration · delivered
- Unity Catalog vs Hive metastore on Databricks, and how to movemigration · delivered
Apache Airflow 2 to Airflow 3
Told without the client's name or anything that could identify them.
A retailer's data engineering team was still running self-managed Airflow 2 after its end of life on 22 April 2026. Custom operators opened SQLAlchemy sessions against the metadata database. Old DAGs still used SubDAGs and execution_date, and CI pipelines triggered runs through /api/v1. We got the cluster onto the latest 2.x release and ran Ruff's AIR rules, which turned the work into a list. Custom code moved onto the Airflow Python client with API tokens. DAGs then moved in batches to a parallel Airflow 3 environment. For each batch we paused the schedules on the old side and checked the catchup and cron timetable changes. Once the last batch checked out, the Airflow 2 environment was retired.
what the client got- The scheduler runs a supported Airflow 3 releaseWe got production DAGs onto Airflow 3. The api-server and dag-processor run as separate services, and they're defined as code with the auth and plugin configuration.
- Task code no longer touches the metadata databaseWe moved custom operators and callbacks onto the Airflow Python client with API tokens, as Airflow 3 requires. None of them opens a SQLAlchemy session any more.
- No job ran twice or got skipped at cut-overWe checked every batch against the catchup_by_default change and the new CronTriggerTimetable default. Once a batch was live on 3, its Airflow 2 schedules got paused.
All 6 in data and analytics
Read any of them and you get the story, the before-and-after architecture, the plan phase by phase and the results.
Apache Airflow 2 to Airflow 3
Upgrading self-managed Apache Airflow 2, now past end of life, to Airflow 3, and fixing removed features, auth and scheduling changes before DAGs move.
read the case studyInformatica PowerCenter to IDMC or dbt
Moving PowerCenter mappings and workflows to Informatica IDMC Cloud Data Integration or to dbt on the warehouse, decided mapping by mapping.
read the case studyPower BI Premium P SKUs to Microsoft Fabric F SKUs
Moving Power BI Premium per-capacity P SKUs to Microsoft Fabric F SKUs before the agreement ends, sized from real load and reassigned in validated batches.
read the case studyTableau to Power BI
Moving Tableau workbooks to Power BI semantic models, scoped by what people open, with row-level security and numbers that match before anyone switches.
read the case studyTeradata, Netezza or Hadoop to Snowflake
Moving a Teradata, Netezza or Hadoop warehouse to Snowflake, with converted code, reconciled data and a cost model that holds up after cut-over.
read the case studyUnity Catalog vs Hive metastore on Databricks, and how to move
We move Databricks workspaces off the Hive metastore, DBFS mounts and table ACLs and onto Unity Catalog, ahead of new workspaces dropping legacy features.
read the case studyRisks that keep coming up
One risk from each of these moves, and the case study that shows how we handled it when it hit.
-
Silent schedule changes
catchup_by_default is now False, and bare cron strings now use CronTriggerTimetable unless create_cron_data_intervals is set. DAGs that depend on data_interval values can run with different dates.
-
Logic with no SQL equivalent
Java transformations, stored procedure calls, dynamic lookup caches and update strategies with complex conditions need redesigning if they move to dbt. A line-by-line translation won't work.
-
Undersizing below F64
A smaller F SKU looks cheaper until every Free-license viewer needs a Pro licence. Viewer counts go into the sizing decision from the start.
-
LOD and table calculations
Tableau's FIXED, INCLUDE and EXCLUDE expressions and table calculations have no one-to-one DAX form. Naive translation gives numbers that are close but wrong.
-
Quiet semantic differences
Teradata compares strings case-insensitively by default and SET tables silently drop duplicate rows. Snowflake does neither. Converted SQL can run cleanly and still return different numbers.
-
UCX is a Labs project
UCX comes from Databricks Labs without formal support or SLAs. It does most of the inventory and table work well, but plans can't assume it covers everything.
Platforms and services across these moves
Ordered by how often they appear in this area's case studies.
01Is staying on Airflow 2 a real risk?
For a self-managed install, yes. Airflow 2 reached end of life on 22 April 2026, so security fixes have stopped. Managed services set their own dates, which we check for your provider.
02Is PowerCenter going out of support?
It depends on your version. Informatica publishes end-of-support dates per version in its support portal. We look yours up before setting the timeline.
03Do Pro or Premium Per User licences change?
No. Pro, PPU and embedded EM and A SKUs aren't part of this retirement. Only per-capacity P SKUs are.
04Do we need Fabric capacity, or is Power BI Pro enough?
Usually it comes down to viewer count and data size. Pro works per user. On F64 or larger, someone with a Free license can read content in those workspaces. For a large audience that changes the math.
05Should we go to Snowflake or Databricks?
It depends on the workload. A SQL-heavy warehouse with lots of BI users maps closely to Snowflake. If the Hadoop side is mostly Spark, streaming or ML, Databricks may fit better, and some companies run both. We look at the query mix before we recommend either.
More case studies by area
The same approach, applied to other parts of the estate.
79f45751 - 01Book a 30-minute working sessionsenior engineer
- 02Talk to an engineer about your setupreply within 24 hours
- 03See how similar projects wentcase studies
Facing one of these moves?
Tell us what you're on now and where you need to be. We'll come back with how we'd run the move.
- The platform and the version you're on
- Where you need to get to, and by when
- What's custom: rules, plugins, integrations
- Any audit finding or deadline driving it