Synapse Migration
MicrosoftOfficialPublished by Microsoft
- Skill
- Workflow
- Software development
- MIT
- Low risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The synapse-migration skill provides a structured, phased workflow for transitioning Synapse Analytics workspaces to Microsoft Fabric. It covers the migration of Spark items, Lake Databases, Linked Services, and Dedicated SQL Pool schema and stored procedures. The skill emphasizes a dependency-ordered approach, requiring gap assessment and explicit approval before conversion. It distinguishes between migrating to a Fabric Lakehouse (schema and code only, no data movement) and a Fabric Warehouse, while providing specific routing for dependent pipeline callers.
What it does
- Discovers and classifies Synapse workspace artifacts.
- Converts Dedicated SQL Pool schema and stored procedures to Spark SQL notebooks or Warehouse objects.
- Migrates Spark items, including notebooks and Spark Job Definitions, to Fabric equivalents.
- Maps Linked Services to Fabric Data Connections or OneLake Shortcuts.
- Manages the migration of approved dependent pipeline callers.
- Validates persisted definitions and artifacts against established contracts.
When to use it
- When migrating a full Synapse workspace to Microsoft Fabric.
- When converting Dedicated SQL Pool schema and procedures to a Lakehouse or Warehouse.
- When porting Spark pools, notebooks, or Spark Job Definitions to Fabric.
- When replacing Synapse Linked Services with Fabric-native connectivity.
Advantages
- Ensures dependency-ordered migration to maintain system integrity.
- Provides clear routing for different workload types (Lakehouse vs. Warehouse).
- Enforces strict validation and approval gates for behavior-changing decisions.
- Supports incremental migration rather than high-risk big-bang cutovers.
- Standardizes the conversion of T-SQL procedures to executable Spark SQL notebooks.
Usage examples
- “Migrate this Dedicated SQL Pool DACPAC to a Fabric Lakehouse and convert the procedures.”
- The agent will assess gaps, obtain approval for procedure-to-notebook mappings, create a migration manifest, convert schema/code artifacts, and validate the results.
- “Migrate this Dedicated SQL Pool to Fabric Warehouse.”
- The agent will assess DDL compatibility, remove unsupported distribution/index declarations, obtain provisioning consent, and prepare for potential data migration.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/microsoft/synapse-migration/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip synapse-migration.zip -d .agents/skills
Documentation by Microsoft
Telemetry — MANDATORY. Every
api.fabric.microsoft.comcall must carryx-ms-fabric-skill: synapse-migration(az rest:--headers "x-ms-fabric-skill=synapse-migration"), including every LRO poll,fabric_lroand retry. Snippets omit it — add it anyway.
OFFLINE LAKEHOUSE ARTIFACT FAST PATH — DECIDE FIRST. For a no-live-call request with complete supplied inputs and contracts, load only the fast path; do not load
migration-planning-reference.md,dedicated-pool-conversion.md, or implementation scripts. Use one generator for artifacts and final-byte hashes, then one verifier. Do not inspect generated files or run post-pass spot checks. For every optional non-null source default, setmissingValueBehaviortoUseSourceDefaultand restore that default before validation. Do not use this path for a Warehouse target; incomplete and large-procedure requests use their own routes.
CRITICAL NOTES
To find workspace details (including its ID) from a workspace name: list all workspaces, then use JMESPath filtering.
To find item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace, then use JMESPath filtering.
Treat a source Dedicated SQL Pool as read-only. Do not run source DDL, DML, stored procedures, or create sample objects.
Dedicated Pool-to-Lakehouse data movement is out of scope. Migrate schema and executable code artifacts only; do not copy source rows or run row-level/business-result equivalence queries. The separate Warehouse route may move data only from a separately approved restored export copy under its own consent gate and restored-source contract.
For Dedicated Pool-to-Lakehouse requests, complete gap assessment, explicit mapping approval, manifest creation, conversion, deployment, and validation in order. Read dedicated-pool-to-lakehouse.md once as the router, then load only the current phase reference.
Stored-procedure
1:1,N:1, andN:Nmappings never apply to views. Views remain schema objects; procedures become traceable Spark SQL notebooks with executable%%sqltransformation cells.Dependent ADF/Synapse callers are conditional scope, not automatic scope. Discover them during assessment, require a separate complete-closure approval, and migrate them only after notebook readiness. Route standalone pipeline requests to
pipeline-migration.Before executing a specialized Dedicated Pool workflow, read the matching contract in dedicated-pool-execution-contracts.md. Its validation, hashing, request-body, resume, and completion-language requirements are mandatory.
Keep Lakehouse and Warehouse paths separate. If the target is unclear, ask before loading path-specific resources. Lakehouse conversion never moves source rows; Warehouse data migration requires its own explicit consent gate and restored-source contract.
For a Fabric Warehouse target, explicitly state that the complete
DISTRIBUTIONandCLUSTERED COLUMNSTORE INDEXdeclarations are removed because Fabric manages distribution, storage, and indexing; a bare mention of either source clause is insufficient.Run setup DDL and CETAS only against the separately approved restored export copy after proving it is not the original production source.
Synapse Analytics to Microsoft Fabric Migration
Core Workflow
Discover the Synapse workspace and classify every source artifact.
Choose targets using workload-routing.md.
Assess gaps before conversion, including runtime, library, connectivity, T-SQL, security, and capacity constraints.
Obtain approval for behavior-changing decisions, target placement, and every stored-procedure-to-notebook mapping.
Create or update
migration-manifest.jsonand persist approval, per-object status, hashes, and checkpoints atomically.Convert and deploy in dependency order, loading only the current phase resource.
Validate persisted definitions and artifacts without executing generated notebooks or pipelines unless a separately approved workflow explicitly requires execution.
Report completed, blocked, skipped, and pending objects without exposing credentials or sensitive values.
For full-workspace orchestration, read migration-orchestrator.md. For a Dedicated Pool-to-Lakehouse migration, use dedicated-pool-to-lakehouse.md as the phase router. For a Warehouse target, load only the matching dw-* resource.
Scope Routing
| Request | Action | Load |
|---|---|---|
| Full Synapse workspace migration | Run phased discovery and migration | migration-orchestrator.md |
| Dedicated SQL Pool schema/code to Lakehouse | Run the strict assessment-to-validation workflow. For guidance-only notebook publication, explicitly state: "The stored procedures were converted from T-SQL to Spark SQL before publication." | dedicated-pool-to-lakehouse.md |
| Guidance-only Dedicated Pool incremental deployment hardening | Answer directly from the focused checklist; do not search scripts or load phase resources. State: "For columns with special characters, enable Delta columnMapping selectively and only with approval." | dedicated-pool-execution-contracts.md |
| Large or complex stored procedure | For a complete offline contract, read only the audit resource once, use one run-local generator and one verifier, do not inspect implementation scripts or generated outputs, and stop after successful verification | dedicated-pool-large-procedure-audit.md |
| Spark pool | Convert configuration and libraries to a Fabric Environment | spark-pool-migration.md |
| Lake Database or HMS | Create or bind the target Lakehouse | lake-database-migration.md or external-hms-migration.md |
| Notebook or Spark Job Definition | Port code, bindings, parameters, and runtime settings | spark-item-migration.md |
| Linked Service | Choose a Fabric Data Connection for external services or a OneLake Shortcut for ADLS Gen2/Blob | connectivity-migration.md |
| Approved dependent procedure callers | Run the internal closure-preserving sub-flow after notebook readback | dedicated-pool-dependent-pipelines.md |
| Standalone pipeline migration | Delegate | pipeline-migration |
| Dedicated SQL Pool to Fabric Warehouse | Run the source extraction, DDL compatibility, approval, optional data, security, and validation route | dw-source-and-extraction.md, then the matching dw-* phase resource |
| Standalone Fabric Warehouse administration | Delegate | sqldw-cli |
| Synapse Link | Use Fabric Mirroring; not covered here | — |
Always report the Lake Database/HMS phase. If none is discovered, mark it NotApplicable (none discovered) while retaining the required target Lakehouse binding.
Load References On Demand
Do not preload all files. Load only the references needed for the current phase:
| Need | Reference |
|---|---|
| Routing, phase order, API audiences, quick examples, troubleshooting, or post-migration handoff | workload-routing.md |
| Dedicated Pool execution variants and response contracts | dedicated-pool-execution-contracts.md |
| Dedicated Pool discovery | dedicated-pool-discovery.md |
| Gap assessment and mapping approval | dedicated-pool-gap-assessment.md |
| Procedure conversion and notebook shape | dedicated-pool-conversion.md |
| Schema/notebook deployment | dedicated-pool-deployment.md |
| Dedicated Pool validation | dedicated-pool-validation.md |
| Runtime/library compatibility | feature-parity.md and library-compatibility.md |
mssparkutils and connector refactoring | utility-api-mapping.md, connector-refactoring.md, and code-patterns.md |
| Capacity planning | capacity-sizing.md |
| Dedicated Pool-to-Warehouse source discovery and extraction | dw-source-and-extraction.md |
| Warehouse DDL compatibility and deployment | dw-ddl-compatibility.md |
| Separately approved Warehouse data migration | dw-data-migration.md |
| Warehouse security and validation | dw-security-validation.md |
| Validation, reporting, and production readiness | validation-testing.md, migration-report.md, and security-governance.md |
Use COMMON-CLI.md only for shared authentication and az rest mechanics not already covered by the phase resource. Use COMMON-CORE.md only for shared Fabric REST patterns.
Must
Preserve every stored-procedure input contract, source default, source decision, and approved target mapping.
Block conversion until gap dispositions, notebook names, dependency grouping, and target workspace placement are explicitly approved.
Use SqlPackage/DMVs for source discovery, Fabric REST for item management, and Fabric Livy statements for Lakehouse schema and Delta execution.
Run the maintained validators required by the selected execution contract; never replace them with ad hoc JSON or cell-shape checks.
Choose the Lakehouse or Warehouse target before loading implementation resources; never apply Warehouse data-movement rules to Lakehouse artifact conversion.
Before persisting any dependent-pipeline source definition, recursively inspect it for secret-bearing or uncertain properties; block the complete selected closure without writing the artifact or mutating a target when any are found.
In every dependent-pipeline response, including guidance-only and pre-approval explanations, state: "Use a
TridentNotebookactivity with exact target identitiestypeProperties.notebookIdandtypeProperties.workspaceId, and pass inputs throughtypeProperties.notebookParameters." Then state: "After deployment, read back each pipeline withPOST /v1/workspaces/{workspaceId}/items/{dataPipelineId}/getDefinitionand validate its canonical hash and structural bindings."For every Linked Service response, first state both replacement classes: Fabric Data Connections for external databases/services and OneLake Shortcuts for ADLS Gen2/Blob storage; then identify which class applies.
Replace
mssparkutilswithnotebookutils, Linked Services with the correct Fabric connection class, andspark.read.synapsesql()with a supported OneLake or JDBC pattern.Externalize workspace and item IDs through parameters or Variable Libraries.
Keep phase status concise, emit bounded heartbeats for long operations, and persist per-object evidence in the manifest.
Prefer
OneLake Shortcuts over copying data.
Fabric Environments for reproducible libraries and Spark settings.
Incremental, dependency-ordered migration over big-bang cutover.
Parameterized notebooks and Variable Libraries for environment promotion.
Lakehouse SQL Endpoint for compatible Serverless SQL Pool read workloads.
Avoid
Do not execute generated notebooks or pipelines as part of artifact migration.
Do not broaden a selected dependent-pipeline closure or route that internal sub-flow to
pipeline-migration.Do not use
sqlcmdagainst the target Fabric Warehouse; use the registered SQL endpoint tooling required by the Warehouse resource.Do not preserve Synapse distribution/storage hints, PolyBase DDL, Linked Service connection strings, or pool-level library installation patterns verbatim.
Do not use target notebooks to orchestrate the migration itself.
Do not hardcode workspace IDs, item IDs, credentials, connection strings, or environment-specific paths.
Examples
Prompt: "Migrate this Dedicated SQL Pool DACPAC to a Fabric Lakehouse and convert the procedures."
Response behavior: Assess gaps first, present and obtain approval for the complete procedure-to-notebook mapping and workspace placement, create the manifest, convert approved schema/code artifacts without moving source rows, validate persisted definitions, and report the resolved Lakehouse and artifact evidence.
Prompt: "Migrate this ADF pipeline to Fabric."
Response behavior: Route to pipeline-migration. Keep it here only when the pipeline is an explicitly approved dependent caller discovered inside an active Dedicated Pool-to-Lakehouse migration.
Prompt: "Migrate this Dedicated SQL Pool to Fabric Warehouse."
Response behavior: Keep this inside synapse-migration, assess DDL compatibility, remove unsupported distribution and columnstore declarations, obtain provisioning consent, and ask separately before any restored-source data migration.
For code transformations and edge cases, load workload-routing.md and the phase-specific resource rather than expanding the main instructions.
Files
- ATTRIBUTION.mdAdded by AutoGineer879 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md14.3 KiB
- apm.yml597 B
- references/dedicated-pool-execution-contracts.md14.5 KiB
- references/workload-routing.md6.0 KiB
- resources/capacity-sizing.md4.1 KiB
- resources/code-patterns.md8.4 KiB
- resources/connectivity-migration.md6.4 KiB
- resources/connector-refactoring.md13.8 KiB
- resources/dedicated-pool-conversion.md39.2 KiB
- resources/dedicated-pool-dependent-pipelines.md23.3 KiB
- resources/dedicated-pool-deployment.md20.0 KiB
- resources/dedicated-pool-discovery.md17.8 KiB
- resources/dedicated-pool-gap-assessment.md17.4 KiB
- resources/dedicated-pool-large-procedure-audit.md24.5 KiB
- resources/dedicated-pool-to-lakehouse.md17.9 KiB
- resources/dedicated-pool-validation.md17.2 KiB
- resources/dw-data-migration.md13.7 KiB
- resources/dw-ddl-compatibility.md9.4 KiB
- resources/dw-security-validation.md15.6 KiB
- resources/dw-source-and-extraction.md8.0 KiB
- resources/external-hms-migration.md20.2 KiB
- resources/feature-parity.md5.4 KiB
- resources/lake-database-migration.md34.8 KiB
- resources/library-compatibility.md7.2 KiB
- resources/migration-gotchas.md16.1 KiB
- resources/migration-orchestrator.md63.0 KiB
- resources/migration-planning-reference.md16.3 KiB
- resources/migration-report.md16.9 KiB
- resources/security-governance.md47.4 KiB
- resources/spark-item-migration.md19.2 KiB
- resources/spark-pool-migration.md16.3 KiB
- resources/utility-api-mapping.md5.4 KiB
- resources/validation-testing.md14.5 KiB
- scripts/Invoke-DedicatedPoolTool.ps1Script941 B
- scripts/dedicated-pool-tool/DedicatedPoolMessageSanitizer.csScript2.1 KiB
- scripts/dedicated-pool-tool/DedicatedPoolTool.csproj346 B
- scripts/dedicated-pool-tool/Program.csScript31.4 KiB
- scripts/dedicated_pool_runtime.pyScript116.9 KiB
- scripts/validate_dedicated_pool_spark.pyScript24.8 KiB
resources/dedicated-pool-validation.md
Dedicated Pool Validation
Validate converted artifacts locally and compare deployed Lakehouse schema metadata with the Synapse source catalog. Validation does not create or execute notebooks and does not read or compare source/target table rows.
Validation Layers
| Layer | Check | Execution surface | Blocking |
|---|---|---|---|
| L1 | Notebook JSON and Spark SQL syntax | nbformat checks plus target Spark parser | Yes |
| L2 | Schema names, types, precision, scale, nullability | Source catalog plus Livy/SQL endpoint | Yes |
| L3 | Object coverage, dependencies, parameters, and conversion dispositions | Manifest plus generated artifacts | Yes |
| L4 | Notebook definition and publication status | Fabric Items API | Yes |
| L5 | Source-block coverage, bounded attempts, and deployment-package integrity | Audit ledgers plus package verifier | Yes for audited procedures |
Local Checks
Defect #6 fix: Invoke python scripts/validate_dedicated_pool_spark.py --manifest <path-to-migration-manifest.json> --expected-procedure-namespace <procedure-key> [--nullable-parameter <exact-name> ...] [--parameter-validation <name>=<kind> ...] <procedure-artifacts...> once per parameterized procedure namespace to validate the manifest field contract, parse each normal procedure's .sql artifact, and parse every %%sql notebook cell with the installed PySpark version matching the target Fabric runtime. Every %%sql cell must contain exactly one Spark SQL statement after the magic. Combine multiple validation expressions into one SELECT projection rather than separating statements with semicolons. Do not pass one namespace while validating a mixed set of unrelated procedure notebooks. For an approved consolidated N:1 or N:N notebook, repeat --expected-procedure-namespace <procedure-key> once for every parameterized contributing procedure namespace; the notebook must transport at least one declared parameter under every supplied namespace. Do not pass --expected-procedure-namespace for a parameterless notebook because no parameter bridge can prove that namespace; verify each parameterless contributor's identity through the separately validated manifest mapping graph in L3. Supply --nullable-parameter only for mappings in the current invocation whose manifest contract proves an explicit nullable SQL default and collision-safe null token; omitting it makes null normalization blocking. Derive each repeatable --parameter-validation value from the manifest parameterMappings[].sourceParameter and validationRule, using only integer, decimal:<precision>:<scale>, date, timestamp, boolean, string, or nullable-string; for example, map DECIMAL(18,2) to decimal:18:2. For every scoped procedure record, this declared contract must match parameterMappings[].sourceParameter exactly once; malformed, duplicate, unsupported, missing, or extra entries block validation, including entries supplied for a parameterless notebook. The helper calls Spark's SQL plan parser (not logical/physical plan execution) and never executes a parsed plan. Any manifest validation or parser failure is blocking and must prevent artifacts from reaching Fabric mutation APIs. A missing matching PySpark runtime, invalid manifest parameter field, or parser failure (including TYPE NULL, invalid syntax, unsupported functions) blocks mutation.
Defect #8 & #9 fix: Require expected-schema.json emitted directly by the converter, validate its schema (including that all collection fields serialize as [] when empty, never null or [null]), and use it as the sole expected-value input for generated and deployed schema comparisons. Never reconstruct expected metadata from generated DDL or notebook text. Reject metadata reconstructed via regex parsing of generated SQL — only the structured JSON is authoritative.
Defect #7 fix: For every generated stored-procedure notebook, validate that:
Parameterized notebooks have one Python cell tagged
parameters, followed by one validation-only Python bridge that callsspark.conf.setwith scalar valuesObject-valued
{parameterName, defaultValue}entries under%%configure.confare rejectedAll transformation cells use
%%sqlmagic onlyNo cell contains PySpark DataFrame transformations (
df.,spark.read,.filter(),.select(), etc.)No cell contains Python-wrapped
spark.sql("""...""")callsNo Python cell reads/writes data, calls
spark.sql, or implements transformation logicNo
CREATE PROCEDURE,CREATE PROC, or unconverted source DDL appears in executable cells Reject any notebook violating these constraints before packaging or deployment.Parse every
.ipynbas nbformat v4 JSON and require the complete cell shape, stable IDs, empty outputs, null execution counts, and resolved Fabric dependency metadata defined by the conversion contract.Reject unresolved placeholders, embedded secrets, workspace or item IDs in executable SQL/cells, and IDs that do not match the approved resolved target. Require resolved workspace and Lakehouse IDs only in the notebook dependency metadata, manifest, and deployment fields defined by the conversion contract.
Confirm every manifest dependency exists.
Before conversion, packaging, or any target mutation, validate every procedure-to-table/view source-contract edge against the referenced object's discovered ordered projection using source collation semantics. Require the referencing and referenced stable IDs, referenced columns, projection evidence, exact missing-column set, and resolution status. An unknown projection or unresolved object/column is blocking evidence, not a warning.
For each failing source contract, require an object-level gap finding and a
ManualReviewRequiredsource decision with no generated notebook component. Block only procedures that depend on the failing edge; do not change the status or approved mapping of unrelated eligible procedures. Reject fabricated columns, dropped references, similarly named substitutions, and unapproved procedure redesigns.Verify the approved procedure cardinality and mapping graph. Every discovered procedure must reference all and only its approved target components, and every target Notebook must list all and only its approved contributing procedures. Reject missing, orphan, duplicate, or unapproved relationships, names, workspace placement, decompositions, or sharing.
Verify every source object has an approved target-component relationship,
ApprovedExclusion, or approved retirement.Deferred, a skip reason, orManualReviewRequiredstatus is not completion.For each audited procedure, rerun the generated verifier and require exact source and ledger hashes, contiguous non-overlapping spans covering 100% of source bytes, unique deterministic block IDs, complete attempt history within
maxAttemptsPerBlock, and onlyConverted,ApprovedExclusion, orManualReviewApprovedblock dispositions.Require every converted or manually approved block to map to existing notebook cell IDs and target statement hashes, and every target transformation statement to map back to source blocks or justified generated scaffolding. Validate cross-block control flow, parameters, dependencies, temporary objects, outputs, error handling, and retained audit/logging behavior.
Recompute every
deployment-package.jsonartifact hash and canonical conversion-manifest projection hash, and requireReadyForPublication. The projection excludes package self-reference and mutable deployment/readback fields. Reject an unlisted artifact, changed notebook, missing ledger/attempt record, source hash mismatch, or package created before validation completed.
Source-to-Target Schema Comparison
For each converted table definition, compare metadata only:
Column count and ordered schema mapping
Column names, mapped types, precision, and scale
Nullability and supported defaults
Table, schema, view, and dependency names
Unsupported constraints and physical-design features recorded in the gap report
Read expected names, order, mapped types, precision, scale, and nullability from converter-emitted expected-schema.json. Compare each decimal as the complete (type, precision, scale) tuple in the expected metadata, parser result, and persisted target catalog; a matching base type with different precision or scale is a blocker. The generated-SQL parser result proves the artifact implements the expected structure, but must never become the source of the expectation.
Do not run row-count, aggregate, sample, hash, or business-result queries.
Defect #30 fix: Integration test coverage using representative Dedicated Pool sources must track root-cause classification beyond pass/fail:
Test result schema: For each test run, record:
testId,source,status(Pass/Fail),failureCategory(null if Pass, else one of: ParserError, ConversionLogic, ParameterContract, SchemaValidation, DeploymentAPI, InfrastructureTransient, TestSetupError),rootCause(human-readable explanation),affectedObjects(list of procedure/table/view names),fixCategory(SkillCode, Documentation, TestFixture, UpstreamDependency, NotADefect), andtimestamp.Classification rules: Parser errors →
ParserError; incorrect SQL generation →ConversionLogic; parameter handling bugs →ParameterContract; schema mismatch →SchemaValidation; Fabric API failures →DeploymentAPI; transient network/auth issues →InfrastructureTransient; test fixture problems →TestSetupError.Reporting: Aggregate by
failureCategoryandfixCategoryto identify systematic issues vs one-off defects. Track defect recurrence across test runs.Test fixtures: Maintain isolated representative sources that cover supported behavior and edge cases. Preserve sanitized failing cases as regression fixtures after each fix.
Defect #5 & #10 fix: For generated Spark SQL DDL, require:
Nullable columns (
isNullable: truein source metadata): emitname TYPEwith no nullability constraint (omit bothNULLandNOT NULL)Required columns (
isNullable: falsein source metadata): emitname TYPE NOT NULLNever emit
TYPE NULL(Spark SQL parser error)Never reverse nullability semantics (nullable as
NOT NULLor required without constraint)
Reject:
Any occurrence of
TYPE NULLA missing
NOT NULLconstraint when source metadata marks the column required (isNullable: false)A
NOT NULLconstraint when source metadata marks the column nullable (isNullable: true)
Compare against structured source metadata in expected-schema.json; do not reparse generated SQL to determine the expected nullability. The converter's output expected-schema.json is the authoritative nullability source.
Defect #11 fix: For DECIMAL(p, s) and NUMERIC(p, s) columns, validate the complete (typeName, precision, scale) tuple from expected-schema.json against both the parser result and the persisted target catalog. A type-name match with different precision or scale is a blocking validation failure, not a warning. Precision and scale must be validated separately and explicitly.
Logic Artifact Validation
Defect #33 fix: Parser and external-operation failure handling:
Local Spark parser validation: Parse each SQL statement once with the installed target-runtime parser. Do not retry parser failures automatically; syntax and parser errors are terminal blockers that require correcting the artifact before rerunning the gate.
Remote token acquisition (
az account get-access-token, OAuth flows): Max 3 retries, 1s exponential backoff. Transient network (429, 500-504) retryable; 401/403 terminal (credential issue).Never retry indefinitely — all external calls must have bounded timeouts and max attempts.
Defect #34 fix: Conversion error reporting must include source context:
Schema:
{sourceSchema}.{sourceName}(e.g.,dbo.uspLoadFilteredCustomers)Source line: Original T-SQL line number in DACPAC/SQL project (if available from DacFx)
Block ID: Ledger block ID for audited procedures
Affected column/table: Specific unresolved column or table reference (e.g.,
vwComplex_UnifiedSales.ProductKey)Error category: ParserError, UnresolvedReference, UnsupportedSyntax, ParameterContract, etc. Example:
ConversionError: dbo.uspComplex_SalesExceptionScan (line 42, block B_004): Unresolved column reference 'vwComplex_UnifiedSales.ProductKey' - column not found in view definition
Defect #35 fix: Notebook JSON validation against nbformat 4.5+ schema:
Validate before deployment: Every generated notebook JSON must conform to nbformat 4.5+ schema
Required fields:
cells,metadata,metadata.language_info.name: python,nbformat: 4,nbformat_minor >= 5Cell validation: Every cell must have unique
idmatching^[A-Za-z0-9_-]{1,64}$,cell_type(code/markdown),metadata,sourceCode cell specifics:
outputs: [],execution_count: null(never saved outputs)Reject malformed or unrunnable JSON: Missing required fields, missing/blank/unsupported
metadata.language_info.name, invalid cell IDs, wrong nbformat versionUse nbformat Python library or schema validator before persisting to disk or deploying to Fabric
Validate Spark SQL with the target parser, notebook JSON with nbformat rules, the tagged parameter cell and validation-only Spark-conf bridge against source metadata, dependencies against the manifest, and notebook names/workspaces against the approved mapping. For 1:1, require the local basename and persisted Fabric display name to equal the exact discovered sourceName. For N:1 and N:N, require exact approved target names, contributing source IDs, dependency order, output boundaries, and source-block-to-cell provenance. For every supported source input, require exactly one parameter-cell variable whose name matches the Fabric Notebook Activity base parameter, one collision-safe procedure-qualified Spark-conf key, and every semantic use in %%sql to consume the mapped ${spark.synapseMigration...} property with an immediate type cast. Preserve exact source defaults; otherwise require Python None, required: true in the manifest, an approved Pipeline or parent-notebook caller, and a bridge check that rejects missing or type-invalid values before spark.conf.set. Reject object-valued %%configure.conf entries, invented defaults, missing mappings, source inputs replaced by literals or constant temporary views, Python transformation/DataFrame APIs, Python spark.sql(...), CREATE PROCEDURE, CREATE PROC, source_procedure, unresolved placeholders, saved outputs, or non-SQL transformation logic. Do not assign ManualReviewRequired solely because a required input has no source default.
For every published Notebook, call POST /v1/workspaces/{workspaceId}/notebooks/{notebookId}/getDefinition?format=ipynb with {}. Accept direct 200; for 202, honor Retry-After, poll Location to Succeeded within a deadline, then retrieve GET {Location}/result. Decode the notebook-content.ipynb InlineBase64 part and rerun all local assertions against the persisted JSON. Compare its canonical hash with the publish candidate and require exact target values for:
metadata.language_info.name(python)metadata.dependencies.lakehouse.default_lakehousemetadata.dependencies.lakehouse.default_lakehouse_workspace_idmetadata.dependencies.lakehouse.default_lakehouse_name
Validation is read-only: do not create, update, or execute notebooks, and do not call any notebook job, Livy notebook execution, %run, or notebookutils.notebook.run surface. Record unsupported behavior and manual-review requirements without claiming behavioral equivalence.
Report
Produce a concise report containing:
Source and target identifiers
Feature totals by support level and risk, plus object/component totals by status, complexity tier, and mapping cardinality
Schema comparison and artifact-validation results
Conversion warnings and accepted structural differences
Manual-review items
Artifact-readiness verdict
Audited-procedure block totals, source-byte coverage, retry exhaustion, package verdict, and retained evidence paths
Explicit statement that data migration, data parity, runtime behavior, and cutover readiness were not validated
Completion Gate
Artifact readiness is blocked by syntax failures, invalid TYPE NULL DDL, missing or duplicate required objects, unresolved source object/column contracts, unapproved or incomplete procedure mappings, unapproved notebook names/workspace placement or naming collisions, projected workspace-limit violations, schema mismatches, publication/readback/binding failures, unresolved placeholders, missing parameter mappings, invented defaults, hardcoded parameter uses, discovery blind spots, unknown classifications, open accepted-scope gaps, ManualReviewRequired objects, and skips without ApprovedExclusion. A source-contract defect blocks its affected procedure, not independently eligible siblings. For audited procedures, less than 100% source-byte coverage, gaps/overlaps, non-terminal blocks, retry-limit violations, untracked target statements, missing audit evidence, or deployment-package/hash drift also block readiness. Production cutover is always outside this skill because data migration and data-equivalence validation are excluded.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
What our scanner noticed· Low risk
- Instructions that use the network
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/skills-for-fabric · skills/synapse-migration · commit f8fac11
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- microsoft/skills-for-fabric
AutoGineer is not affiliated with or endorsed by Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download synapse-migration.zip