FabricFabricAirlift
Source systems

Azure Synapse

Import Synapse and ADF metadata, generate Databricks implementation files, and govern migration evidence from assessment through cutover.

Build a Synapse-to-Databricks migration

Airlift’s Synapse path combines a governed warehouse plan with a native ADF export importer and concrete Databricks file generator. The outputs are not a presentation checklist: they include dependency order, target mappings, materialized Workflow, Python, BDD, and Asset Bundle files, transfer proof requirements, explicit repair work, and immutable digests used by the migration ledger.

Use it for dedicated SQL pools, serverless SQL pools, or mixed Synapse workspaces. The Lakebridge handles admitted SQL analysis and conversion. Airlift inventories data, external storage, workloads, permissions, pipelines, linked services, triggers, notebooks, and downstream consumers, then controls how implementation and evidence converge.

What Airlift adds to a Synapse migration

InputAirlift outputWhere execution happens
normalized Synapse inventoryaccepted object counts, dependency order, exclusions, dead assets, distributions, partitions, locations, and ownersAirlift assessment and inventory actions
ADF/Synapse ARM or Git exportcredential-free ETL IR plus concrete Workflow, Python, BDD, configuration, and Asset Bundle fileslocal or CI generation, then Runway release execution
unsupported SQL or activitiesclassified agent-repairable or human-only residue with required skillHarness-backed repair or the Airlift remediation workbench
external table locations and dedicated-pool scopesnapshot plus incremental-catch-up contract and required restart/reconciliation proofsadmitted transfer adapter and durable worker workflow
source object typesUnity Catalog, Delta, Lakeflow, Databricks SQL, notebook, grant, connection, and consumer-runbook target blueprintimmutable release submitted to Runway
migration contextschema, row, aggregate, checksum, query, business, security, schedule, performance, cost, and Power BI suitesFabric Experiments; evidence returns to Airlift

Airlift owns the migration ledger and the decisions that advance it. It does not copy a SQL transpiler, deployment engine, or test engine into the application. That boundary is what lets a developer replace an adapter without losing governance or historical evidence.

StageSpecialist executionWhat Airlift governs
discoverLakebridge Profiler and Analyzer process Synapse SQL and ADF exportsaccepted scope, versioned inventory, dependencies, exclusions, owners, and report digests
planthe accepted inventory drives Databricks target designdependency-aware waves, economics, staffing, target blueprint, and human residue
convertMorpheus converts supported Synapse T-SQL and the ADF adapter generates admitted orchestration filesattempts, exact tool versions, immutable diffs, warnings, and residue disposition
move dataadmitted adapters execute snapshot and incremental catch-upwatermarks, manifests, lag, restart checkpoints, rejects, and reconciliation
validateExperiments executes source/target scenariosindependent object-specific evidence returned by reference and digest
certifyAirlift evaluates the assigned evidence profilea system-minted signed certificate bound to artifacts, snapshots, evidence, and policy
cut overthe admitted effector changes client endpoints and schedulesfrozen scope, separation of duties, checkpoint, apply once, verify, compensation, and rollback
modernizeengineers adopt Unity Catalog, Delta, Lakeflow, and Databricks SQLa separate release with its own measurements and acceptance evidence

1. Prepare the manifest

Create synapse-manifest.json. Do not put credentials, tokens, or connection strings in this file.

{
  "schemaVersion": 1,
  "estate": {
    "name": "Finance warehouse",
    "variant": "synapse_dedicated_sql",
    "synapseVersion": "10.0",
    "sourceSnapshot": "2030-01-15T12:00:00.000Z"
  },
  "inventory": [
    {
      "sourceId": "schema:finance",
      "name": "finance",
      "kind": "schema",
      "sourcePath": "finance",
      "owner": "finance-data"
    },
    {
      "sourceId": "table:finance/ledger",
      "name": "ledger",
      "kind": "table",
      "sourcePath": "finance.ledger",
      "owner": "finance-data",
      "dependencies": ["schema:finance"],
      "distribution": "hash",
      "distributionColumns": ["account_id"],
      "partitionColumns": ["posting_date"]
    }
  ],
  "adfExport": { "resources": [] }
}

Supported inventory kinds are schema, table, view, stored_procedure, function, external_table, copy_statement, polybase_object, workload_group, permission, pipeline, linked_service, trigger, notebook, and consumer.

Mark retired objects with dead: true. Use excludedReason for an explicit scope decision. Add unsupportedReasons to route known dynamic SQL, cross-database behavior, side effects, or ambiguous distribution logic into remediation.

2. Inspect before creating work

fa source inspect synapse
fa synapse inspect --file synapse-manifest.json

The command validates references, rejects duplicate IDs and missing dependencies, and reports in-scope inventory, ETL task count, residue count, human-residue count, and the prospective bundle digest. A dependency cycle fails the command instead of silently inventing an execution order.

To preview task routing without materializing files:

fa synapse compile-adf --file TemplateForWorkspace.json --json

That command returns execution-neutral task mappings only. To import a native export and generate actual file bodies, use the migration IR workflow:

fa migration-ir import --source adf-synapse \
  --file TemplateForWorkspace.json \
  --estate-name "Finance pipelines" \
  --snapshot-at 2030-01-15T12:00:00Z \
  --output migration-ir.json
fa migration-ir generate --file migration-ir.json --out-dir generated
fa migration-ir validate --file generated/artifact-set.json --root generated

Linked services become credential-binding requirements; credential properties are never copied into IR. Unknown activities remain source-preserved remediation rather than being silently dropped.

3. Generate and register the bundle

fa synapse plan --file synapse-manifest.json --json > synapse-plan.json

Store synapse-plan.json in your admitted immutable artifact store. Then register its reference with the active engagement and Synapse estate:

fa synapse register \
  --file synapse-plan.json \
  --engagement-id eng_01ARZ3NDEKTSV4RRFFQ69G5FAV \
  --estate-id est_01ARZ3NDEKTSV4RRFFQ69G5FAV \
  --artifact-id volumes/migration/plans/synapse-plan.json \
  --idempotency-key finance-synapse-plan-v1

register invokes airlift.artifact_register; it does not upload the file. The API derives organization and actor identity from the authenticated principal. The artifact reference and the bundle share the same digest, so replacing the referenced content is detectable.

4. Execute the factory

Before accepting generated workbench artifacts, inspect the exact repository route:

fa source constructs synapse \
  --variant synapse_dedicated_sql \
  --construct adf.copy \
  --artifact-kind target_code

The construct catalog is the shared source for Synapse/ADF assessment lanes, Migration IR routing, and v2 artifact admission. A new artifact whose declared construct, disposition, or target disagrees with the exact catalog row is rejected without an event. Historical rows remain replayable and visible, but the App marks their route as diverged or unrecognized so an operator can regenerate or review them. Catalog alignment is implementation metadata; it does not create a capability claim or prove workspace behavior.

Open Active sources → Azure Synapse inside the active engagement, or use the corresponding CLI surfaces:

fa assessment list --estate-id <estate>
fa plan list --engagement-id <engagement>
fa conversion batch list --engagement-id <engagement>
fa residue list --engagement-id <engagement>
fa transfer list --estate-id <estate>
fa deployment list --estate-id <estate>
fa validation list --estate-id <estate>
fa cutover list --estate-id <estate>
fa modernization list --engagement-id <engagement>
fa engagement status <engagement>
fa engagement status <engagement> --json

The engagement status view shows Azure Synapse → Databricks Lakehouse, all eight delivery phases, the number of governed objects at each stage, open human residue, validation blockers, active certificates, and the next action. It derives these values from admitted records; developers do not edit the percentage.

The generated bundle tells these stages what must exist; the governed actions record what actually happened. Converter success never certifies an object. Deployment success never proves parity. A certificate is minted only after the current validation profile has admitted evidence for every required track.

Target and movement behavior

Airlift proposes Unity Catalog schemas and grants, Delta tables, external locations, Lakeflow pipelines and jobs, Databricks SQL assets, notebooks, connection bindings, validation assets, and Databricks Asset Bundle resources. Runway owns deployment, promotion, and rollback and returns immutable release references to Airlift.

The Synapse transfer profile is snapshot plus incremental catch-up. Before completion, the project must record stable snapshot identity, source watermarks, deletes, late data, schema drift, restart checkpoints, bounded concurrency, throughput, rejects, and reconciliation. These are executable evidence requirements, not prose reminders.

Human remediation is part of the product

Cross-database transactions, external side effects, custom activities, and ambiguous business semantics are intentionally visible. Airlift creates priced, assignable residue instead of hiding that work inside an automation percentage. A specialist can repair the artifact, record independent validation, and submit it for human review without bypassing the certificate policy.

Security properties

  • source exports contain metadata and code, never live credentials;
  • linked services are represented as opaque connection-binding requirements;
  • every remote mutation uses authenticated identity, tenant scope, policy, audit, and a stable idempotency key;
  • Airlift references Experiments and Runway results by ID and digest and never re-owns their state;
  • cutover remains blocked until frozen scope, approvals, fresh evidence, and effector certification all pass.

See Synapse CLI commands for command and exit semantics.

Read a development journey

When a team exercises the Synapse factory before production reviewers and effectors are available, Airlift records the result as Development evidence. Use the CLI and App to inspect what actually passed:

fa engagement status <engagement-id>
fa validation list --engagement-id <engagement-id>
fa validation runs --object-id <object-id>
fa certificate list --object-id <object-id>
fa transfer list --engagement-id <engagement-id>
fa cutover status <wave-id>

In the App, open the engagement’s Migration status, Artifacts, and Run ledger; then open Assurance center and Cutover control. A complete development exercise should show converted and development-certified objects, a completed validation execution, a reconciled transfer, and a rehearsed wave. It should also show that production is still blocked. See Development assurance for the exact boundary and expected UI state.

Prove generation without a source account

Run import, generate, and validate against a credential-free ARM or Git export. This proves parsing, dependency preservation, file materialization, and digest integrity. It is account-independent, so the maximum result is hermetic_proven; it does not prove source connectivity or Databricks behavior.

Add live workspace execution, Experiments verdicts, a Runway release, transfer restart evidence, and current provider generations before promoting the relevant capability cells to workspace_proven. Representative client behavior and production cutover remain separate evidence levels. See Capability certification for the proof model.

Run the authenticated sandbox journey

The isolated sandbox can execute the same account-independent provider through the real Temporal parent workflow and show durable progress in the engagement Run ledger. An administrator must first prepare one exact governed candidate in the shared PostgreSQL ledger:

  • one active engagement bound to one Synapse estate;
  • one verified Synapse source connection;
  • one planned transfer whose non-empty object scope belongs to that estate;
  • one requested deployment whose artifacts cover exactly the transfer objects;
  • assigned validation profiles for those objects.

Open Engagements → engagement → Run ledger and select Start Synapse journey. The server accepts only organization and engagement from the form, resolves the provider IDs from canonical projections, verifies the signed-in natural person and governed transfer permission, and starts or attaches to a request-bound workflow on airlift-sandbox-v1. An exact retry of the same browser request collapses to the open workflow; a later retry after terminal failure receives a fresh workflow and run-ledger row for the same governed scope. Temporal activities record discovering, assessing, converting, transferring, deploying, validation, and terminal state through Platform Host. Refreshing or reconnecting reads the same replayable PostgreSQL projection.

After deployment the journey pauses at awaiting_validation_request. This is deliberate: the worker does not manufacture operator authority. Create the exact governed validation request in Validation, then wake the existing workflow through the supported validation control. The hermetic provider cannot mint business acceptance, production certification, or a client cutover decision.

The browser lane has the same permanent maximum result as the CLI lane: hermetic_proven. Seeing a completed workflow in the sandbox is not live Synapse or Databricks workspace evidence.

Certify and cut over

Use object-type-specific profiles for tables, SQL routines, pipelines, permissions, and consumers. Airlift mints signed certificates only from current admitted validation evidence. Cutover then rechecks the frozen wave, certificates, approvals, deployment digests, operational window, and certified effector before it permits an apply-once effect. Failure and uncertainty retain a governed rollback or reconciliation path.

Complete developer command sequence

Generate this exact recipe from the installed CLI so the guide and executable surface stay in sync:

fa source recipe synapse
fa source recipe synapse --variant synapse_dedicated_sql --json > .airlift/synapse-recipe.json

The App is engagement-aware. Azure Synapse appears under Active sources only after the source estate is added to an active engagement. The menu is derived from governed engagement scope; installing Airlift does not expose unrelated source pages.

Every remote mutation below requires --host, --org, authenticated workspace identity, and a stable --idempotency-key. JSON request files contain identifiers, artifact references, and opaque credential references—never passwords, tokens, or connection strings. Run fa <resource> <operation> --help for the current schema and exit semantics.

0. Inspect the source contract

fa source inspect synapse --json > .airlift/synapse-profile.json
fa source plan synapse --variant synapse_dedicated_sql --json > .airlift/synapse-capability-plan.json

Expected artifacts:

  • .airlift/synapse-profile.json
  • .airlift/synapse-capability-plan.json

Open Engagements → active engagement in the App. This stage is visible at /engagements after replacing the placeholder ID with the governed engagement ID.

1. Create governed scope and connection references

fa engagement create --file engagement.json --idempotency-key migration-create-v1
fa estate register --file synapse-estate.json --idempotency-key synapse-estate-v1
fa connection register --file synapse-connection.json --idempotency-key synapse-connection-v1
fa engagement update --file synapse-scope.json --idempotency-key synapse-scope-v1
fa engagement preflight <engagement-id>

Expected artifacts:

  • Governed engagement
  • Source estate
  • Opaque connection binding

Open Engagements → active engagement in the App. This stage is visible at /engagements/<engagement-id> after replacing the placeholder ID with the governed engagement ID.

2. Assess and accept inventory

fa assessment start --file synapse-assessment-start.json --idempotency-key synapse-assessment-start-v1
fa assessment status <assessment-id> --json
fa assessment record --file synapse-assessment-record.json --idempotency-key synapse-assessment-record-v1
fa assessment accept --file synapse-assessment-accept.json --idempotency-key synapse-assessment-accept-v1
fa inventory list --estate-id <estate-id> --json

Expected artifacts:

  • Assessment report reference
  • Normalized inventory
  • Dependency graph

Open Engagements → active engagement in the App. This stage is visible at /engagements/<engagement-id>/sources/synapse after replacing the placeholder ID with the governed engagement ID.

3. Compile Synapse and ADF artifacts

fa synapse inspect --file synapse-manifest.json
fa synapse plan --file synapse-manifest.json --json > generated/synapse-plan.json
fa migration-ir import --source adf-synapse --file TemplateForWorkspace.json --estate-name "Source pipelines" --snapshot-at <iso-timestamp> --output generated/migration-ir.json
fa migration-ir generate --file generated/migration-ir.json --out-dir generated
fa migration-ir validate --file generated/artifact-set.json --root generated

Expected artifacts:

  • Synapse plan
  • Databricks Asset Bundle
  • Workflow/Python files
  • BDD specifications
  • Artifact set digest

Open Engagements → active engagement in the App. This stage is visible at /engagements/<engagement-id>/artifacts after replacing the placeholder ID with the governed engagement ID.

4. Convert, move, and remediate

fa plan generate --file synapse-migration-plan.json --idempotency-key synapse-plan-v1
fa conversion batch create --file synapse-batch.json --idempotency-key synapse-batch-v1
fa conversion batch start --file conversion-batch-start.json --idempotency-key conversion-start-v1
fa residue list --engagement-id <engagement-id>
fa transfer plan --file synapse-transfer.json --idempotency-key synapse-transfer-v1
fa transfer run <transfer-id> --idempotency-key transfer-run-v1
fa transfer reconcile <transfer-id> --idempotency-key transfer-reconcile-v1

Expected artifacts:

  • Target artifacts
  • Residue cases
  • Transfer checkpoints
  • Reconciliation evidence

Open Engagements → active engagement in the App. This stage is visible at /engagements/<engagement-id>/runs after replacing the placeholder ID with the governed engagement ID.

5. Validate independently and inspect discrepancies

fa validation run --file synapse-validation.json --idempotency-key synapse-validation-v1
fa validation status <validation-execution-id> --json
fa discrepancy list --engagement-id <engagement-id>
fa artifact list --engagement-id <engagement-id>

Expected artifacts:

  • Provider run references
  • Readiness evidence
  • Discrepancies

Open Engagements → active engagement in the App. This stage is visible at /engagements/<engagement-id>/runs after replacing the placeholder ID with the governed engagement ID.

6. Certify, cut over, and export evidence

fa certificate list --object-id <object-id>
fa cutover status <wave-id> --json
fa evidence list --engagement-id <engagement-id>
fa evidence export --file synapse-evidence-export.json --idempotency-key synapse-evidence-export-v1

Expected artifacts:

  • Migration certificates
  • Cutover evidence
  • Content-digested evidence export

Open Engagements → active engagement in the App. This stage is visible at /assurance after replacing the placeholder ID with the governed engagement ID.

Runway executes releases; Experiments owns validation verdicts; Airlift owns migration readiness and cutover policy.

What developers see in the App

The contextual source workspace shows the accepted estate and the factory stages for this engagement. Artifacts displays immutable references, content digests, media types, and provider lineage. Runs displays assessment, conversion, transfer, validation, and deployment executions without treating a provider's success as an Airlift verdict.

Only sources attached to the active engagement appear in navigation and in the source workspace.

What you are seeing

The workspace combines source inventory, evidence, and lifecycle status without copying provider-owned state.

What to do next

Run the assessment recipe and admit the resulting inventory and dependency evidence.

Read the developer workflow

Migration status is calculated from terminal governed evidence, with the first incomplete gate identified explicitly.

What you are seeing

A blocker names the missing decision, artifact, validation result, or review that prevents the next gate.

What to do next

Open the blocker action instead of editing the percentage or marking the phase complete manually.

Read the developer workflow

The artifact explorer answers which exact bytes are being validated, deployed, reviewed, and certified.

What you are seeing

Airlift stores immutable references and digests, not source code bodies or credentials.

What to do next

Open an artifact to inspect its lineage and copy the digest used by validation and release requirements.

Read the developer workflow

The run ledger links provider-owned executions to the governed engagement without copying their internal state.

What you are seeing

A provider success remains evidence to evaluate; it does not automatically advance Airlift readiness.

What to do next

Open the relevant run reference and verify that its digest, scope, producer, and verdict match the gate.

Read the developer workflow

These are automated captures from public synthetic engagements. The source workspace is specific to Azure Synapse; no unrelated source is presented as its migration journey. For sources without an evidence-backed journey, the image demonstrates setup, navigation, and developer entry points only—not a live connection, converted output, or certified migration. No client data, credentials, workspace hostnames, or internal deployment identifiers are embedded in the images.

On this page