In this article
Key takeaways
- A data warehouse to Databricks migration has six steps: assess, design the target, convert code, move data, reconcile, and run in parallel before cutover. Teams that budget only for code conversion run out of time in the last two.
- Lakebridge, Databricks’ free migration toolkit, profiles the source, scores code complexity, transpiles SQL and compares data. It does not repoint BI, run user acceptance testing or decide what to retire. People still do that work.
- Retire before you convert. Usage analysis routinely finds tables, reports and jobs nobody uses, and every one you drop is one less thing to convert, test and reconcile.
- Reconcile in layers, from row counts up to the KPIs on the CFO’s dashboard. Matching row counts prove very little on their own.
- From September 30, 2026, new Databricks workspaces are Unity Catalog only. Design governance in from the first wave, because adding it after cutover is much harder.
What a data warehouse to Databricks migration actually involves
A data warehouse to Databricks migration moves tables, history, SQL and procedural code, ETL pipelines, security rules and BI connections from a legacy warehouse such as Teradata, Oracle, SQL Server or Netezza onto the Databricks lakehouse. It is done in waves: assess, design, convert, load, reconcile, run in parallel, then cut over and decommission the old system.
It is tempting to describe the project as “moving the data”. The data is usually the most predictable part. A mature enterprise warehouse also holds twenty years of business logic, written into stored procedures, BTEQ or PL/SQL scripts, ETL mappings, views on views, scheduler chains and report definitions, and nobody has a complete map of it. A migration is the job of finding that logic, deciding what still matters, moving it, and proving that the new platform gives the same answers as the old one.
That is why the best predictor of effort is not data volume. It is the amount of procedural code, the number of downstream consumers, and how strictly the business needs numbers to match. A 200 TB warehouse with clean, set-based SQL can be easier to move than a 5 TB one held together by a thousand scripts.
in the runbook below, from inventory to decommissioning, with governance and cost controls running through all of them
Bonami migration practicethat the Lakebridge Analyzer can inventory, from Teradata and Oracle to SSIS, DataStage and SAS
Lakebridge documentation, Oct 2026after which new Databricks workspaces have no legacy Hive metastore or DBFS root access
Databricks documentationWhy teams migrate to Databricks now, and when they should not
Three things changed in 2025 and 2026 that make a warehouse migration easier to justify and to plan.
Warehouse features caught up
Databricks SQL stored procedures and SQL scripting are generally available, temporary tables arrived in 2026, and multi-statement transactions are in public preview. The old objection, “it can’t run our procedural workloads”, now needs checking case by case rather than assuming.
Migration tooling is free
Lakebridge launched in June 2025, built on technology Databricks acquired with BladeBridge in February 2025. Profiling, analysis, transpilation and reconciliation are free for Databricks customers and partners.
Governance is the default
New workspaces are Unity Catalog only from September 30, 2026. Every migration now lands in one governed catalog with lineage, which is often the real business case in regulated industries.
When a migration is the wrong answerIf the warehouse is stable, its licence or hardware is paid for several more years, it serves only classic BI and nobody needs machine learning, streaming or open table formats, a migration may cost more than it saves. The same is true if the real problem is data quality or ownership, because those problems will move with the data. Platform choice comes first; our Databricks vs Snowflake vs Microsoft Fabric comparison covers that decision.
The migration runbook at a glance
A good data migration plan has steps that overlap. Code conversion for wave 2 starts while wave 1 is reconciling, and the parallel run starts long before conversion is finished. The chart shows the shape of a mid-sized program. It illustrates how the steps overlap and is not a benchmark for your timeline.
Illustrative shape, not a benchmark. The real timeline depends on code volume, the share that converts automatically, and how long the business needs both systems side by side.
Assess
Inventory every object, job and consumer, score complexity, and decide what to retire, move as is or redesign.
Design the target
Catalogs and schemas, medallion layers, clustering, compute, security mapping and cost guardrails.
Convert code
Transpile DDL, SQL and procedures, then review, test and refactor what the tools could not handle.
Move the data
Bulk-load history, then keep the target current with incremental loads or change data capture until cutover.
Reconcile
Prove the target matches, layer by layer, from schema to the business KPIs.
Parallel run and cutover
Run both platforms side by side through real business cycles, switch consumers wave by wave, keep a rollback path, then decommission.
Step 1: Assess the warehouse before you touch any code
Assessment answers three questions: what exists, what is actually used, and how hard each piece will be to move. Skipping it is the most expensive mistake in data migration, because every unused object you carry forward has to be converted, tested and reconciled for nothing.
What exists
Databases, schemas, tables and views with sizes and growth; stored procedures, macros and functions; scripts (BTEQ, PL/SQL, T-SQL); ETL mappings and scheduler chains; users, roles and grants.
What is used
Query logs show which tables and reports are queried, by whom and how often. Lineage shows what feeds what. Together they give you the retire list, and on most mature warehouses it is longer than people expect.
What kind of work
Batch ELT, interactive BI, ad hoc analysis, data science extracts, operational feeds and regulatory reporting each have different latency, concurrency and accuracy needs, and should migrate in different waves.
How hard to move
Score each object by procedural logic, dialect-specific features, dependencies and how critical it is to the business. The score drives wave planning and the estimate.
What Lakebridge automates in assessment
Lakebridge has two assessment tools. The Profiler (experimental) connects to the source system and collects workload metadata from Synapse, Teradata, Snowflake, SQL Server, Oracle, BigQuery and Redshift. The Analyzer reads exported source code, inventories it and produces a complexity report. It covers 31 technologies, including Teradata, Oracle, SQL Server, Netezza, Greenplum, Vertica, DB2, Hive, Impala, SSIS, DataStage, Talend, SAS and Alteryx.
# install the Lakebridge extension (needs the Databricks CLI)
databricks labs install lakebridge
# 1 · analyze exported source code into a complexity report
databricks labs lakebridge analyze \
--source-directory ./edw_export/sql \
--report-file ./reports/teradata_analysis.xlsx \
--source-tech Teradata
# 2 · transpile a folder of Teradata SQL to Databricks SQL
databricks labs lakebridge install-transpile
databricks labs lakebridge transpile \
--source-dialect teradata \
--input-source ./edw_export/sql \
--output-folder ./converted
# 3 · compare source and target once data has landed
databricks labs lakebridge configure-reconcile
databricks labs lakebridge reconcileDecide the fate of every objectTag each object with one of four outcomes before conversion starts: retire (unused or duplicated), move as is (set-based SQL that converts cleanly), redesign (logic better rebuilt as a pipeline) or keep outside (an operational store that never belonged in the warehouse). The tags become your wave plan.
Step 2: Design the target platform, not a copy of the old one
A lakehouse does not need the indexes, distribution keys and partition schemes a legacy warehouse used to get its performance. Copying them one to one is one of the most common ways to end up with a slower, more expensive platform. Map each legacy concept to the Databricks feature built for the same job.
| In the legacy warehouse | On Databricks | Design note |
|---|---|---|
| Databases and schemasplus roles and grants | Unity Catalog catalogs, schemas and three-level names | Group by domain and environment. Map roles to account-level groups, and make grants part of the deployment rather than manual clicks. |
| Primary index, distribution key, partitions | Liquid clustering | Databricks recommends liquid clustering for all new tables. It replaces partitioning and Z-ordering, and CLUSTER BY AUTO lets the platform choose keys. |
| Staging, integration and mart layers | Bronze, silver and gold (medallion) layers | Keep raw data immutable in bronze so reconciliation and reprocessing are always possible. Gold tables serve BI. |
| Warehouse compute | SQL warehouses (serverless or classic) with Photon | Size by workload class, not by the old appliance. Separate BI, ELT and ad hoc compute so they do not compete. |
| Statistics, vacuum and maintenance jobs | Predictive optimization | Runs OPTIMIZE, VACUUM and ANALYZE automatically on Unity Catalog managed tables. |
| ETL tools and scheduler | Lakeflow pipelines and Databricks Workflows | Declarative pipelines for the medallion flow; Workflows replace SQL Agent, cron and scheduler chains. |
| Row and column security, masking | Unity Catalog row filters and column masks | Re-implement and test them as code. Security parity is a go-live criterion, not a later task. |
Two design decisions are worth settling early because they are expensive to change later: the catalog layout and naming convention, and the cost guardrails (budgets, tags, auto-stop and per-workload compute policies). The second one matters more than teams expect. A migration replaces a fixed-capacity appliance with elastic, usage-billed compute, and during the parallel run you pay for both. For the architecture side of this decision, see our data engineering services.
Step 3: Convert SQL, procedures and ETL
Code conversion is where Lakebridge does the most work. It has three converters, each suited to different sources:
| Converter | How it works | Sources (per Lakebridge docs) |
|---|---|---|
| BladeBridge | Deterministic, rule-based | Teradata, Oracle, SQL Server, Synapse, Netezza; Redshift experimental. Also DataStage and, experimentally, SSIS. |
| Morpheus | Deterministic, grammar-based | SQL Server, Synapse and Snowflake, with experimental dbt support. |
| Switch | LLM-based, experimental | Most SQL dialects, plus Airflow, Python and Scala. |
Here is a typical conversion: a Teradata table and a “latest order per customer” query held in a volatile table, and what they become on Databricks.
-- primary index drives data distribution
CREATE MULTISET TABLE sales.fact_orders,
NO FALLBACK, NO JOURNAL (
order_id BIGINT NOT NULL,
cust_id INTEGER,
order_ts TIMESTAMP(0),
discount_amt DECIMAL(18,2)
) PRIMARY INDEX (cust_id);
CREATE VOLATILE TABLE last_order AS (
SEL cust_id, order_id, order_ts,
ZEROIFNULL(discount_amt) AS discount_amt
FROM sales.fact_orders
QUALIFY ROW_NUMBER() OVER (
PARTITION BY cust_id ORDER BY order_ts DESC) = 1
) WITH DATA ON COMMIT PRESERVE ROWS;-- liquid clustering replaces the primary index
CREATE TABLE main.sales.fact_orders (
order_id BIGINT NOT NULL,
cust_id INT,
order_ts TIMESTAMP,
discount_amt DECIMAL(18,2)
) CLUSTER BY (cust_id);
-- volatile table -> temporary view
-- (or a temp table on DBR 18.1+)
CREATE OR REPLACE TEMPORARY VIEW last_order AS
SELECT cust_id, order_id, order_ts,
COALESCE(discount_amt, 0) AS discount_amt
FROM main.sales.fact_orders
QUALIFY ROW_NUMBER() OVER (
PARTITION BY cust_id ORDER BY order_ts DESC) = 1;Most set-based SQL converts like this, with small, predictable changes: SEL becomes SELECT, ZEROIFNULL becomes COALESCE, table options disappear, and three-level names arrive. QUALIFY is supported natively, so it stays. The effort is concentrated elsewhere.
What the converters handle well
- DDL for tables and views, with dialect-specific options removed
- Set-based SELECT, INSERT, UPDATE and MERGE statements
- Function and syntax translation (date arithmetic, null handling, casts)
- Bulk conversion with a report of what failed and why
What still needs engineers
- Procedural code: the Lakebridge FAQ advises planning two or more manual review passes for very complex objects
- BTEQ, FastLoad, MultiLoad and TPT scripts, which are rewritten as SQL or PySpark jobs
- Behavioural differences that compile fine but return different results (rounding, collation, nulls)
- BI repointing, semantic models and user acceptance testing, which Lakebridge does not cover
Treat converted code like any other code: version it, review it, and test it against recorded inputs and outputs from the source system. A conversion that compiles has passed the first of several tests, not the last.
Step 4: Move historical and incremental data
Data movement has two jobs: load the history once, and keep the target current until each wave cuts over. The right tool depends on volume, change rate and how long the two systems will run side by side. These are the main options:
| Option | Best for | Watch out for |
|---|---|---|
| Bulk extract to cloud storagethen Auto Loader or COPY INTO | Historical loads at volume. Teradata offers FastExport and WRITE_NOS; Oracle offers DBMS_CLOUD; cloud copy tools move the files. | Load on the source. Databricks’ Teradata guide calls WRITE_NOS the fastest route but recommends only two to four parallel runs. |
| Lakeflow Connectmanaged connectors | Ongoing ingestion. SQL Server with change data capture is GA; query-based connectors for Oracle, Teradata, SQL Server, MySQL, MariaDB and PostgreSQL went GA in May 2026. | Query-based connectors poll rather than stream changes; check CDC support for your source before relying on it. |
| Lakehouse Federation | Querying the source in place: proofs of concept, ad hoc access and phasing data in gradually. | Read-only, and not designed for bulk volume. Use it as a bridge, not a pipeline. |
| Partner replicatione.g. Qlik, Fivetran | Historical plus CDC from many sources with one tool, when continuous sync is needed through a long parallel run. | Another licence and another system to monitor during the most sensitive phase. |
| Apache Iceberg interoperabilitySnowflake sources | Keeping a single copy of data until workloads cut over. | Running both platforms on the same data in parallel still costs compute on both. |
Land raw, then transformLoad extracts into bronze exactly as they arrive, with load metadata (source, extract time, batch ID). Clean and conform in silver. When a reconciliation check fails, an immutable bronze layer lets you tell a source problem from a transformation problem, and reprocess without re-extracting from a system you are trying to retire.
Step 5: Reconcile source and target, layer by layer
Data reconciliation is how you prove the migration worked. Each level below catches a class of defect the level before it cannot see, so a wave is not reconciled until every level passes.
- Objects and schemaEvery table and view exists; column names, types, precision and nullability match the agreed mapping.
schema - Row countsPer table, and per partition or date range so a mismatch points somewhere useful.
COUNT(*) - Column aggregatesSUM, MIN, MAX and AVG on numbers; MIN and MAX on strings and dates; null and distinct counts on every column.
SUM · MIN · MAX - Row-level comparisonHash each row’s business columns and compare by key to find exactly which records differ, are missing or are extra.
row hash - Business reconciliationThe reports, KPIs and regulatory outputs people rely on produce the same numbers. This is the level that earns sign-off.
KPIs
-- run the same profile on source and target for one slice, then compare
SELECT
COUNT(*) AS row_count,
COUNT(DISTINCT order_id) AS distinct_keys,
COUNT(*) - COUNT(cust_id) AS null_cust_id,
SUM(discount_amt) AS sum_discount,
MIN(order_ts) AS min_ts,
MAX(order_ts) AS max_ts
FROM main.sales.fact_orders
WHERE order_ts >= DATE '2026-01-01'
AND order_ts < DATE '2026-02-01';-- rows whose business columns differ, or exist on one side only
SELECT COALESCE(s.order_id, t.order_id) AS order_id,
CASE WHEN s.order_id IS NULL THEN 'missing in source'
WHEN t.order_id IS NULL THEN 'missing in target'
ELSE 'values differ' END AS issue
FROM recon.src_orders_hashed s
FULL OUTER JOIN recon.tgt_orders_hashed t
ON s.order_id = t.order_id
WHERE s.row_hash IS DISTINCT FROM t.row_hash;Hashes only match if both sides normalize values the same way first: trimmed strings, one timestamp precision, one decimal scale, one representation of null. Agree the normalization rules before the first comparison, or every row will differ. Lakebridge Reconcile automates much of this. Its schema, row, data and all report types compare structure, row hashes and column values across Oracle, Snowflake, SQL Server, Redshift, Teradata (with a user-installed hash function) and BigQuery. It supports aggregate checks, absolute or percentage thresholds and sampling.
Not every difference is a defectSome differences are expected and should be documented, not fixed: rounding where a source NUMBER had more precision than the target DECIMAL, timestamps normalized to UTC, trailing spaces in fixed-width CHAR columns, or a bug in the legacy logic the business agrees not to reproduce. Keep a signed-off list of accepted differences per table. Auditors will ask for it.
Step 6: Parallel run, cutover and rollback
During the parallel run both platforms receive the same inputs and produce the same outputs, and someone compares them every day. It is the only test that covers the real business calendar: the month-end close, the quarterly regulatory file, the Monday morning load after a weekend outage. Databricks’ own migration guides recommend running pipelines in parallel for a set period, and starting validation with control and lookup tables.
- 01 · FreezeChange freeze on the wave’s scope
No new logic lands in the legacy system for the objects in this wave, or it lands in both places under one change ticket.
- 02 · SyncFinal incremental load
The target is brought fully current and reconciled at every level for the final slice.
- 03 · SwitchConsumers repointed
BI connections, extracts, APIs and downstream feeds move to Databricks, one consumer group at a time, each with a named owner who confirms it works.
- 04 · WatchHypercare
Heightened monitoring of freshness, failures, cost and query performance, with the migration team on call.
- 05 · HoldLegacy kept read-only
The old warehouse stays available, unchanged, as the rollback target until the wave passes its exit criteria.
- 06 · RetireDecommission
Archive what regulation requires, revoke access, stop the jobs and switch off. The licence and support savings only start here.
Write the rollback plan before you need itFor each wave, define in advance what triggers a rollback (for example, a regulatory output that cannot be reconciled by a deadline), who decides, and the steps to repoint consumers back. A rollback you have rehearsed takes an hour. One you have not can take a weekend.
We use the same discipline outside warehouses. On a state immunization registry, up to 15 years of history, 2 million patient records, moved in an 8-month migration that ran in parallel with the new build. Data quality was fixed at source, records moved in validated batches, and the final batch was synchronized at go-live. It was a registry migration, not a warehouse one, but the method of validated batches, parallel running and a controlled final sync carries over directly.
Notes by source system: Teradata, Oracle, SQL Server and more
Search volume for each “X to Databricks” pair is small, but the questions behind them are specific. One runbook with a note for each source works better than seven separate plans. Pick a source system:
- Same runbook · different gotchas
BTEQ, indexes, PERIOD types
Usually the largest and most script-heavy estates. Databricks publishes a dedicated Teradata migration guide.
- SET/MULTISET, FALLBACK, JOURNAL and PRIMARY INDEX are not valid Databricks DDL. Drop them and use liquid clustering, and resist turning every index into a partition.
- BTEQ, FastLoad, MultiLoad and TPT scripts are rewritten as SQL or PySpark jobs in Workflows.
QUALIFYis supported natively. Macros map to SQL functions, join indexes to materialized views, stored procedures to SQL scripting.- INTERVAL and PERIOD types have no exact equivalent. Agree a representation, such as start and end columns, before conversion.
- Lakebridge Reconcile needs a hash function installed on Teradata for row-level comparison.
PL/SQL, NUMBER, hierarchies
Procedural code and numeric precision are the two places to look first.
NUMBERwithout precision and scale can exceedDECIMALlimits, and Databricks’ guide warns of automatic rounding. Profile actual values and choose types deliberately.- Oracle
DATEincludes a time of day. Map it toTIMESTAMPunless you have confirmed the time is always midnight. - PL/SQL anonymous blocks map to SQL scripting; packages are split into procedures and functions or refactored into pipelines.
CONNECT BYhierarchies become recursive CTEs (DBR 17.0+, public preview, 100-level default limit).- Sequences usually become identity columns, which Databricks supports on
BIGINTonly.
T-SQL, SSIS, Agent jobs
Well covered by tooling. Both the BladeBridge and Morpheus converters handle T-SQL.
- T-SQL functions and syntax need translating; stored procedures move to Databricks SQL procedures or scripting.
- SQL Agent jobs and SSIS packages move to Databricks Workflows and pipelines. BladeBridge’s SSIS conversion is experimental.
IDENTITYis supported only onBIGINTcolumns.- Temporary tables are available on Databricks SQL and DBR 18.1+, which simplifies converting
#temp-heavy procedures. - Lakeflow Connect’s SQL Server connector with change data capture is GA, which helps keep the target in sync through a long parallel run.
Distribution keys, NZSQL
Often migrated under hardware end-of-life pressure, so time is short.
- NZSQL is mostly ANSI SQL, so set-based logic converts cleanly.
DISTRIBUTE ONand similar physical clauses are replaced by clustering on Databricks, not recreated.- BladeBridge supports Netezza conversion; Databricks publishes a Netezza migration guide.
Dedicated SQL pools
Common when the estate is already on Azure. Azure Databricks keeps data in the same tenant.
- Dedicated SQL pools are covered by the Lakebridge Profiler and by both deterministic converters.
- Distribution and indexing options are dropped in favour of clustering and Photon.
- Pipelines in Azure Data Factory can keep orchestrating during the transition, then move to Workflows in later waves.
Hive metastore, Impala, Oozie
Often the oldest estate in the room, with the least documentation.
- Catalog federation can read an external Hive metastore or AWS Glue so data is queryable in Unity Catalog before it moves.
- UCX, the Databricks Labs Unity Catalog toolkit, upgrades tables, views, jobs and notebooks from the Hive metastore.
- The Lakebridge Analyzer inventories Hive, Impala, Oozie, Pig and Sqoop assets.
- Existing Spark jobs often run with modest changes; the bigger work is governance, file layout and replacing Oozie schedules.
Streams, tasks, VARIANT
A cloud-to-cloud move. Databricks updated its Snowflake migration guide in 2026.
- Apache Iceberg interoperability can keep a single copy of data until workloads cut over; federation maps Snowflake metadata into Unity Catalog.
- Streams map to Delta change data feed and declarative pipelines; tasks map to Databricks Workflows; Time Travel maps to Delta time travel.
- Semi-structured
VARIANTcolumns map to the DatabricksVARIANTtype (DBR 15.3+). - Secure data sharing maps to Delta Sharing. Morpheus converts Snowflake SQL, including experimental dbt support.
How long does a Databricks migration take, and what does it cost?
We have not found a credible, independent benchmark for how long an enterprise warehouse migration takes, and we are wary of anyone who quotes one without seeing the estate. Databricks’ own professional services team warns that migrations “create a misleading impression of a clearly defined project”. The best public evidence is customer stories, which are vendor-reported and selected because they went well:
| Organization | Migrated from | Reported result |
|---|---|---|
| Vivriti Capital | Amazon Redshift | About 8 weeks; 25–30% lower total cost of ownership |
| Lumen | Cloudera | 133 TB moved in 9 months; 30–40% lower compute cost |
| IndusInd Bank | Not named | 1.5 PB in 15 months, against a 2.5-year estimate |
| AXA Japan | Legacy warehouse | 60% lower warehouse costs; 70% lower ETL costs |
| Nationwide | SQL warehouses | 29% lower overall cost |
Source: Databricks blog, October 2026. All figures are vendor-reported and not independently verified.
What actually drives cost and duration is predictable, even if the total is not:
Procedural and ETL code
The single biggest driver. Count procedures, scripts and ETL mappings, and the share the Analyzer scores as high complexity.
Consumers to repoint
Every report, extract and downstream feed needs an owner, a change and a sign-off. Retiring unused ones is the cheapest saving available.
Parallel-run length
Both platforms bill during the parallel run. It must cover the business calendar, but every extra month costs twice.
Accuracy and audit needs
Regulated reporting needs row-level reconciliation and documented sign-off, which takes far more effort than a count match.
9 common data warehouse migration pitfalls
We see each of these in most programs. They are listed with their cause, because the fix follows from it.
Treating it as a SQL translation project
The conversion tool produces visible progress early, so the plan is built around it, and reconciliation, BI and the parallel run are squeezed at the end.
Plan and staff all six steps from day one. Measure progress by waves cut over, not lines of code converted.
Migrating things nobody uses
No usage analysis was done, so every table, report and job is carried forward “just in case”.
Use query logs and lineage to build a retire list before conversion. Get the business owner to sign it, and archive rather than delete when in doubt.
Recreating the old physical design
Indexes, distribution keys and partition schemes are mapped one to one, often producing thousands of tiny partitions.
Use liquid clustering and let predictive optimization maintain tables. Design for the lakehouse, then tune with real query patterns.
Silent type and precision drift
Types map cleanly on paper but behave differently: Oracle NUMBER rounding, DATE with time, CHAR padding, collation and time zones.
Profile real values per column, agree type mappings explicitly, and include these cases in reconciliation tests.
Reconciling only row counts
Counts are cheap and reassuring. They miss wrong values, shifted decimals and duplicated-then-dropped rows that net to zero.
Reconcile at every level up to business KPIs. Automate it so it runs on every load during the parallel run.
Forgetting the BI and semantic layer
Dashboards, semantic models and spreadsheet connections are owned by different teams and are not in the warehouse inventory.
Inventory consumers in step 1, give each one an owner, and include repointing and acceptance testing in each wave.
A parallel run that ends too early
The run is cut short to save double licence costs and never sees a month-end or quarter-end close.
Set exit criteria by business events, not dates: for example, one month-end and one regulatory submission reconciled.
No cost guardrails on the new platform
Elastic compute replaces a fixed appliance, and nobody sets budgets, auto-stop or compute policies until the first surprising bill.
Set tags, budgets, auto-stop and per-workload compute policies in step 2, and review spend weekly during migration.
Governance added after cutover
Security is re-implemented late, so permissions are copied loosely “for now” and never tightened.
Map roles to Unity Catalog groups, row filters and column masks during design. Treat security parity as a go-live criterion.
Data warehouse migration checklist
Use this to check readiness at each gate. Tick items as you confirm them (progress is saved in this browser only), or print it for a steering meeting.
Data warehouse to Databricks migration checklist · Bonami Software · bonamisoftware.com/blog-data-warehouse-to-databricks-migration
Before you convert
Before you move data
Before cutover
After cutover
How Bonami helps with Databricks migration
Disclosure: Bonami Software is a Databricks Select Partner. We have tried to keep this guide useful whichever platform you choose, and the limits of the tools are stated as plainly as their strengths.
Our data engineering team runs migrations end to end or alongside your engineers. A typical engagement starts with a fixed-scope assessment: we profile the estate, score code complexity, build the retire list and wave plan, and give you an estimate you can defend.
Migration assessment
Inventory, usage and lineage analysis, complexity scoring, target design and a wave plan with risks named.
Conversion and data movement
Lakebridge-assisted conversion with engineering review, pipelines into a governed medallion layout, and CDC through the parallel run.
Reconciliation and cutover
Automated multi-level reconciliation, accepted-difference sign-off, rehearsed rollback and hypercare.
Frequently asked questions about Databricks migration
How long does a data warehouse to Databricks migration take?
It depends on the number of objects, the amount of procedural code, the ETL estate and how long the parallel run must last, so treat any single number with suspicion. Vendor-reported customer stories range from about eight weeks for a Redshift migration to fifteen months for a 1.5 PB estate. Plan in waves, and budget the parallel run to cover at least one month-end and one quarter-end close.
What is Lakebridge?
Lakebridge is Databricks’ migration toolkit for moving legacy data warehouses and ETL to Databricks SQL. Launched in June 2025 from technology Databricks acquired with BladeBridge, it has a profiler, an analyzer that inventories and scores source code, converters that transpile SQL and ETL logic, and a reconcile module that compares source and target data.
Is Lakebridge free and open source?
Lakebridge is free for Databricks customers and partners and its code is public on GitHub, but it is not open source in the OSI sense: it is released under the Databricks License, which permits use only with Databricks services. It is a Databricks Labs project, supported through GitHub issues rather than formal support SLAs.
Can Databricks replace a traditional data warehouse?
For most analytical workloads, yes. Databricks SQL warehouses run on the Photon engine, SQL stored procedures and SQL scripting are generally available, and multi-statement transactions are in public preview. Check the specific features your workloads depend on, such as transactions, temporary tables or particular procedural patterns, during assessment rather than assuming parity.
What is the best data migration strategy for moving to Databricks?
A wave-based migration by business domain or workload, not a single big-bang cutover. Each wave is assessed, converted, loaded, reconciled and run in parallel before its consumers are switched. Retire unused objects before converting them, and modernize the design, such as replacing indexes with liquid clustering, during the move rather than copying the old design one to one.
What are the steps in a data warehouse migration?
Assess the estate, design the target platform, convert code, move historical and incremental data, reconcile source and target, run both platforms in parallel, then cut over and decommission. Governance, security and cost controls run through every step rather than being added at the end.
How do you validate data after a migration?
In layers: schema and object checks, row counts, column aggregates such as sums, minimums, maximums and distinct counts, row-level hash comparisons on business keys, and finally business-level reconciliation of the reports and KPIs people actually use. Lakebridge Reconcile automates schema, row and column-level comparisons for several sources.
Do we need Unity Catalog for a Databricks migration?
Yes. Starting September 30, 2026, new Databricks workspaces are provisioned without access to the legacy Hive metastore and DBFS root, so a new migration target is Unity Catalog by default. It also gives you one place for permissions, lineage and auditing across tables, files, models and dashboards.
What happens to stored procedures and BTEQ scripts?
Stored procedures can move to Databricks SQL stored procedures or SQL scripting, or be refactored into pipelines. Teradata BTEQ, FastLoad, MultiLoad and TPT scripts have no direct equivalent and are rewritten as SQL or PySpark jobs orchestrated by Databricks Workflows. Lakebridge converters handle much of the SQL, but procedural code needs the most manual review.
Can you migrate from Snowflake to Databricks?
Yes. Options include keeping a single copy of data through Apache Iceberg interoperability until workloads cut over, federating Snowflake into Unity Catalog to map metadata, or unloading data to cloud storage. Snowflake streams map to Delta change data feed and declarative pipelines, tasks map to Databricks Workflows and secure data sharing maps to Delta Sharing.
How much does a Databricks migration cost?
The main cost drivers are the volume of procedural and ETL code, the share that converts automatically, data volume and change rate, the number of BI reports to repoint, the length of the parallel run when both platforms are billing, and testing effort. An assessment that profiles the estate and scores code complexity is the only reliable way to size it.
Should we migrate ETL tools like Informatica or SSIS at the same time?
Usually in the same program but not the same step. Many teams first land data and reconcile tables, keeping existing ETL pointed at the new target where possible, then replace ETL tooling with Lakeflow pipelines and Workflows in later waves. Converting warehouse SQL and ETL at once multiplies the number of things that can differ during reconciliation.
The takeaway: prove it, then switch it off
A data warehouse to Databricks migration is judged on one question: does the business get the same answers, more cheaply and with fewer limits, from the new platform? Tools like Lakebridge make the first half of the work, inventory and conversion, faster than it has ever been. The second half is still an engineering and organizational job: reconciling to the level the business trusts, running in parallel through real business cycles, repointing every consumer and finally switching the old system off.
Teams that plan for that second half from the start tend to finish on time. Teams that plan around the conversion tool end up maintaining two platforms for longer than either budget allowed.
Planning a move to Databricks?
Send us an outline of your warehouse: source system, rough size, number of procedures and ETL jobs, and your deadline. We will come back with what an assessment would cover and the questions that will decide your timeline.
Sources
- Databricks: Introducing Lakebridge (June 2025)
- Databricks: acquisition of BladeBridge (February 2025)
- Lakebridge documentation: Analyzer, Converter and Reconcile
- Lakebridge on GitHub (licence and releases)
- Databricks docs: Unity Catalog-only workspaces from September 30, 2026
- Databricks docs: Lakehouse Federation
- Databricks docs: liquid clustering
- Databricks docs: predictive optimization
- Databricks: SQL stored procedures
- Databricks: data warehouse migration guides (Teradata, Oracle, SQL Server, Netezza, Snowflake)
- Databricks: migration strategy lessons learned
- Databricks: 2026 benchmarks and customer results (vendor-reported)
Inventory figures in the illustration are fictitious. Tool capabilities and feature status were checked against Databricks and Lakebridge documentation on October 23, 2026 and change often; confirm them for your workspace before planning. Customer results are vendor-reported. Bonami Software is a Databricks Select Partner.