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
references/dedicated-pool-execution-contracts.md
Dedicated Pool Execution Contracts
Load this file only after a Dedicated SQL Pool-to-Lakehouse request has been routed to a specialized workflow. The core source-read-only and no-row-movement boundaries in SKILL.md always apply.
Contents
Dependent Procedure Callers
Interactive Notebook Conversion
Completion Language
Guidance-Only Incremental Deployment Hardening
Offline Local-Artifact Workflow
Feature-Wise Risk or Mapping Assessment
Large-Procedure Offline Package
For large or complex stored procedures, prove conversion coverage with a deterministic source-block ledger. An offline Dedicated Pool artifact request still requires this skill. For a complete large-procedure request, read ../resources/dedicated-pool-large-procedure-audit.md exactly once before generating artifacts.
For a Dedicated Pool request, read ../resources/dedicated-pool-to-lakehouse.md once as the phase router. Load each phase-specific reference only when entering that phase, and use the manifest instead of rereading completed-phase guidance. Persist per-object evidence in the manifest and telemetry instead of repeating it in chat.
For phased guidance, use the literal heading Phase 1 — Lake Database/HMS to Lakehouse: NotApplicable (none discovered) when discovery finds no catalog; never collapse the plan to Phase 0 → Phase 2.
Do not carry DISTRIBUTION, CLUSTERED COLUMNSTORE INDEX, or other Dedicated SQL Pool storage hints into the target. Fabric Warehouse handles distribution and Delta-backed storage automatically.
Dependent Procedure Callers
During assessment, recursively discover ADF or Synapse procedure callers. If callers exist, ask the user to select all closures, named complete closures, or none; parent migration approval is not pipeline approval. Only after notebook readback and explicit closure selection, read the complete ../resources/dedicated-pool-dependent-pipelines.md sub-flow, including its Contract Schema, Deployment, and Resume sections.
Before persistence, recursively inspect every source pipeline definition for credentials, connection strings, SAS/query/fragment secrets, authorization values, secure-string payloads, and ambiguous secret-like properties. If any are present or cannot be ruled out, block the complete selected closure, write no source artifact, and perform no target mutation; do not redact and proceed because that would break the complete-definition hash contract.
Only after that inspection passes, retain each complete source pipeline definition and record its manifest-relative
sourceDefinitionArtifactplus canonicalsourceDefinitionHashinpipelineMappings.Include both in
handoffHash. On resume, invalidate the checkpoint if the live ADF/Synapse source, retained artifact, or recorded hash differs.Hash the complete decoded persisted Notebook JSON using canonical JSON rules: recursively sort object keys, preserve arrays and every returned property, and never remove service-added metadata, cell IDs, or execution fields before hashing. Never hash raw notebook bytes.
Preserve the complete documented
activityBindings, includingsourceProcedure, target workspace/Lakehouse/notebook identities,parameterMappings, and output contract.activityBindingscontains only procedure-to-notebook bindings; recordExecutePipelinechild references only inpipelineMappings[].childBindings, never as a secondactivityBindingsentry.Before sending any dependent-pipeline response, verify that it contains this sentence verbatim: "Use a
TridentNotebookactivity with exact target identitiestypeProperties.notebookIdandtypeProperties.workspaceId, and pass inputs throughtypeProperties.notebookParameters." Naming onlyTridentNotebook, only the property paths, or generic GUIDs is incomplete.For every live Lakehouse, Notebook, or DataPipeline create/update or
getDefinitioncall, write request JSON beneath the manifest directory and assign its absolute path to$requestPath. Useaz rest --method post --url "<resolved endpoint>" --resource https://api.fabric.microsoft.com --headers "x-ms-fabric-skill=synapse-migration" --body "@$requestPath"for each mutation and POST-basedgetDefinitionreadback; never rely on the default GET verb. WithInvoke-WebRequestorInvoke-RestMethod, specify the resolved endpoint,-Method Post,-Headers @{ "x-ms-fabric-skill" = "synapse-migration" }, and-InFile $requestPath.Immediately before each mutation or
getDefinitioncall, emit only redacted request evidence: method, endpoint, absolute request-file path, SHA-256 hash, and a sanitized non-sensitive shape summary. Never emit the complete request body, connection details, credentials, or sensitive property values.A bare path without
@is a string body, not a file body; do not depend on a preceding directory change or send an in-memory$bodyafter writing an unused copy.Before the only Notebook mutation, parse that exact file and call
validate_notebook_definition_requestwithrequire_item_metadata=Truefor create orFalsefor update and the exact expected Lakehouse binding.A create body must already contain
displayName,type: "Notebook", and the validated definition. Block before mutation on rejection; never repair or rewrite a request after submitting it.Capture the first mutation response and its
Locationin the same invocation, then poll it without replaying the mutation because a response was not logged, filtered output was empty, or a file copy is wanted. The shell call that performs a mutation may contain only the REST invocation plus non-failing raw-response persistence; never appendSelect-String, JSON parsing, assertions, or another post-processing command that can make the shell call fail after Fabric accepted the mutation. Perform inspection in a later shell call. If any local command fails after an accepted mutation, treat acceptance as indeterminate, resolve the exact target, and read it back without replay. Never issue one mutation for debug headers and repeat the same mutation for its response body; capture both from the single HTTP call. Submit exactly one create/update per target and never retry a non-retriable authentication, conflict, or validation response.For
az rest, include--verboseon that single mutation and capture its combined output and exit code. Exit code0with an empty response body still means the mutation was accepted: classify the result as accepted or indeterminate, resolve the exact target by listing items, and perform readback. Never replay the mutation to obtain a body or response file.Do not redo completed conversion work or execute notebooks or pipelines; do not invoke, load, consult, or route this conditional sub-flow to
pipeline-migration. Reserve that skill for standalone pipeline requests.
Interactive Notebook Conversion
Before saving or reporting a generated Dedicated Pool notebook in an interactive workflow that permits correction, run validate_spark_sql_notebook from scripts/dedicated_pool_runtime.py, repair every rejection, and rerun until it passes. Do not replace this maintained semantic gate with ad hoc JSON or cell-shape checks.
The repair loop does not apply to the one-shot offline local-artifact workflow below. In that workflow, the first validator failure is terminal for the run and must be reported without editing, regenerating, or retrying.
Completion Language
Keep completion responses literal and concise.
Publication guidance begins: "The stored procedures were converted from T-SQL to Spark SQL before publication."
A Dedicated Pool-to-Lakehouse result names the resolved Fabric Lakehouse and states: "Generated stored-procedure notebooks use executable
%%sqltransformation cells."If notebook validation fails, state instead: "Generation was blocked: intended stored-procedure notebooks use executable
%%sqltransformation cells, but validation failed; do not publish." Never report successful generation or publication after a validator failure.A dependent-pipeline result states:
"Use a
TridentNotebookactivity with exact target identitiestypeProperties.notebookIdandtypeProperties.workspaceId, and pass inputs throughtypeProperties.notebookParameters.""After deployment, read back each pipeline with
POST /v1/workspaces/{workspaceId}/items/{dataPipelineId}/getDefinitionand validate its canonical hash and structural bindings.""Reject a partial selection when an excluded root reaches a selected shared child; include every sharing root and its complete closure."
"Before persisting a source definition, recursively reject secret-bearing or uncertain properties; write no source artifact and perform no target mutation for that closure."
"Only after recursive inspection proves a source definition secret-free, retain it as
sourceDefinitionArtifact, record its canonicalsourceDefinitionHash, include both inhandoffHash, and invalidate resume when the live source, retained artifact, or recorded hash differs; blocked closures retain no source artifact or hash.""The migration does not automatically execute notebooks or pipelines."
After successful large-procedure validation, state: "The T-SQL procedure was converted to executable Spark SQL," report validator/package evidence, and stop without inspecting eval graders.
On a terminal validator failure, state: "The T-SQL procedure was not successfully converted to Spark SQL," name the failed gate, and do not claim publication readiness.
Guidance-Only Incremental Deployment Hardening
For a guidance-only incremental deployment-hardening request, answer directly from this checklist without searching scripts or loading phase references. State every applicable safeguard explicitly in the final response; implementation details do not substitute for a checklist item.
Begin: "This migration converts T-SQL procedures to Spark SQL."
Record each script-backed DACPAC load attempt and its model-only fallback blind spots.
State: "For columns with special characters, enable Delta
columnMappingselectively and only with approval."Reuse an existing Fabric Lakehouse table or shortcut only when it is compatible. Block incompatible targets for manual review rather than altering them, and never auto-mutate, overwrite, or drop an existing target.
Create or reuse one Livy session for the deployment phase. Within that session, submit one object/statement per Livy request in dependency order so each failure remains attributable to a specific object or statement. Do not create a new Livy session per object.
State: "Resume only when the input hash and a fresh target-state readback hash match the successful checkpoint."
Build validated file-backed REST JSON with
InlineBase64, verify the request/definition, and delete temporary files infinallycleanup.Record phase/object start and end timestamps, duration, counts, and retries. Record token usage as
null/unavailable rather than estimating it.State: "Keep the source read-only; do not modify or rewrite the source."
Offline Local-Artifact Workflow
Read ../resources/dedicated-pool-conversion.md once. A caller-supplied read allow-list is a hard boundary: do not inspect any file outside it. Treat named validators as black boxes; do not inspect validator, runtime, grader, eval, or test implementation, run CLI help/preflight probes, or reread generated files.
Write one run-specific generator that emits the complete approved artifact set atomically. Run it once, then run each required validator once.
When PySpark is not explicitly provisioned, invoke
validate_dedicated_pool_spark.py --structure-onlyfirst, exactly once per notebook.A validator failure is terminal for that run. Report it without debugging, editing, regenerating, or retrying.
A parameterized notebook's first code cell must serialize
metadata.tagsas exactly["parameters"]. Assert the exact tag in the generator before it writes any artifact.Restore an optional non-null source default before lexical validation.
Use separate direct guards for required-null and required-blank checks.
Use direct two-positional-argument
re.fullmatchguards with no flags or keyword arguments, not membership tests.For case-insensitive Boolean validation, use
re.fullmatch(r"(?i:true|false|1|0)", str(<parameter>)).Place every validation/normalization statement before the contiguous literal-key
spark.conf.setcalls.
Feature-Wise Risk or Mapping Assessment
State:
"Use the discovered procedure count to calculate the projected notebook count and projected workspace total."
"Block conversion until the procedure mapping decision is approved."
"Procedure mapping approval must cover target notebook names and workspace placement."
Every feature-wise risk row must report
LikelihoodandImpactas separate fields from overallRisk; a single severity or risk value is incomplete.
Keep complete source-to-target procedure traceability for every approved mapping.
Large-Procedure Offline Package
Treat all identifiers, artifact paths, and binding values supplied by the request as authoritative.
Bind each generator path constant to the literal requested path; never derive a stable-ID source path from the shorter
sourceName.Before writing anything, assert that the source path exactly equals the requested path, such as
source/dbo.usp_AuditedLoad.sql.Read
../resources/dedicated-pool-large-procedure-audit.mdand../resources/dedicated-pool-conversion.mdonce each, then stop discovery.Do not search tests, fixtures, eval files, runtime implementation, validators, or graders for additional values or implementation hints.
Build every Python notebook cell as newline-joined source, serialize it with
splitlines(keepends=True), and runast.parseon the joined parameter and bridge cell source inside the generator before writing any artifact.Never serialize adjacent source-array entries without line terminators.
Ensure every generated transformation cell starts with literal
%%sql. With Python%formatting, write%%%%sqlor concatenate the header so interpolation cannot collapse it to%sql.Apply the conversion type mapping in those cells, including source
BITcomparisons as Spark SQL Boolean comparisons.Generate the complete package in one atomic generator run, invoke the generated package verifier once and the requested repository validator once, clean up the generator, report the evidence, and stop.
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