EBOOK
3 Steps to Accelerate Data Warehouse Migrations to Snowflake
Expert Tips, Tricks and Tool Recommendations
Migrating data assets to a new platform can be a complex process with many moving parts. But Snowflake is on a mission to keep the process as simple as possible for customers in pursuit of its mission to “put customers first.”
With experience supporting hundreds of migration projects, Snowflake created this step-by-step guide with a proven methodology for migrating your data to Snowflake, all with insights, tools and lessons learned from experience.

TABLE OF CONTENTS
- Step 1: Decide Which Data Warehouse Migration Approach to Take
- Step 2: Decide Who Will Execute the Data Warehouse Migration Process
- Step 3: The Data Warehouse Migration Process to Snowflake
- Planning and design
- Environment and security
- Database code conversion
- Reporting and analytics
- Data validation and testing
- Deployment
- Optimize and run
STEP 1
Decide Which Data Warehouse Migration Approach to Take
The first task in any data warehouse migration is deciding whether to take a “lift and shift” approach or pursue modernization. While it’s true that no migration is purely a lift and shift — since some adjustments are always required — Snowflake has developed a third option: pragmatic lift, adjust and shift.
The goal of this third option is the same as lift and shift: to migrate the assets that are critical to your business and have already been identified for Snowflake, focusing on getting them moved as quickly as possible — without a complete redesign. A full redesign may be necessary if your current system is poorly architected or has major functional flaws. However, in most cases, pragmatic lift, adjust and shift offers a faster and more cost-effective way to move your assets to Snowflake.
This approach allows you to provide Snowflake access to your business users quickly, enabling them to start deriving value from the platform as soon as possible. In comparison, lift and shift is generally the fastest and most cost-effective data warehouse migration method. Many organizations underestimate the effort required for a full redesign.
Regardless of the approach you choose, it’s important to decide on your modernization strategy upfront and stick with it throughout the data warehouse migration process.
STEP 2
Step 2: Decide Who Will Execute the Data Warehouse Migration Process
Snowflake recommends this nine-step process to complete a successful data warehouse migration. Before starting, it’s important to decide who will execute the migration process.
Will the migration be handled in-house, or will you engage a system integrator or Snowflake Professional Services? This is a crucial decision that should be made upfront. Your chosen migration partner must be involved from the very beginning, during the scoping, planning and design phases.
For example, you might have a system integrator supporting your legacy system. However, this partner may lack the expertise required for a data warehouse migration. It's essential to assess your migration partner’s capabilities in advance. The ideal partner is familiar with your current environment and has data warehouse migration expertise—and some of those are listed on our website. If you cannot find a partner with both qualifications, you will need to ensure you plan the corresponding ramp-up time and cost to cover the specific lack of expertise.
Understanding the current environment is especially important if you intend to implement significant modernization. On the other hand, data warehouse migration expertise is critical, particularly for lift and shift and some adjusted approaches.

STEP 3
The Data Warehouse Migration Process to Snowflake
Planning and design
Planning and design are often overlooked steps in the migration process. The main reason is companies typically want to show progress quickly, even if they haven't fully understood the scope of the project. Time spent on planning is sometimes seen as an unnecessary overhead. However, this is one of the biggest mistakes seen in practice.
Why is planning and design so important?
Planning is the foundation of the entire migration process. It's essential to clearly understand the scope, timeline, and costs to properly set expectations for all stakeholders. Every migration stage involves critical decisions that will impact the final outcome. Tools like Snowflake’s Migration Readiness Assessment engagement can help you ensure the discovery process properly estimates the project and sets realistic expectations.
During this phase, the migration partner works closely with the customer to understand their current system and help create an accurate inventory of the assets that need to be migrated — examining the entire ecosystem, from data ingestion to BI users.
The initial inventory may not be the final one. Migration is an ongoing process, and it’s difficult to freeze the source system completely. However, having a baseline inventory, even if it requires updates later, is crucial for monitoring progress. Additionally, any changes to the source system during the migration should be carefully tracked and communicated to all stakeholders. The last thing you want is to migrate the wrong version of the system.
Benefits of an upfront inventory
With an inventory of objects completed, it becomes easier to identify the complexities of your current environment, including the different applications connected to the database and the object lineage. This inventory also helps prioritize which application migrations can be executed in parallel. Typically, there are a few critical applications that, once migrated, will unblock the rest.
Another advantage of having an upfront inventory is the ability to identify objects no longer required for migration. It’s not uncommon to find decommissioned objects that are still accessible in the legacy system. The migration planning phase is an opportunity to clean up and remove unused objects, reducing the overall scope.
Impact of the chosen migration approach
Your chosen migration approach also directly impacts planning. Select an approach early on, understand its pros and cons, and stick to it throughout the project. If you need to switch approaches later, be aware that it necessitates re-planning and will impact both time and budget. Many customers change their migration approach mid-project without fully analyzing the impact—this is a mistake!
Clear and transparent communication with stakeholders
Effective communication with all stakeholders is crucial, and both technical teams and business users must be involved. It's a mistake to plan a migration process that only includes IT; business users have their own priorities and are critical to the testing and acceptance process (more on this later). During the planning phase, it's essential to identify all stakeholders and ensure they sign off on the migration plan. This helps avoid surprises when their involvement is required down the line.
Once stakeholders are identified, create and communicate a RACI matrix (responsible, accountable, consulted, informed) for all project activities. Make sure there is clear accountability at every stage and for every activity in the project. It’s also essential that all stakeholders understand why the migration to Snowflake is happening and the ultimate common goal. Since migrations affect many aspects of the business and require resources from various stakeholders, it's important that the motivation for the project is understood and shared. This will help ensure all stakeholders are aligned and contribute to the project's success, minimizing potential resistance later on.
Establishing project metrics and dashboards
Another important planning activity is creating project metrics and dashboards to track progress. Starting with the inventory/scope, you need to monitor each object’s migration status, such as whether it has been migrated, tested, deployed, and if historical data has been loaded. A comprehensive project dashboard should measure the overall health of the migration and allow you to drill down into individual tasks. This dashboard must be kept updated and serve as the single source of truth for project status. Again, transparent communication with all stakeholders — both technical and business — is essential for project success.
Training for users
Finally, training for both technical and business users is essential during the planning phase. A complete training plan needs to be developed alongside the migration effort. When you begin deploying migrated assets to Snowflake, the organization should already be familiar with the platform. Formal training on Snowflake and other change management techniques, such as office hours, where stakeholders can become proficient with the platform before migration is complete, are recommended.
By investing in thorough planning and design upfront, you’ll ensure your migration project runs smoothly, stays on track, and delivers the expected outcomes. Planning is the critical first step to a successful migration.
Environment and security
With a plan, a clear timeline, a RACI matrix, and buy-in from all stakeholders, it’s time to move into execution mode.
One of the first recommended steps is setting up the necessary environments and security measures to begin the migration. There are many moving parts, so focus on security next. As with any cloud platform, Snowflake operates under a shared security model between the platform and administrators.
Setting up environments
First, decide how many accounts you will need. In legacy platforms, you typically had database instances, but in Snowflake, the setup revolves around accounts. At a minimum, you should set up production and development environments. Depending on your testing strategy, you may also need additional environments for different stages of testing.
Security measures
Once the environments are set up, it’s crucial to implement the proper security measures. Start with the network policy to ensure only authorized users within your VPN can access the Snowflake system.
Snowflake’s user access control is role-based, so administrators must define roles according to business needs. Once the roles are defined, create the user accounts and enforce multi-factor authentication (MFA) and/or single sign-on (SSO) for all users. Additionally, you’ll need to set up service accounts for all the automatic periodic processes.
Roles during migration
During migration, you’ll also need to define specific roles for the users executing the migration itself. Although the roles for nonproduction environments may differ, remember that during migration, you will be dealing with real data, so don’t skimp on security.
In development, the migration team generally has more freedom when deploying changes to the structure or code. These are active development environments, and you don’t want to block the migration team with excessive security restrictions. However, it’s still important to maintain a robust security model, even in nonproduction environments.
Rethinking the access model
Since the security model in Snowflake differs from that of many legacy platforms, this migration is a good opportunity to rethink your access model. Clean up the hierarchy of users who need access to your system and ensure only the necessary users can access specific resources.
Coordinating with finance
Snowflake uses a consumption-based pricing model, meaning costs are tied to usage. As you define roles, coordinate with your finance team to track which departments are using Snowflake and how. Snowflake also allows you to tag database objects, which can be used to track ownership at the business level, helping align usage with departmental cost allocation.
Security and environment setup are complex tasks that need to be planned upfront. You may consider redesigning your access model to ensure the new platform is manageable in the long run. Setting this up correctly will lay a strong foundation for a secure and efficient migration to Snowflake.
Database code conversion
The database code conversion process involves extracting code directly from the source systems' database catalog, such as table definitions, views, stored procedures and functions. Once extracted, you migrate all this code to equivalent data definition languages (DDLs) in Snowflake. This step also includes migrating data manipulation language (DML) scripts, which may be used by business analysts to build reports or dashboards.
All this code needs to be migrated and adjusted to work in Snowflake. The adjustments can range from simple changes, such as naming conventions and data type mappings, to more complex differences in syntax, platform semantics and other factors. To assist with this, Snowflake offers a powerful solution called SnowConvert, which automates much of the database code conversion process.
Data migration
With the environment set up, the security model updated, and the DDL model converted, deployed objects in Snowflake are structurally equivalent to those in the original platform. The next recommended step is data migration.
It’s important to differentiate between historical data migration and new data addition. Historical data migration refers to taking a snapshot of the data at a specific point in time and transferring it to Snowflake. It’s recommended to first perform an exact copy of the data without any transformation into Snowflake. This initial copy will put some load on the legacy platform, so it’s best to do it only once and store it in Snowflake as something typically called the golden copy.
During this phase, you’re still stabilizing the ingestion processes. If an issue arises and you need to re-run any process, you can start from the golden copy without affecting the production legacy database. Additionally, many typical transformations — such as collation, null handling, trailing spaces, case sensitivity and encoding — are required to address the semantic differences between how the legacy platform and Snowflake handle data.
At the end of the migration, it’s recommended to store data in a native Snowflake format, using native data types. This is the stage where you must resolve the platform's semantic differences (and also make necessary adjustments during the code conversion phase). Important note: Business users need to be educated about these semantic differences, as they may notice discrepancies in the data, particularly during the testing phase. It’s essential they are prepared to handle these differences.
Once the golden copy is in place, you can share the transformed data in a new database. Snowflake features, such as cloning, allow you to use the data for development or QA without physically duplicating it. Cloning is an efficient operation since it doesn’t require physical data duplication.
Legacy systems and Snowflake may use different encodings. It’s crucial to account for this, especially to avoid incorrect handling of extended ASCII characters, which could affect downstream processes.
Another best practice concerns the size of the export files when moving data from the legacy system into Snowflake. Files in the 200–400 MB range are ideal for efficient loading. Snowflake can process data in parallel, so splitting the data into multiple files allows them to be imported simultaneously. After exporting the data from the legacy system, you can split it into multiple files, upload them to a cloud bucket, and use the COPY command to load the data into Snowflake.
Data ingestion
After migrating the historical data, the next step is migrating the data ingestion process, bringing in live data from various sources. Typically, this process follows an extract, transform load (ETL) or extract, load, transform (ELT) model, depending on when and where the data transformation occurs before it becomes available to business users.
In the legacy system, the ingestion scripts are designed to send data to the old platform. Now, they need to be modified to send data into Snowflake.
This reinforces the importance of the planning phase. All legacy data sources and their associated ingestion pipelines need to be identified, and for each one, a clear migration path must be defined. There are several approaches to this:
- Repointing the current pipeline: Redirect the existing ingestion pipeline so the destination database is now Snowflake, keeping the overall ingestion framework largely unchanged.
- Redesigning the ingestion process: Alternatively, the ingestion process can be entirely redesigned. Some customers build their own custom ingestion frameworks, while others adopt industry-standard tools. While the motivation to avoid vendor lock-in is understandable, building a custom framework (often in Python) requires significant time and effort, which can sometimes be underestimated. This can have a notable impact on the overall migration timeline, especially when developing a custom ingestion framework for the first time.
Reporting and analytics
Now that the database has both historical data and live pipelines continuously importing new data, the next step is to extract value from this data through BI. Reporting can be done using standard BI tools or custom queries. In both cases, the SQL sent to the database may need to be adjusted to meet Snowflake's requirements. These adjustments can range from simple name changes (common during migration) to syntax and more complex semantic differences. All these need to be identified and addressed.
As with the ingestion process, it's crucial to review all legacy platform usage and incorporate those findings into the migration plan. There are generally two types of reports to consider: IT-owned reports and business-owned reports. It’s usually easier to track down IT-owned reports, but business-owned reports and complex queries created by business users require a different approach.
Business users are a key stakeholder in the migration process and should be included in the RACI matrix during the planning phase. They should be trained on how Snowflake operates and should clearly understand the platform differences. This will enable them to modify their custom queries and reports as needed. Typically, a parallel training track for business users, followed by office hours with migration experts who can help address platform differences and guide users through the adjustments they need to make is recommended.
Business users are ultimately the ones who "accept" the migration. You might have completed the technical migration from an IT perspective, but if business users aren't involved, they may still rely on thousands of reports that are crucial for running the business. These reports must be updated to work with Snowflake to ensure the business can fully transition from the legacy platform.
Don't forget about the business users! Migration projects derail at the last minute when business users are "surprised" by the effort required to convert their custom reports.
Data validation and testing
Data validation and training are two often underestimated steps in the migration planning process. Of course, the goal is to have the data as clean as possible before entering this phase.
Every organization has its own testing methodologies and requirements for moving data into production. These must be fully understood from the start of the project.
One of the first considerations is minimizing the impact on the source system. Legacy platforms often operate at or near full capacity, and data validation requires an additional load to compare data with Snowflake. A mechanism called “bridging jobs” can minimize the impact on the legacy platform.
Bridging jobs retrieve data from the source system immediately after the ETL jobs are completed and bring the delta (i.e., changes) of those tables into Snowflake. Once the tables are essentially replicated in Snowflake, you can run the same ETL processes against the Snowflake database. This allows you to perform comparisons and testing within Snowflake, where capacity is virtually unbounded. This mechanism is an efficient way to perform testing. If you identify an issue after running the ETLs, you can fix the problem, roll back, and re-execute the ETL and verification process — all within Snowflake.
Regarding the validation process, a row-by-row comparison is typically not necessary. Aggregate-level validation is usually sufficient. You can use efficient aggregate functions such as MIN, MAX, AVG, MD5, COUNT, DISTINCT COUNT and others. If all the aggregated results match, you can be confident the individual rows will match also. If there’s an issue, the aggregate discrepancies will pinpoint which column has the problem, allowing you to debug the specific step.
Snowflake’s Professional Services team has developed utilities to accelerate this process. However, as with all aspects of migration, this effort must be planned upfront — a recurring theme throughout this paper.
Deployment
At this stage, the data is validated, an equivalent system is set up, all the ETLs have been migrated, and reports have been verified. Ready to go live?
Not so fast — there are still a few critical considerations before final promotion to production. First, your legacy application may consist of multiple components or services. Ideally, you should migrate these applications one by one (although parallel migration is possible) and promote them to production in the same order. During this process, ensure your bridging strategy is in place so business users don’t have to query both Snowflake and the legacy system. Data synchronization for applications that haven’t been migrated yet should happen behind the scenes through the bridging mechanism. If this isn't done, business users will have to work in a hybrid environment, and they must understand the implications of this setup.
When you're finally ready for the cutover, ensure all stakeholders are aligned and understand that from this point forward, Snowflake will be the system of record, not the legacy platform. You’ll need final and formal sign-offs from all stakeholders before proceeding. Any reports that were not migrated are now the responsibility of the business users. This is why it’s crucial not to involve users at the last minute — they should be part of the process from the start and should be aware of the migration timeline.
Additionally, verify that all permissions have been properly granted. For example, if you are using active directory-based roles, ensure these are created and configured in Snowflake.
A few additional scenarios are typically left to the end, but they shouldn’t be overlooked:
Surrogate keys: If you are using surrogate keys, be aware that their lifecycle may differ between the legacy and Snowflake systems. These keys need to be synchronized during the cutover.
Cutover timing: Depending on your industry, there may be more or less favorable times during the year for performing a cutover. Consider the timing carefully.
Legacy platform licensing: Don’t forget you may face hard deadlines related to the licensing of the legacy platform. Be sure to plan your cutover around any such deadlines.
Optimize and run
Once a system has been migrated to Snowflake, it enters normal maintenance mode. All software systems are living organisms requiring ongoing maintenance. This phase after migration is referred to as optimize and run, and it is not part of the migration itself.
Optimization and continuous improvement are ongoing processes that happen after migration. At this point, your team will take full ownership of the system in Snowflake. The system will continue to evolve, and optimization will be driven by usage patterns.
In general, jobs in Snowflake tend to run faster than on the original platforms. If performance doesn’t meet expectations, you may need to run some optimizations to fully leverage Snowflake's unique architecture. Snowflake provides various query analysis tools that can help identify bottlenecks, enabling you to optimize specific parts of the workflow.
During the optimization phase, you may need to revisit different aspects of the system. The advantage is you are already benefiting from Snowflake’s capabilities, and optimization tasks will become part of your regular maintenance routine.
As a recommendation, you should focus on addressing only critical performance issues during the migration phase. Optimization is best treated as a post-migration effort.
CONCLUSION
Final Thoughts
This ebook has covered the typical aspects of a migration project and shared lessons learned from hundreds of migration projects over the years. It is by no means a comprehensive guide, but rather a collection of tips and best practices derived from some of the more challenging learnings of the past. To learn more about Snowflake’s migration solutions, visit our website, or reference SnowConvert documentation.