← Project Snowbridge Phase 02 · Source-to-Target Mapping
02Source-to-Target Mapping

The migration doesn't live in the pipeline. It lives in the map.

A source-to-target field map is the one artifact where a SQL Server EDW and its Snowflake replacement have to agree on what the data means. Get it right and the build is mechanical. Get it wrong and every downstream report inherits the error — silently.

The load-bearing artifact

Every other migration document describes the work. The field map is the work — it's the only place the legacy schema, the new schema, and the business meaning are reconciled in one row.

Code conversion, data foundation build, and report migration all resolve back to it. When the mapping is complete and signed off, the engineers know exactly what to build and the analysts know exactly what will change. When it's ambiguous, the ambiguity doesn't disappear — it gets resolved by whoever writes the SQL, quietly, without the business in the room. That's how a migration that "passed testing" still breaks trust on go-live day.

Anatomy of one row

What a real mapping row has to answer

One row of a field map is a contract between two systems and several teams. Each cell closes a specific question — and each is a place the migration can go wrong. Select a cell to see what it carries and what the TPM owns there.

↓ Select any cell

Where it breaks

Five failure modes the mapping is built to catch

01 · Grain mismatch

Source is one row per opportunity per daily snapshot; target is modeled as one row per opportunity. Join it wrong and every sum inflates by the number of snapshots.

Caught by: stating grain explicitly on both sides of the row, before anyone writes a join.

02 · Silent type coercion

MONEY carries 4 decimal places; a careless cast to NUMBER(18,2) truncates fractions of a cent across millions of rows. No error is thrown. The totals are just quietly wrong.

Caught by: pinning target precision and scale in the row, then reconciling sums to tolerance.

03 · Orphaned downstream reports

A Tableau workbook binds to [CloseAmt]. The target renames it CLOSE_AMOUNT_USD. Nothing warns you — the report just returns null or fails to refresh after cutover.

Caught by: tracing every field to its downstream consumers as part of the map, not after.

04 · Ownership ambiguity

Two teams read the same source field differently — "close amount" is booked vs. forecasted revenue. Without a named owner, the disagreement surfaces at UAT, not design.

Caught by: a business owner per row who signs off on the meaning, not just the plumbing.

05 · Assumed referential integrity

Snowflake accepts PRIMARY KEY and FOREIGN KEY constraints but doesn't enforce them. Orphan rows the source database would have rejected now load clean into the target.

Caught by: moving integrity checks out of the schema and into the reconciliation suite.

SQL Server → Snowflake · the realities the map surfaces

Why "lift and shift" isn't a mapping strategy

These aren't the engineer's problem to solve alone — they're the risks a TPM has to know exist, so the map plans for them and the schedule sizes them. A sample of what the row has to account for:

SQL Server
Snowflake
Why it matters to the plan
MONEY
NUMBER(19,4)
Precision and scale must be declared, not inferred. Wrong scale silently truncates currency.
DATETIME
TIMESTAMP_NTZ
Time-zone handling differs; picking the wrong timestamp flavor shifts every date-bounded report.
IDENTITY column
SEQUENCE / AUTOINCREMENT
Surrogate keys aren't drop-in. Re-seeding wrong breaks joins between migrated fact and dimension tables.
T-SQL stored procs
Snowflake Scripting
Procedural code is rewritten, not translated — this is the bulk of the code-conversion workstream, not a mapping line.
Case-insensitive collation
Case-sensitive default
Joins and filters on text keys that "just worked" can quietly return fewer rows after cutover.

The manager's seat

What the TPM owns — without writing a line of SQL

From the field

On a revenue-data platform migration, I owned the source-to-target mapping and the cross-team coordination around it. The workbook became the program's single source of truth — and its per-object sign-off gate. Objects didn't move until the business owner had signed the meaning, not just the mapping.

// Generalized from hands-on work — details defensible in conversation

Take the artifact

The field-mapping workbook, as a template

The reusable structure behind this page — source object and field, type and grain, transformation logic, target, validation rule, and owner — as a workbook you can adapt to your own migration.

↓ Field-mapping workbook · template

Placeholder link — the workbook is the next artifact to build.