Home / Data Platform / Warehouses

Data PlatformRunbookAdvanced

Transformation: Teradata or Netezza data warehouse to Snowflake

A practical migration plan from an appliance data warehouse to Snowflake. Inventory and usage analysis, schema and SQL conversion, historical data transfer, rebuilding loads, testing with reconciliation, cutover of BI tools and decommissioning.

Deepak Bhardwaj2 min read

Applies toTeradata, IBM Netezza (PureData), Snowflake, SnowConvert / partner conversion tools, cloud storage stages

1. Assess with usage data

Query the source's logs (Teradata DBQL, Netezza query history) for 3–6 months:

  • Which tables are actually read, by whom, how often.
  • Top queries by CPU and runtime — your performance test set.
  • Unused objects to leave behind.

2. Convert schemas

Teradata/Netezza Snowflake
PRIMARY INDEX, DISTRIBUTE ON Nothing (micro-partitions); clustering keys only for very large tables
MULTISET / SET tables Standard tables (SET duplicate elimination must be handled in loads)
VARCHAR(n) CHARACTER SET LATIN VARCHAR (UTF-8)
BYTEINT NUMBER(3,0)
Volatile / global temporary tables TEMPORARY / TRANSIENT tables
Stored procedures (SPL, NZPLSQL) Snowflake Scripting / JavaScript / Python procedures
BTEQ / nzsql scripts SnowSQL / Snowflake CLI scripts, dbt, tasks

Use a conversion tool (Snowflake's SnowConvert supports Teradata and others) for DDL, views, procedures and BTEQ, then review the flagged items manually.

3. Move historical data

  1. Export tables to compressed files (TPT export / nzunload / external tables) — Parquet if possible, otherwise gzip CSV.
  2. Upload to cloud storage close to the Snowflake account (AzCopy/S3 CLI, or offline devices for hundreds of TB).
  3. Load with COPY INTO from an external stage:
CREATE STAGE mig_stage URL='azure://stmig.blob.core.windows.net/export/' STORAGE_INTEGRATION = mig_int;
COPY INTO edw.sales.transactions
FROM @mig_stage/transactions/
FILE_FORMAT = (TYPE = PARQUET) MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE
ON_ERROR = ABORT_STATEMENT;

Use a dedicated larger warehouse for bulk loads and suspend it afterwards.

4. Rebuild incremental loads

Point ingestion at Snowflake (Snowpipe for files, connectors/partners for CDC) and re-implement transformation jobs (dbt or Snowflake tasks). Run them in parallel with the old warehouse.

5. Test and reconcile

  • Row counts and checksums per table (HASH_AGG(*) in Snowflake vs. equivalent aggregates in the source).
  • Report-level comparison: top 50 reports run against both, results diffed.
  • Performance: top queries from step 1 within agreed thresholds; tune with clustering keys or materialised views only where needed.

6. Cut over

Freeze the old warehouse for writes, run a final incremental sync, switch BI connections (Power BI, Tableau, MicroStrategy) and ODBC/JDBC users, and keep the old system read-only for an agreed period.

Tip

Set up Snowflake cost guardrails before users arrive: resource monitors per warehouse, auto-suspend at 60 seconds, and separate warehouses for loads, BI and data science.

Checklist

  • Usage-based inventory; unused objects excluded
  • DDL/SQL/procedures converted and reviewed
  • History loaded and reconciled
  • Loads rebuilt and running in parallel
  • BI switched; resource monitors on; appliance decommissioned