Azure Synapse Analytics: The Complete Advanced Guide

Azure Synapse Analytics: The Complete Advanced Guide

A book-quality walkthrough of Microsoft's integrated analytics service, from data warehouse basics to dedicated SQL pool internals, serverless queries, Spark, pipelines, lake design, security, cost control, and the path toward Microsoft Fabric.

Imagine a huge city library that receives thousands of new books, newspapers, receipts, and recordings every day. Some arrive neatly labeled, others in messy boxes. A team of librarians sorts them, a research hall answers detailed questions from scholars, a quick-lookup desk lets visitors peek into any box without sorting it first, and a laboratory runs experiments on the raw material. Azure Synapse Analytics is that library for company data. It gathers information from many places, stores it in a lake, organizes it into a warehouse, and gives analysts, engineers, and data scientists the right tool for each kind of question.

This guide teaches Synapse from the beginning. Every new term is explained the first time it appears, every big idea has an everyday comparison, and later chapters go deep into the topics that architects face in real projects: how the warehouse spreads data across machines, how to design tables, how to load and tune workloads, how to secure and govern the environment, how to control cost, and how to decide between staying on Synapse and moving to Microsoft Fabric. No prior analytics knowledge is required.

1Analytics Basics: Warehouses, Lakes, and Lakehouses

To understand Synapse, you first need to understand the problems it solves and the vocabulary of modern data platforms.

Two kinds of database work

Most business applications use databases for transactions: placing an order, updating an address, recording a payment. This is called online transaction processing, or OLTP. It involves many small, fast reads and writes affecting a few rows at a time. Analytics is different. A question such as “What were our total sales by region and product category for each of the last five years?” must read millions or billions of rows and summarize them. This is online analytical processing, or OLAP. The two workloads pull a database in opposite directions, so serious organizations keep them in separate systems.

Simple Analogy

A shop’s cash register handles one customer at a time, quickly. The accountant who analyses a year of sales receipts works at a big table with all receipts spread out. Asking the cashier to also run the yearly analysis would slow down every customer in the queue.

The data warehouse

A data warehouse is a central database designed for analysis. It collects data from many source systems, cleans it, organizes it into a consistent structure, and keeps history so that trends over time can be studied. Warehouses typically use a star schema: a central fact table that holds measurable events, such as sales lines, surrounded by dimension tables that describe the context, such as customer, product, store, and date. This layout makes summary questions simple to write and fast to answer.

The data lake

A data lake is a large, inexpensive storage area that holds data in its original form: spreadsheets, log files, images, JSON messages, and database exports. It does not require you to decide the structure in advance. In Azure, the lake is usually built on Azure Data Lake Storage Gen2, which adds folders, permissions, and speed on top of ordinary Azure storage. Lakes are flexible and cheap, but without discipline they turn into a swamp where nobody trusts or finds anything.

The lakehouse

A lakehouse combines both ideas. It keeps the data in open files in the lake, adds a transaction layer such as Delta Lake so that updates and deletes are reliable, and lets both SQL and programming engines work on the same files. The aim is one copy of the data, many tools, and warehouse-like trust on lake-like storage.

ETL and ELT

Moving data into analytics is known as ETL, short for extract, transform, load, where data is reshaped before being stored. ELT reverses the last two steps: data is loaded first and transformed inside the powerful analytical engine. Cloud platforms favor ELT because storage is cheap and the engines are strong, which is why you will hear the word ELT often in Synapse discussions.

Term 1

Fact table

A large table of events or measurements, such as every sale, that you add up and analyse.

Term 2

Dimension table

A smaller table describing the who, what, where, and when of the facts.

Term 3

Parquet

A compact column-based file format that analytical engines read quickly.

Term 4

Delta Lake

A layer that adds reliable updates, deletes, and history to files in a lake.

Term 5

Pipeline

An automated sequence of steps that moves and prepares data on a schedule or trigger.

Term 6

MPP

Massively parallel processing: many machines each handling a slice of the work at once.

2What Is Azure Synapse Analytics?

Synapse brings several analytics engines and data integration tools into one workspace, so teams do not have to stitch separate products together.

The core idea

Azure Synapse Analytics is a managed analytics service that combines enterprise data warehousing, big data processing, data integration, and exploration under a single workspace. Microsoft introduced it as the evolution of Azure SQL Data Warehouse, adding a shared studio, Spark processing, serverless querying, and built-in pipelines. The promise was a single place where a data engineer can ingest data, an analyst can query it with SQL, a scientist can run notebooks, and a report author can connect Power BI, without moving data between tools.

The main engines

Dedicated SQL pool

The classic provisioned data warehouse, built on massively parallel processing. You reserve a size, load structured data into tables, and run fast, repeatable analytics at large scale.

Serverless SQL pool

A pay-per-query service that reads files directly from the lake using familiar SQL, with no infrastructure to create or size.

Apache Spark pools

Managed clusters for large-scale data preparation, machine learning, and exploration using notebooks in languages such as Python, Scala, and SQL.

Pipelines

Data integration based on Azure Data Factory technology, with connectors to many sources, scheduling, and visual data flows.

Synapse Link

A way to analyse operational data from sources such as Azure Cosmos DB and some SQL databases near real time, without building traditional extraction jobs.

Simple Analogy

Synapse is a shared kitchen with several stations. The dedicated SQL pool is the big professional oven for planned, large batches. The serverless pool is the microwave you use for a quick bite without any setup. Spark is the experimental station with every gadget. Pipelines are the delivery doors bringing in ingredients on schedule. Everyone works in the same kitchen and shares the same pantry, the data lake.

The workspace

Everything lives in a Synapse workspace, an Azure resource that holds your pools, pipelines, notebooks, scripts, and connections, together with a default Data Lake Storage Gen2 account. You work through Synapse Studio, a browser-based interface with hubs for data, development, integration, monitoring, and management. Security, networking, and identities are configured at the workspace level, which is why workspace design is one of the first decisions in any project.

i
Key Idea

Synapse is not one engine but a bundle of engines sharing a workspace, a lake, and a security model. Choosing the right engine for each task is the core skill of a Synapse architect.

3Synapse in 2026: Where It Fits Next to Microsoft Fabric

A responsible guide must state plainly where the product stands today, because that affects every investment decision you make.

The strategic picture

Microsoft Fabric is Microsoft’s newer, software-as-a-service analytics platform that unifies data engineering, warehousing, real-time analytics, data science, and Power BI around a single storage layer called OneLake. Industry guidance published in mid-2026 describes Azure Synapse Analytics as a supported, production-grade platform that is effectively in maintenance mode, with new investment concentrated on Fabric. As of that guidance, Microsoft had not announced an end-of-life date for Synapse, and existing dedicated SQL pools, serverless SQL pools, and Spark pools continue to receive operational support and security patches.

What is Fabric-only

Several newer capabilities are described as available only in Fabric, not Synapse. Examples include Direct Lake mode for Power BI, which reads lake files directly without importing them, OneLake mirroring of operational databases, built-in Copilot assistance, and certain automation and execution-engine features. Check Microsoft’s current documentation for the latest list, because it changes frequently.

!
Lifecycle Warning

Some Synapse components have already reached end of support. Microsoft’s documentation lists the Apache Spark 3.4 runtime in Synapse as deprecated, with end of support on 31 March 2026, and recommends moving to a newer Synapse runtime or to Fabric. Azure Synapse Data Explorer pools were also announced for retirement. Always check lifecycle pages before building on a component.

When staying on Synapse is sensible

Reasons to Stay

  • A well-tuned dedicated SQL pool with stable workloads and predictable chargeback by size
  • Regulated or sovereign regions where Fabric features may not yet match what you need
  • A large lake and notebook estate whose migration would cost more than it returns this year
  • Contracts, reservations, and skills already invested in Synapse

Reasons to Plan a Move

  • Power BI performance depends on features that exist only in Fabric
  • You want unified capacity pricing and one platform for all workloads
  • You need newer Spark versions and the Fabric-only AI and automation features
  • You want to avoid being stranded on a platform in maintenance mode

Why learn Synapse then?

Three reasons. First, large numbers of production systems run on it and will for years, so engineers need to operate and improve them. Second, the concepts you learn here, such as massively parallel processing, distribution design, lakehouse layering, and workload management, carry directly into Fabric and other platforms. Third, any migration plan starts with understanding what you are migrating from. This guide teaches Synapse in full, and later chapters return to the migration question honestly.

“Know the platform you run today, and understand the one you will run tomorrow.”

4Architecture and Core Components

The big picture of how the pieces fit together makes every later detail easier to place.

The layers

A Synapse deployment has four main layers. At the bottom is storage: the Data Lake Storage Gen2 account for the lake, plus the internal storage that holds dedicated SQL pool tables. Above it are the compute engines: dedicated SQL pools, serverless SQL, and Spark pools. Next comes integration: pipelines, triggers, and linked connections to outside systems. At the top is the experience layer: Synapse Studio, along with connections for Power BI, Azure Machine Learning, and Microsoft Purview.

flowchart TD
  SRC["Sources: databases, files, SaaS apps, streams"] --> PIPE["Pipelines and Data Flows"]
  PIPE --> LAKE["Data Lake Storage Gen2: Raw, Curated, Serving"]
  LAKE --> SPARK["Spark Pools"]
  LAKE --> SRVL["Serverless SQL Pool"]
  LAKE --> DSQL["Dedicated SQL Pool"]
  SPARK --> LAKE
  DSQL --> BI["Power BI and Reports"]
  SRVL --> BI
  SPARK --> ML["Machine Learning"]
  STUDIO["Synapse Studio"] -. manages .-> PIPE
  STUDIO -. manages .-> SPARK
  STUDIO -. manages .-> DSQL
        
FIG 1 — Main building blocks of an Azure Synapse workspace

Compute separated from storage

A guiding principle of modern analytics is to separate compute from storage. Your data stays in storage while compute engines are created, resized, paused, or deleted as needed. Dedicated SQL pools follow this by keeping data in distributed storage independent of the compute size, so you can scale compute up for the monthly close and pause it overnight without losing the tables. This is what makes cloud warehouses economical compared with old fixed-size appliances.

Simple Analogy

A warehouse building stores goods permanently, while the number of forklifts and workers hired for the day changes with demand. Because workers and building are separate, you can hire a hundred for a busy sale day and none on holidays, while the goods stay safely on the shelves.

Control plane and data plane

The control plane handles management actions such as creating a pool or granting access, and runs through Azure Resource Manager and the workspace service. The data plane carries your queries and files. Keeping them separate means that scaling operations and permissions do not interfere with query traffic, and that a busy query workload does not block administration.

Storage

Data Lake Storage Gen2

The shared, inexpensive file store that holds raw and curated data in open formats.

Compute

SQL and Spark pools

The engines that read, transform, and serve data, sized and billed independently.

Integration

Pipelines

Orchestration and data movement across hundreds of supported systems.

Experience

Synapse Studio

The single web interface for writing queries, notebooks, pipelines, and monitoring.

Governance

Purview integration

Catalogs data, records lineage, and applies classifications across the estate.

Consumption

Power BI

Dashboards and reports connected directly to Synapse data and models.

5Dedicated SQL Pool Internals: Massively Parallel Processing

The dedicated SQL pool is the heart of Synapse for serious warehousing. Its power comes from dividing work across many machines.

The control node and compute nodes

A dedicated SQL pool has one control node and many compute nodes. The control node is the front door: it receives your queries, parses them, creates an execution plan that spreads the work, and sends instructions to the compute nodes. The compute nodes do the heavy lifting in parallel, each processing its own slice of the data, and the results are combined and returned. As you buy a larger pool, you get more compute nodes and the same query finishes faster because more workers share the job.

Sixty distributions

Behind the scenes, the data of every table is split into 60 pieces called distributions, regardless of pool size. A small pool assigns all sixty to a single compute node. A very large pool gives each of sixty compute nodes exactly one. Scaling the pool changes how many nodes share the sixty pieces, not how the data is cut. This fixed number matters for design: it explains why tables need enough rows to make each distribution worthwhile and why uneven data creates slow queries.

Simple Analogy

Imagine marking a huge pile of exam papers. The head examiner, the control node, splits the pile into sixty envelopes. With one marker, that person marks all sixty envelopes. With sixty markers, each takes one envelope, and the whole pile is done in a sixtieth of the time. The examiner then adds up the scores. The sixty envelopes never change; only the number of markers does.

flowchart LR
  Q["Query from Client"] --> CN["Control Node: plan and coordinate"]
  CN --> C1["Compute Node 1"]
  CN --> C2["Compute Node 2"]
  CN --> CN3["Compute Node N"]
  C1 --> D1["Distributions 1 to 20"]
  C2 --> D2["Distributions 21 to 40"]
  CN3 --> D3["Distributions 41 to 60"]
  D1 --> ST["Shared Storage"]
  D2 --> ST
  D3 --> ST
        
FIG 2 — Control node, compute nodes, and the sixty distributions

Data warehouse units

The size of a dedicated SQL pool is expressed in data warehouse units, abbreviated DWU, a bundled measure of compute, memory, and input and output capacity. The current generation uses sizes written with a lowercase c, starting small and growing to very large. More units mean more compute nodes, more memory, and higher concurrency capacity. You can scale up or down in minutes, though the pool is briefly offline during the change.

The data movement service

Joining two tables is easy when the matching rows already live in the same distribution. When they do not, the pool must reshuffle rows across nodes before it can join them. A component called the data movement service performs these reshuffles. Data movement is the single most expensive operation in a distributed warehouse, so most tuning advice boils down to one goal: arrange the data so that the joins you run most often need little or no movement.

i
Practical Tip

When a query is slow, ask first how much data moved between nodes. Reducing movement through better table design is usually worth far more than buying a larger pool.

6Table Design: Distribution, Indexing, and Partitioning

In a dedicated SQL pool, table design decisions made on day one determine performance for years.

Three distribution methods

When you create a table, you choose how its rows are spread across the sixty distributions. Each method suits a different kind of table.

MethodHow rows are placedBest forWatch out for
HashA formula applied to a chosen column decides the distribution, so equal values always land togetherLarge fact tables that are joined or grouped on a common keySkew if the key has a few very common values; the key cannot be updated
Round robinRows are dealt evenly like cards, with no regard to contentStaging tables and quick loading where joins are not the goalJoins on these tables need data movement
ReplicatedA full copy of the table is kept for every compute nodeSmall dimension tables that join to large factsLarge tables waste storage, and updates are costlier
Simple Analogy

Hash distribution is like filing letters into sixty mailboxes by the first letter of the surname, so every Smith lands in the same box. Round robin is dealing letters into mailboxes one by one. Replicated is photocopying a small directory and placing a copy in every mailroom so nobody has to walk across the building to look something up.

Choosing a good hash key

A good hash column has many distinct values, is spread evenly, appears often in joins and grouping, and is not used in filters that pick a single value. A customer identifier is usually better than a date column. A date column is risky because all of today’s rows hash to one distribution while the other fifty-nine sit idle. If the largest tables in your joins share a distribution key, matching rows are already together and the join needs no movement.

Columnstore: the default for large tables

Dedicated SQL pools store large tables by default as clustered columnstore. Instead of saving each row together, columnstore saves each column separately and compresses it heavily. Analytical queries usually need only a few columns out of many, so the engine reads far less data. Columnstore works best when row groups contain about a million rows. Because each of the sixty distributions builds its own row groups, a table needs on the order of sixty million rows before columnstore reaches its full efficiency, and smaller tables often do better with other storage choices.

Heap and rowstore indexes

For small tables and temporary staging, a heap with no index loads quickest. A clustered or nonclustered rowstore index helps queries that fetch a handful of rows by key from a small table. Use them sparingly, since every index adds load time and storage.

Partitioning

Partitioning slices a table into sections, commonly by date, so that maintenance and queries can focus on a part. A well-chosen partition scheme lets you remove or switch out old data instantly, and lets queries that filter on date skip irrelevant sections. Remember that partitioning multiplies by the sixty distributions: a table with a hundred partitions has six thousand physical pieces, which can starve each piece of rows and damage columnstore quality. Use fewer, larger partitions than you would on a single-server database.

Statistics

The planner relies on statistics, summaries of data distribution, to choose good plans. In dedicated pools, statistics need care: they are best created on columns used in joins, filters, and grouping, and refreshed after large loads. Out-of-date statistics lead to poor plans and extra data movement.

ANTI-PATTERN-01 Avoid
Problem

A large fact table is hash distributed on a date column because most reports filter by date.

Why It’s Harmful

All rows for one day land in one distribution, so a query for yesterday’s data uses one sixtieth of the pool while the rest wait. Loading is also lopsided and the pool looks far bigger than its real throughput.

Correct Approach

Distribute on a high-cardinality key such as a customer or order identifier, and use date for partitioning instead.

7Loading Data Efficiently

A warehouse is only as good as its data. Loading well means loading fast, loading safely, and loading in a way that keeps queries healthy.

Why row-by-row loading is slow

Inserting single rows through the control node is a bottleneck because every row passes through one place. Dedicated SQL pools are built so that the compute nodes read files directly from storage in parallel. Bulk-loading mechanisms, namely the COPY statement and PolyBase external tables, let every node read its own slice of the files at once, which can load billions of rows in minutes instead of hours.

The staging pattern

1

Land the files in the lake

Pipelines or other tools deposit source extracts as files in a raw or landing folder, ideally in compressed Parquet or delimited text.

2

Bulk load into a staging table

Use COPY or PolyBase to load into a round-robin heap staging table in the pool, which is the fastest landing place.

3

Transform inside the pool

Use set-based statements, in particular create table as select, to shape data into the final distribution and index design in a single parallel step.

4

Switch partitions or swap tables

Place new data into production tables using partition switching or table renaming so that users see complete data instantly.

5

Update statistics and clean up

Refresh statistics on affected columns and delete staging data to save space.

Loading guidelines

Use sensible file sizes

Many tiny files slow loading, and one giant file cannot be split across nodes in some formats. Aim for files in the range of tens to hundreds of megabytes, compressed, or split large files into several pieces.

Give loads their own resources

Dedicate a loading user to a workload group with generous resources so that loads are not squeezed by report queries, and keep reports from being starved during loads.

Load incrementally where possible

Reloading entire tables nightly is simple but wasteful as data grows. Use watermarks, change tracking, or Synapse Link to capture only new and changed rows.

Check quality at the door

Validate row counts, null rates, and key uniqueness after each load so that bad data is caught before reports use it.

!
Common Mistake

Loading directly into final columnstore tables with many small batches. Small batches create poorly compressed row groups that slow every later query. Load in large batches through staging and rebuild when needed.

8Workload Management and Query Acceleration

When many people and jobs share a pool, someone must decide who gets resources and when. Workload management is that referee.

Concurrency and slots

A dedicated SQL pool can run a limited number of queries at once, and each running query reserves a portion of the pool’s memory and compute. Queries beyond the limit wait in a queue. Larger pools allow more concurrency and larger memory grants. If one user submits an enormous query that reserves much of the memory, small queries may wait behind it, which feels to everyone like the system is frozen.

Resource classes

Resource classes are the older, simpler mechanism. A user is assigned to a class, such as small, medium, large, or extra large, which determines how much memory each of that user’s queries receives. Bigger classes make heavy transformations faster but reduce how many queries can run together. Static and dynamic variants differ in whether the grant stays fixed or scales with pool size.

Workload groups and classifiers

Workload groups are the modern and more flexible approach. A group reserves a minimum percentage of pool resources for a purpose, caps the maximum it may take, and sets how much each request receives. Classifiers then route incoming requests into groups using the user, role, label, or time of day. A group can also carry an importance level so that executive dashboards run before overnight experiments when both are waiting.

Simple Analogy

A hospital emergency room does not treat patients in arrival order. It triages them by urgency and keeps dedicated beds for critical cases so they are never all taken by routine visits. Workload groups reserve beds for important work, and classifiers act as the triage nurse.

NeedFeature to use
Guarantee resources for loading or critical reportsWorkload group with a minimum resource percentage
Prevent one team from consuming the whole poolWorkload group with a maximum resource percentage
Let urgent queries jump the queueImportance setting through a classifier
Give different users different memory per queryRequest resource settings in a workload group, or resource classes
Stop runaway queriesQuery timeout settings in the workload group

Speed-up features

Cache

Result set caching

Stores the answer to repeated queries so identical requests return instantly while the underlying data is unchanged.

Pre-compute

Materialized views

Store the pre-calculated result of a heavy aggregation and keep it updated automatically, so reports read the answer instead of recomputing it.

Order

Ordered columnstore

Sorts data inside the columnstore so queries that filter on the ordering column can skip large blocks.

Memory

Replicated table cache

Keeps copies of replicated tables ready on each node for fast joins after the first use.

i
Practical Tip

Create workload groups for at least three populations: loading and transformation, interactive reporting, and ad hoc exploration. Then watch queue times and tune the percentages monthly.

9Serverless SQL Pool: Query the Lake Without Infrastructure

Not every question deserves a provisioned warehouse. Serverless lets you ask first and pay only for the data scanned.

How it works

Every Synapse workspace has a serverless SQL endpoint ready to use. You write ordinary SQL that points to files in the lake, such as Parquet, CSV, JSON, or Delta files, and the service reads them on demand using automatically managed compute. You never create, size, or pause anything. Billing is based on the amount of data processed by each query, so a query that scans little data costs little, and an idle workspace costs nothing for this engine.

Best uses

Data discovery and profiling

Peek into new files to see structure, counts, and quality before deciding how to load or model them.

Logical data warehouse

Create views and external tables over lake files so analysts query a tidy, named layer while the data itself stays in the lake.

Light transformation

Convert and reshape files by writing query results back to the lake as new files for downstream use.

Ad hoc reporting

Serve occasional dashboards from lake data when the volume does not justify a dedicated pool.

Simple Analogy

Dedicated SQL is like owning a car: you pay whether you drive or not, but it is always ready and fast. Serverless is like taking a taxi: nothing to maintain, and you pay by the trip. For daily commuting, owning is cheaper. For an occasional errand, the taxi wins.

Making serverless efficient

Because cost follows data scanned, file layout matters. Columnar formats such as Parquet and Delta let the engine read only the needed columns. Partitioned folder structures, for example by year and month, let queries skip irrelevant folders. Selecting only the columns you need rather than all of them lowers cost. Many small files add overhead, so compact them periodically. You can also set daily, weekly, or monthly cost limits for the serverless pool in the workspace to avoid surprises.

Limits to remember

Serverless is powerful but is not a replacement for a tuned warehouse. It has no local storage for tables, offers less control over concurrency, can show variable performance because resources are shared, and supports a subset of SQL features. Highly concurrent dashboards on large datasets, or complex joins that repeat hundreds of times a day, often run better and cheaper on a dedicated pool or on cached data.

!
Common Mistake

Pointing a self-service dashboard with many users at huge CSV files through serverless. Every refresh rescans everything, and the bill grows with each click. Convert to Parquet or Delta, partition sensibly, and consider caching or loading hot data into a dedicated pool.

10Apache Spark Pools in Synapse

When data is messy, huge, or destined for machine learning, Spark gives you the flexibility of full programming languages on a cluster that you do not have to build.

What Spark is

Apache Spark is an open-source engine that divides large datasets into pieces, spreads them across many machines, and processes the pieces in parallel, keeping intermediate results in memory for speed. In Synapse, a Spark pool is a definition of the cluster you want, such as node size and the minimum and maximum number of nodes. The cluster is created only when someone starts a session or runs a job, and it shuts down after a configurable idle period, so you pay for compute only while it works.

Notebooks and languages

Most people use Spark through notebooks, documents that mix code, results, charts, and explanations. Synapse notebooks support Python through PySpark, Scala, and Spark SQL, plus other options. They suit exploration and teaching, and can also be run as steps in pipelines for production. Spark job definitions provide a way to submit packaged applications for unattended runs.

Autoscale and sizing

Autoscale lets a pool grow when a job needs more executors and shrink when work finishes, within limits that you define. Choose node sizes by the shape of the work: memory-heavy joins need larger memory per node, while wide parallel scans benefit from more nodes. Start modestly, observe real usage in monitoring, and adjust, because over-provisioned Spark pools are one of the commonest causes of surprise bills.

Simple Analogy

Spark is like hiring a team of temporary movers for a big job. You tell the agency how large the team can be. The movers arrive when the truck is ready, split the boxes among themselves, finish, and go home. Autoscale decides how many to call in, and the idle timeout sends them home when the boxes run out.

Delta Lake and shared metadata

Delta Lake is the preferred table format for Spark in the lake. It adds ACID transactions, so jobs do not leave half-written data, supports updates and deletes, allows reading older versions of a table, and enforces column rules. Synapse also lets Spark and serverless SQL share table definitions through lake databases, so a table created in a notebook can be queried with SQL without redefining it.

Runtimes and lifecycle

Each Spark pool uses a Synapse runtime, a versioned bundle of Spark, Delta Lake, Python, and libraries. Runtimes follow a lifecycle: they are announced, become generally available, then reach deprecation and end of support, after which they receive no fixes or security updates. Microsoft documents that the Spark 3.4 runtime in Synapse reached end of support on 31 March 2026 and advises moving to the newer Synapse runtime for Spark 3.5 or to a current Fabric runtime. Review the runtime used by every pool on a calendar, since jobs on unsupported runtimes can be disabled in phases.

NeedRecommended approach
Clean and reshape very large filesSpark notebook or job writing Delta or Parquet back to the lake
Machine learning with Python librariesSpark pool with the needed packages, or Azure Machine Learning for managed model workflows
Quick SQL over lake filesServerless SQL pool instead of starting a cluster
Structured star-schema reporting at scaleDedicated SQL pool fed by Spark or pipelines
!
Common Mistake

Leaving long idle timeouts and large fixed-size pools running, or letting analysts keep notebook sessions open all day. Compute charges accrue while the session lives, whether or not it is calculating anything.

11Pipelines and Data Integration

Data rarely starts where you need it. Pipelines carry it there, on time, and in a repeatable way.

Pipeline concepts

A pipeline is a group of activities arranged in a workflow. An activity is a single step, such as copying data, running a notebook, executing a stored procedure, calling a web service, or waiting. Activities can depend on each other, run in parallel, loop over lists, and branch on conditions. Triggers start pipelines: on a schedule, in a tumbling time window that processes each interval exactly once, or in response to an event such as a new file arriving in storage.

Building block

Linked service

A saved connection to a data store or compute resource, including how to authenticate.

Building block

Dataset

A named view of data, such as a folder of files or a table, used by activities.

Building block

Integration runtime

The compute that moves data and runs activities, in the cloud or on a machine inside a private network.

Building block

Trigger

The rule that decides when a pipeline starts: schedule, window, or event.

The copy activity

The copy activity is the workhorse. It reads from a source and writes to a destination using built-in connectors for databases, files, cloud storage, software-as-a-service applications, and more. It can scale out by using several parallel streams, convert formats, and map columns. For loading dedicated SQL pools it can use fast bulk paths, which is the recommended way to load large volumes.

Mapping data flows

Mapping data flows let you design transformations visually: joins, aggregations, derived columns, lookups, and conditional splits, drawn as boxes and arrows. Behind the scenes they run on managed Spark clusters, so you get scale without writing Spark code. They are productive for teams that prefer low-code tools, though complex logic may be clearer, cheaper, and easier to test in notebooks or SQL.

Self-hosted integration runtime

Sources inside company networks, such as on-premises databases, are not reachable from the cloud by default. A self-hosted integration runtime is software that you install on a machine inside the private network. It makes outbound connections to Synapse, reads the source locally, and sends the data on. Run it on more than one machine for resilience and watch its capacity, because it can become the bottleneck of the entire ingestion process.

Operational habits for pipelines

1

Parameterize everything

Use parameters for server names, folders, and dates so one pipeline serves many sources and environments.

2

Design for reruns

Make each step idempotent, meaning running it twice gives the same result, so failures can be safely retried.

3

Add logging and alerts

Record row counts, durations, and errors in a control table, and alert people on failures that need action.

4

Store secrets safely

Reference Azure Key Vault for passwords and keys instead of typing them into connections.

Simple Analogy

A pipeline is a delivery schedule for a supermarket chain. Trucks, routes, and timetables are defined once. Triggers are the clocks and phone calls that dispatch them. Good logistics means that when a truck breaks down, the delivery can simply be sent again without doubling the stock on the shelves.

12Data Lake Design and the Medallion Architecture

A lake without structure becomes a dumping ground. A few simple layers keep it understandable, trustworthy, and fast.

The three layers

The most popular organizing idea is the medallion architecture, with three zones often named bronze, silver, and gold. Bronze holds raw data exactly as received, never modified, so you can always replay history. Silver holds cleaned, validated, de-duplicated, and conformed data with consistent types and keys. Gold holds business-ready datasets shaped for specific uses, such as star schemas, aggregates, and feature tables for machine learning.

flowchart LR
  S["Source Systems"] --> B["Bronze: raw and unchanged"]
  B -->|clean, validate, deduplicate| SI["Silver: conformed and trusted"]
  SI -->|model and aggregate| G["Gold: business-ready"]
  G --> DW["Dedicated SQL Pool"]
  G --> BI["Power BI"]
  G --> ML["Machine Learning"]
  B -. replay history .-> SI
        
FIG 3 — Medallion layers from raw files to business-ready data
Simple Analogy

Think of refining ore into jewelry. Bronze is the raw ore as it came out of the mine, kept in case you ever need to start again. Silver is the purified metal. Gold is the finished ring in the shop window that customers actually buy. Each stage adds value and trust.

Folder structure and naming

Organize folders by zone, then by source system or subject area, then by time, for example year, month, and day. Consistent naming allows tools to find data and allows queries to skip folders they do not need. Avoid putting meaning in file names alone, and document the layout in a shared place.

File formats

FormatStrengthsCautions
CSV and JSONUniversal, human readable, easy to produceLarge, slow to scan, no built-in types, schema drift problems
ParquetCompressed, columnar, fast for analytics, keeps typesNot suited to frequent small updates on its own
DeltaParquet plus transactions, updates, deletes, and historyNeeds a compatible engine and maintenance such as compaction

Access control in the lake

Data Lake Storage Gen2 supports role-based access at the account level and access control lists at the folder and file level. A common pattern gives engineers broad access to bronze and silver, grants analysts access to gold only, and uses groups rather than individual users in all permissions so that changes are easy to manage. Make sure the workspace’s managed identity has the access it needs, and no more.

Handling small files and schema change

Streaming and frequent loads create many small files, which slows every engine. Schedule compaction jobs to merge them into healthy sizes. Source systems change over time, adding or renaming columns. Decide on a policy, such as allowing new columns to flow through silver with alerts while blocking breaking changes, so that surprises are caught early.

i
Practical Tip

Never let reports read from bronze. Raw data is for reprocessing, not for decisions. Trusted numbers come from silver and gold, where rules have been applied and tested.

13Synapse Link: Analytics on Operational Data

Traditionally, analysing live application data meant slow overnight exports. Synapse Link reduces that delay to a near real-time flow.

The problem it solves

Running big analytical queries directly on a busy operational database harms the application. Building extraction jobs is slow, complex, and always somewhat out of date. Hybrid transactional and analytical processing, or HTAP, aims to let analytics run on fresh operational data without disturbing the application. Synapse Link is Microsoft’s approach to this for several sources.

How it works for different sources

Azure Cosmos DB

Cosmos DB can maintain an analytical store, a column-oriented copy of operational data that is updated automatically in the background. Synapse reads that store through Spark or serverless SQL without consuming the transactional throughput that the application needs.

Dataverse

Data from business applications built on Dataverse can be continuously exported to the lake in analytics-friendly formats for reporting and machine learning.

SQL databases

For supported versions of SQL Server and Azure SQL Database, Synapse Link replicates changes into a dedicated SQL pool, giving near real-time analytics without hand-built pipelines.

Simple Analogy

Instead of asking the shop assistants to stop serving customers while you count stock by hand, a quiet camera in the back room keeps an up-to-date photograph of the shelves. You study the photograph at leisure, and customers are never disturbed.

Trade-offs

Advantages

  • Near real-time insight without custom extraction code
  • No performance impact on the operational workload for supported designs
  • Less engineering effort than traditional pipelines
  • Simple to start for supported sources

Disadvantages / Trade-offs

  • Only supported sources and configurations can use it
  • Storage for the analytical copy adds cost
  • Replicated data may not match the shape you want for reporting, so modeling is still needed
  • Newer integration options exist in Fabric, which affects long-term planning
i
Practical Tip

Treat the replicated data as a bronze-style layer. Add modeling and quality checks on top before exposing it to wide audiences.

14Streaming and Real-Time Analytics

Some questions cannot wait for tonight’s batch. Streaming handles events as they arrive.

Batch versus streaming

Batch processing collects data over a period and processes it all together. Streaming processes each event or small group of events within seconds. Streaming is valuable for fraud detection, sensor monitoring, clickstream analysis, and live dashboards. It is also more complex to build and operate, so use it only where the business really needs low latency.

Building blocks around Synapse

Ingest

Event Hubs and IoT Hub

Scalable front doors that receive millions of events per second from applications and devices.

Process

Stream Analytics

A managed service for continuous queries over streams, with windows and aggregations.

Process

Spark Structured Streaming

Stream processing in Spark notebooks, writing continuously into Delta tables.

Serve

Lake and SQL pools

Streaming results land in the lake or pools where analysts and reports can use them.

The lambda and kappa ideas

Two classic designs combine batch and streaming. In lambda, a fast path serves approximate recent results while a batch path later recomputes exact ones. In kappa, a single streaming path handles everything and history is replayed through it when logic changes. With Delta tables, a single table can be fed by both batch and streaming jobs, which often simplifies the design.

Real-time engines and lifecycle

Synapse once offered Data Explorer pools for fast exploration of logs and telemetry. Microsoft announced their retirement and points real-time workloads toward the real-time capabilities of Fabric and toward the standalone Azure Data Explorer service. If you encounter Data Explorer pools in an existing workspace, check the current lifecycle announcement and plan their replacement.

Simple Analogy

Batch is reading the monthly bank statement. Streaming is the instant text message when a card is used. Both have value, but you wouldn’t want your fraud alerts to arrive at month end.

!
Common Mistake

Choosing streaming because it sounds modern, when the business only reads the report once a day. Streaming costs more to build, monitor, and repair. Match latency to genuine need.

15Security: Network, Identity, and Data Protection

Analytics platforms hold a company’s most valuable and sensitive data in one place, so security must be designed in layers from the start.

Network isolation

By default, a workspace has public endpoints protected by firewall rules. For stronger isolation you can create the workspace with a managed virtual network. Compute for pipelines and Spark then runs inside a Microsoft-managed network isolated from other customers. Connections to storage, databases, and other services go through managed private endpoints, private addresses that keep traffic off the public internet. You can also use private endpoints for connecting your own network to the workspace’s SQL, development, and Studio endpoints, and disable public network access altogether.

Data exfiltration protection

Exfiltration means data leaving where it should stay. When data exfiltration protection is enabled on a workspace with a managed virtual network, outbound connections are limited to approved targets, such as specified Microsoft Entra tenants, through managed private endpoints. This prevents a compromised notebook or a careless user from sending data to an unauthorized destination.

Identity and access

LayerMechanismPurpose
Sign-inMicrosoft Entra ID, with multi-factor authentication and conditional accessVerify who the person is and from where
Workspace rolesSynapse role-based access control, with roles such as administrator, contributor, and compute operatorDecide who may create, publish, and run items
Azure rolesAzure role-based access control on the workspace resourceControl management actions in Azure
Storage accessStorage roles and folder-level access control listsRestrict which lake folders each identity reads or writes
Workload identityThe workspace managed identityLet pipelines and notebooks reach resources without stored passwords
SecretsAzure Key Vault referencesKeep passwords and keys out of code and connections

Protecting data inside the SQL pool

Encrypt

Transparent data encryption

Encrypts stored data and backups, with optional customer-managed keys.

Restrict

Column-level security

Lets only certain users see particular columns, such as salary or national identifiers.

Restrict

Row-level security

Filters which rows a user can see, for example only their own region’s customers.

Mask

Dynamic data masking

Shows partial or obscured values to non-privileged users while the stored data stays unchanged.

Detect

Auditing and threat detection

Records activity and flags suspicious behavior, such as unusual access patterns.

Classify

Data discovery and classification

Finds and labels sensitive columns so policies and audits can target them.

ANTI-PATTERN-02 Avoid
Problem

Every engineer is a workspace administrator, the storage account allows access from all networks, and connection passwords are typed directly into linked services.

Why It’s Harmful

A single leaked credential or mistaken action exposes the whole estate, and there is no clear record of who did what.

Correct Approach

Use groups with least-privilege roles, private connectivity, managed identities, and Key Vault for secrets, and keep full administration for a small, audited set of people.

16Data Governance, Catalog, and Lineage

Security says who may touch the data. Governance says what the data is, where it came from, and whether it can be trusted.

Why governance matters

As lakes and warehouses grow, people lose track of what exists. Duplicate datasets appear, definitions drift apart, and nobody knows whether a number can be used in a board report or where a sensitive column went. Governance answers these questions through catalogs, ownership, definitions, quality rules, and lineage.

Microsoft Purview

Microsoft Purview integrates with Synapse to scan data sources, build a searchable catalog, classify sensitive information automatically, and capture lineage, the map showing how data flows from source through pipelines and notebooks into tables and reports. When a report number looks wrong, lineage lets you trace it back to the exact step that produced it. When a source system changes, lineage shows what will be affected downstream.

Simple Analogy

A good catalog is like the label on a food package: what it contains, who made it, when, and whether it contains allergens. Lineage is the supply chain record that tells you which farm the ingredients came from if there is ever a recall.

Governance building blocks

Ownership and stewardship

Every important dataset has a named business owner and technical steward responsible for definitions and quality.

Business glossary

Shared definitions of terms such as active customer or net revenue, so that every team calculates them the same way.

Data quality rules

Automated checks for completeness, validity, uniqueness, and freshness, with alerts when rules fail.

Retention and privacy

Policies for how long data is kept, how personal data is handled, and how deletion requests are honored across lake, warehouse, and backups.

i
Practical Tip

Start governance with the ten datasets that matter most. Give them owners, definitions, and quality checks first. A small trusted core beats a vast catalog that nobody reads.

17Monitoring, Logging, and Operations

A platform that moves critical data every night must show you what is happening, before users complain.

Synapse Studio monitoring

The monitor hub in Synapse Studio shows pipeline runs, trigger runs, SQL requests, Spark applications, and integration runtime status. You can see which runs failed, how long they took, and drill into error messages. It is the first place to look during an incident.

Azure Monitor and Log Analytics

For history, alerting, and cross-service analysis, send diagnostic logs and metrics to Azure Monitor and a Log Analytics workspace. This lets you build dashboards, set alerts, correlate pipeline failures with infrastructure events, and keep logs longer than the Studio view holds them.

What to watch

AreaSignalsWhy they matter
Dedicated SQL poolDWU usage, active and queued queries, tempdb use, data movement, cache hit rates, long-running requestsShow saturation, queuing, and inefficient queries
Serverless SQLData processed per query, query duration, failed queriesShow cost drivers and heavy scans
Spark poolsExecutor use, job duration, memory pressure, session counts, idle timeShow right-sizing opportunities and wasted compute
PipelinesFailure rate, run duration trends, rows copied, trigger delaysShow data freshness risks
Integration runtimesCPU, memory, queue length, node status for self-hosted onesShow ingestion bottlenecks
StorageCapacity, transactions, throttling, access errorsShow lake health and permission problems

Dynamic management views

Dedicated SQL pools expose system views that list current sessions, running and queued requests, the steps of each query plan, and the amount of data moved. They are the precise tools for answering which query is running, why it is waiting, and where the time is spent. Learn the handful of views that show active requests and request steps, and build saved queries for them.

Alerting and runbooks

Alert on events that need action: a pipeline failure, a pool paused unexpectedly, queue times exceeding a limit, storage nearing capacity, or a cost threshold crossed. For each alert, write a short runbook describing what it means, how to check it, and who to call. Review alerts quarterly and remove noise.

i
Practical Tip

Measure data freshness, not just job success. A pipeline that succeeds but loads nothing is worse than one that fails loudly. Track the newest timestamp in each important table and alert when it falls behind.

18Performance Tuning

Tuning a distributed warehouse is mostly about moving less data, spreading work evenly, and giving the planner good information.

The tuning loop

1

Find the slow or expensive queries

Use monitoring and system views to rank requests by duration, resources, and frequency.

2

Study the plan steps

Look for data movement steps, large shuffles, and operations processing far more rows than expected.

3

Fix the root cause

Adjust distribution, statistics, partitions, or query shape instead of only adding compute.

4

Measure and record

Compare before and after, and write down what worked so lessons are not lost.

Data skew

Skew means some distributions hold far more rows than others. Since a query finishes only when the slowest distribution does, one overloaded distribution makes the whole query slow even if fifty-nine are idle. Skew comes from poorly chosen hash keys, such as columns with many nulls or a few dominant values. Check row counts per distribution regularly for large tables and redistribute on a better key when skew is found.

Reducing data movement

Align distribution keys of large tables that join often. Replicate small dimensions. Join on the distribution key whenever possible. Pre-aggregate before joining when the question allows it. Avoid wide intermediate results by selecting only needed columns early in the query.

Columnstore health

Columnstore quality depends on full, well-compressed row groups. After heavy updates, deletes, or many small loads, the pool may hold many small or partially deleted row groups. Rebuilding indexes, ideally with enough memory granted through a suitable workload group, restores quality. Monitor row group quality as part of routine maintenance.

Statistics, caching, and views

Keep statistics fresh on join and filter columns. Enable result set caching for read-heavy reporting pools. Use materialized views for expensive aggregations that many reports repeat. Consider ordered columnstore for tables that are filtered on a common range column.

Lake-side tuning

For Spark and serverless work, use columnar formats, partition by commonly filtered columns, avoid millions of tiny files, compact regularly, and prune folders in queries. Cache frequently used datasets in Spark during a session where repeated reads occur.

60
Distributions in every dedicated SQL pool table
1M
Rows per columnstore row group for ideal quality
1
Slowest distribution decides the query time
ANTI-PATTERN-03 Avoid
Problem

Reports run slowly, so the team scales the pool to the largest size and leaves it there around the clock.

Why It’s Harmful

Costs jump, and if the real issue is skew or data movement, the problem persists. The larger pool also hides design flaws until data grows again.

Correct Approach

Diagnose plans and table design first, scale for genuine capacity needs, and pause or scale down outside peak hours.

19Cost Management

Each engine in Synapse is billed differently. Understanding the meters is the first step to controlling the bill.

The billing models

ComponentHow it is billedMain way to save
Dedicated SQL pool computePer hour, by pool size, while the pool is onlinePause when idle, scale down off-peak, buy reserved capacity for steady use
Dedicated SQL pool storagePer terabyte stored, including restore point snapshotsRemove unused tables, drop old staging data, compress well
Serverless SQLPer terabyte of data processedUse Parquet or Delta, partition, select only needed columns, set cost limits
Spark poolsPer virtual core hour while sessions or jobs runShort idle timeouts, right-sized nodes, autoscale limits
Pipelines and data flowsPer orchestration run, per data movement hour, and per data flow core hourBatch small runs, reduce data flow cluster time, prefer efficient copy settings
Lake storagePer gigabyte per month plus operationsLifecycle rules to move old data to cooler tiers, delete temporary files
Simple Analogy

A dedicated pool is a leased factory: the rent runs whether or not machines are producing, unless you switch the building off. Serverless is hiring a contractor per job. Spark is renting heavy equipment by the hour. Knowing which meter is running at each moment is the key to a sensible budget.

Practical savings steps

Pause and resume dedicated pools

Automate pausing at night and weekends when no one queries the warehouse, and resume before the first loads. Remember that a paused pool still bills for storage.

Scale to the workload

Run heavier sizes during loads and month-end, and lighter sizes for daytime reporting if concurrency allows.

Reserve steady capacity

If a pool runs most of the time, one-year or three-year reserved capacity provides a meaningful discount compared to pay as you go.

Control serverless scanning

Set daily, weekly, and monthly data-processed limits, and train analysts to select columns instead of everything.

Govern Spark sessions

Short auto-pause settings, limits on pool sizes, and policies that stop notebooks left open overnight.

Tag and report

Tag resources by team and project and send monthly cost reports to owners so that spending has a face.

!
Common Mistake

Assuming that a paused dedicated pool costs nothing. Storage and snapshots continue to be billed, and forgotten pools in development subscriptions can quietly cost real money for months.

i
Practical Tip

Prices and discounts vary by region and change over time. Use the Azure pricing calculator with measured usage, and compare against Fabric capacity pricing when evaluating a move.

20DevOps, Environments, and CI/CD

Analytics code deserves the same discipline as application code: version control, review, testing, and automated deployment.

Source control in the workspace

Synapse Studio can connect a workspace to a Git repository. Developers work in branches, review changes through pull requests, and merge into a main branch. A separate publish branch holds the generated templates that describe the workspace content, which are used for deployment. This gives you history, collaboration, and the ability to roll back mistakes.

Multiple environments

Use at least separate development, test, and production workspaces. Developers experiment freely in development, testers validate changes with realistic data in test, and production runs only approved releases. Each environment has its own storage, pools, and security settings, and connection details differ between them, so parameters and variable files are essential.

1

Develop in a feature branch

Build pipelines, notebooks, and scripts in the development workspace connected to Git.

2

Review and merge

Peers inspect changes through pull requests, with automated checks for naming and quality.

3

Build and deploy to test

A release pipeline deploys the published templates to the test workspace with environment-specific parameters.

4

Validate and approve

Run data quality and regression tests, then require a human approval for production.

5

Release to production

Deploy during an agreed window, monitor closely, and keep the prior version ready for rollback.

Database changes

Table definitions, views, and procedures in dedicated SQL pools should be managed as code too, using database projects or migration scripts that are versioned and deployed through the same release pipeline. Never change production schemas by hand. Test schema changes against a copy because loads, distributions, and partitions can make a change much heavier than it looks.

Testing data work

Test transformations with small fixed datasets whose expected results are known, validate row counts and totals between layers, and check that rerunning a job does not duplicate data. Automated tests catch the errors that are most embarrassing in front of business users.

i
Practical Tip

Keep secrets and environment-specific values out of the repository. Use Key Vault references and deployment parameters, so the same code runs unchanged across environments.

21Backup, Recovery, and Business Continuity

Analytical data feeds executive decisions and regulatory reports, so you must know how to get it back.

Restore points in dedicated SQL pools

A dedicated SQL pool automatically takes snapshots of its data several times a day and keeps them for a limited period, typically seven days. These automatic restore points allow you to restore the pool to an earlier state by creating a new pool from a snapshot. You can also create your own user-defined restore points before risky operations such as a large schema change or load, and keep them for a chosen time. Restoring creates a new pool, so the original is untouched until you decide to switch.

Geo-backup and regional disasters

Dedicated pools also keep a daily geo-redundant backup in the paired region, which allows a restore into another region if the primary region is unavailable. The recovery point can be up to a day old, and the restore takes time proportional to the data size. For stricter objectives, organizations run a second workspace in another region and reload or replicate data, accepting higher cost for faster recovery.

Simple Analogy

Automatic snapshots are like photographs of the warehouse taken every few hours by a security camera. A user-defined restore point is a photograph you take yourself before a risky rearrangement. A geo-backup is a daily photograph stored in a vault in another city in case the whole neighborhood is lost.

The lake and other components

Lake data is protected by the storage account’s redundancy options, which can replicate data across zones or regions. Enable soft delete and versioning so that accidental deletions can be undone. Workspace content such as pipelines and notebooks is protected by Git. Make sure that every part of the platform has a recovery story, not just the warehouse.

AssetProtectionNotes
Dedicated SQL pool dataAutomatic and user-defined restore points, geo-backupRestore creates a new pool
Lake filesStorage redundancy, soft delete, versioningChoose zone or geo redundancy per business need
Pipelines, notebooks, scriptsGit repository and release artifactsRebuild a workspace from code
Security and network settingsInfrastructure as code templatesRecreate identically in another region
SecretsKey Vault with soft delete and purge protectionProtect against accidental key loss
!
Common Mistake

Documenting a disaster recovery plan that has never been run. Rehearse a restore at least once a year, measure how long it really takes, and compare it to what the business expects.

22Migration: Into Synapse and Onward to Fabric

Most teams are either bringing an old warehouse to the cloud or deciding what to do with Synapse as Fabric matures.

Migrating a legacy warehouse into Synapse

Moving from an on-premises warehouse involves much more than copying tables. The steps are to assess what exists, redesign tables for distribution and columnstore instead of copying the old design blindly, convert code and procedures for SQL differences, move data through the lake in bulk, validate results, and run both systems in parallel before cutting over. The largest effort is usually rewriting and testing logic, not moving bytes.

Deciding whether to move from Synapse to Fabric

Fabric uses OneLake as a single logical lake, Delta as its standard table format, and capacity-based pricing shared across engines. The migration question depends on your situation. Industry guidance describes a phased approach, which is summarized below, and Microsoft has also introduced tooling such as a migration assistant for Fabric Data Warehouse, which was in preview at the time of writing. Confirm current availability before depending on any tool.

1

Assess

Inventory pools, pipelines, notebooks, security settings, and dependencies. Identify unsupported features and Spark runtime versions.

2

Size capacity

Estimate Fabric capacity from measured usage in Synapse before committing, and compare cost scenarios honestly.

3

Connect the data

Use shortcuts so that Fabric can read existing lake data in place instead of copying it, and replicate warehouse tables as needed.

4

Refactor workloads

Update notebooks for newer Spark runtimes, move pipelines to Fabric data integration, and adjust SQL code for the differences between engines.

5

Run in parallel and cut over

Run both platforms for a period, compare results, switch consumers such as Power BI reports, and retire Synapse resources.

flowchart LR
  A["Assess estate and dependencies"] --> B["Size target capacity"]
  B --> C["Connect lake data in place"]
  C --> D["Refactor notebooks, pipelines, SQL"]
  D --> E["Run both platforms in parallel"]
  E --> F["Cut over consumers"]
  F --> G["Retire old resources"]
  E -. issues found .-> D
        
FIG 4 — A phased path for moving analytics workloads from Synapse to Fabric

Decisions to make early

Move sooner when

  • You depend on Spark runtimes that are already out of support
  • Power BI latency is a business problem that Fabric-only features could solve
  • You are about to make large new investments in the platform
  • Your region and compliance needs are already supported in Fabric

Move later when

  • Your warehouse is stable, well tuned, and meets all needs
  • Regulatory regions lack feature parity today
  • Staff are mid-way through a major business project
  • The refactoring cost outweighs benefits this year
i
Practical Tip

Whatever you decide, keep new work portable: use open formats such as Parquet and Delta, keep logic in version-controlled code, and avoid features that tie you to one engine. Portable design makes any future move cheaper.

23Design Patterns and Anti-Patterns

Patterns are proven solutions. Anti-patterns are mistakes that appear again and again in real projects.

Helpful patterns

Lakehouse with a serving warehouse

Keep all data in the lake with medallion layers, use Spark for heavy preparation, and load only gold data needed for high-concurrency reporting into a dedicated pool.

Logical data warehouse

Use serverless SQL views over the lake for self-service and exploration, avoiding unnecessary copies for lightly used datasets.

Metadata-driven ingestion

Store the list of sources, targets, and rules in a control table and let one generic pipeline process them all, so adding a source means adding a row, not building a pipeline.

Star schema with conformed dimensions

Share common dimensions such as date, customer, and product across fact tables, so numbers from different subject areas can be combined consistently.

Slowly changing dimensions

Preserve history of changing attributes, such as a customer’s address, by adding new versions with validity dates, so past reports remain correct.

Isolate workloads

Separate loading, reporting, and experimentation using workload groups, or even separate pools, so one cannot harm another.

flowchart TD
  SRC["Operational Systems and Files"] --> ING["Metadata-driven Pipelines"]
  ING --> BR["Bronze in Lake"]
  BR --> SP["Spark: clean and conform"]
  SP --> SV["Silver in Lake"]
  SV --> SP2["Spark or SQL: model"]
  SP2 --> GD["Gold in Lake"]
  GD --> SQLP["Dedicated Pool: high-concurrency serving"]
  GD --> SRV["Serverless Views: self-service"]
  SQLP --> PBI["Power BI"]
  SRV --> PBI
  PUR["Purview: catalog and lineage"] -. governs .-> GD
        
FIG 5 — A common reference architecture combining lake, Spark, and warehouse serving

Frequent anti-patterns

ANTI-PATTERN-04 Avoid
Problem

Copying an old transactional database schema into the warehouse unchanged and querying it with the same joins.

Why It’s Harmful

Highly normalized schemas require many joins and heavy data movement in a distributed engine. Reports become slow and fragile.

Correct Approach

Remodel into star schemas with carefully chosen distribution, and precompute common aggregations.

ANTI-PATTERN-05 Avoid
Problem

Every team creates its own copy of the same data in its own folders and tables, with its own definitions.

Why It’s Harmful

Numbers disagree, storage and compute are wasted, and nobody knows which version is right.

Correct Approach

Publish shared gold datasets with owners and definitions, catalog them, and let teams build on top rather than copying.

ANTI-PATTERN-06 Avoid
Problem

Production pipelines contain hard-coded server names, folder paths, and passwords, and are edited directly in the production workspace.

Why It’s Harmful

Changes cannot be reviewed or reversed, environments drift apart, and secrets leak.

Correct Approach

Parameterize, use Key Vault, keep everything in Git, and deploy through a release process.

24Real-World and Industry Scenarios

These illustrative composites show how the building blocks come together. They describe typical situations, not specific named customers.

Retail chain: unified sales and inventory analytics

A retailer lands point-of-sale files and inventory feeds in the lake each hour, cleans them in Spark, models sales and stock as star schemas, and loads gold data into a dedicated pool. Store managers view dashboards in Power BI, and the pool scales up for the morning refresh then scales down. Serverless SQL serves the data science team’s ad hoc questions.

Bank: regulatory reporting with strong controls

A bank runs Synapse in a managed virtual network with data exfiltration protection and private endpoints only. Column-level security and masking protect personal data, Purview records lineage for audit, and restore points are taken before each reporting cycle. Reports must reconcile exactly, so quality checks gate every load.

Manufacturer: sensor analytics

Factory sensors stream into Event Hubs. Spark Structured Streaming writes to Delta tables, and nightly jobs aggregate production quality metrics. Engineers use notebooks to build models that predict machine failure, and gold-layer summaries feed maintenance dashboards.

Healthcare network: combining many source systems

A hospital group uses metadata-driven pipelines to ingest dozens of systems, standardizes patient and encounter records in silver, de-identifies data for research in gold, and enforces folder-level permissions so that researchers never see identifiable fields.

Software company: product usage analytics

A software firm captures application events, uses Synapse Link on its operational database for near real-time views, and runs weekly cohort analysis in Spark. Product managers explore trends through serverless SQL and Power BI.

Logistics firm planning its Fabric move

A logistics company with a stable dedicated pool keeps it running while it moves new projects to open formats and portable code, tracks Spark runtime lifecycles, and prepares a phased plan to shift reporting workloads when its regions and features are ready.

25Best Practices and Common Mistakes

These habits separate smooth analytics platforms from expensive, fragile ones.

Best Practices

  • Choose the engine that fits each task: serverless for exploration, Spark for heavy preparation, dedicated pools for high-concurrency serving
  • Design hash keys and partitions deliberately, and replicate small dimensions
  • Use staging tables and bulk loading instead of row-by-row inserts
  • Create workload groups for loading, reporting, and exploration
  • Organize the lake in medallion layers with clear folder naming
  • Secure with private connectivity, managed identities, least privilege, and Key Vault
  • Keep everything in Git and deploy through environments
  • Pause, scale, and cap compute, and review costs monthly
  • Track runtime lifecycles and platform direction on a calendar

Common Mistakes

  • Hash distributing on a date or a skewed column
  • Leaving dedicated pools running all night with no users
  • Letting reports read raw lake files with no structure
  • Creating huge numbers of small files and tiny partitions
  • Giving broad administrator rights to everyone
  • Editing production directly with no version control
  • Ignoring end-of-support dates for Spark runtimes
  • Never testing recovery or reloads
  • Scaling hardware instead of fixing design
i
A Simple Go-Live Checklist

Before launch, confirm: workspace networking chosen, identities and roles assigned, lake layers and permissions set, table distributions reviewed, workload groups created, loads tested at volume, monitoring and alerts live, cost limits set, restore rehearsed, and runtime and platform lifecycle dates recorded.

26A Troubleshooting Playbook

When a report is late or a query crawls, an ordered approach finds the cause faster than guessing.

Start by locating the layer

Every problem sits in one of a few layers: the source system, the ingestion pipeline, the lake, the compute engine, the model and query, or the reporting tool. Ask which layer first. Check freshness of source data, status of the latest pipeline run, health of the pool, and then the specific query. Narrowing down saves hours.

flowchart TD
  P["Report is wrong or late"] --> Q1{"Did the latest pipeline run succeed?"}
  Q1 -->|No| F1["Read the failed activity error, check source access, runtime, and permissions"]
  Q1 -->|Yes| Q2{"Is the data fresh in the lake and tables?"}
  Q2 -->|No| F2["Check trigger timing, file arrival, and incremental watermarks"]
  Q2 -->|Yes| Q3{"Is the pool or engine healthy and not queuing?"}
  Q3 -->|No| F3["Check paused state, workload groups, concurrency, and resource limits"]
  Q3 -->|Yes| Q4{"Is one query slow?"}
  Q4 -->|Yes| F4["Inspect plan steps for data movement, skew, stale statistics, and missing caches"]
  Q4 -->|No| F5["Check the reporting layer, semantic model, and refresh settings"]
        
FIG 6 — A decision path for diagnosing late or slow analytics

Common symptoms and likely causes

SymptomLikely causesFirst checks
Queries stuck in a queueConcurrency limit reached, a large query holding memory, workload group limits too tightActive and queued requests, workload group settings, long-running sessions
One query much slower than similar onesData movement, skew, outdated statistics, missing materialized viewPlan steps, rows per distribution, statistics age
Load takes far longer than beforeMany small files, loading into columnstore with tiny batches, resource contentionFile sizes, load method, workload group, concurrent jobs
Serverless bill jumpsDashboards scanning large uncompressed files, select-all queries, missing partition pruningData processed per query, file formats, folder layout
Spark job fails after months of successRuntime end of support, library change, data volume growth, schema changeRuntime version, error logs, recent data differences
Pipeline cannot reach a sourceNetwork rule changed, expired credential, self-hosted runtime offlineIntegration runtime status, connection test, Key Vault secret validity
Users see data they should notOverly broad lake or SQL permissions, missing row-level securityRole assignments, folder access control lists, security policies

Skew and movement detective work

If a query is slow on a dedicated pool, first look at the steps of its plan. A step that moves a very large number of rows between nodes is a red flag. Then check whether the tables in the join share a distribution column. Finally, compare row counts across distributions for the largest table. Uneven counts indicate skew. The fix is usually to change the distribution column, replicate a small table, or restructure the query, and then to confirm improvement with the same measurements.

Simple Analogy

If a team of sixty movers is slow to finish, you do not hire more movers until you have checked whether one person was given most of the boxes, or whether the team spends the day walking boxes from one end of the building to another. Skew and data movement are those two problems.

i
Practical Tip

Keep a log of incidents with symptom, cause, fix, and prevention. Within a year it becomes your team’s most useful guide, and many entries will turn into automated checks.

27Frequently Asked Questions

Q1Is Azure Synapse Analytics being retired?

Industry guidance from mid-2026 says that Microsoft had not announced an end-of-life date for Synapse and that existing pools remain supported, while new investment is concentrated on Fabric. Individual components, such as older Spark runtimes and Data Explorer pools, have their own lifecycle dates, so check the official lifecycle pages before relying on them.

Q2What is the difference between a dedicated SQL pool and a serverless SQL pool?

A dedicated pool is a provisioned, always-sized warehouse with its own distributed storage and tuned tables, billed by hour. Serverless has no provisioned resources, queries files in the lake, and bills by data processed.

Q3Why are there always sixty distributions?

It is a fixed design decision that lets pool size change without re-cutting the data. Scaling changes how many compute nodes share the sixty pieces, not the number of pieces.

Q4Which distribution method should I use by default?

Use hash on a well-chosen key for large fact tables, replicated for small dimensions, and round robin for staging tables. If unsure for a new table, start with round robin for loading, then refine as you learn the join patterns.

Q5Does pausing a dedicated pool delete my data?

No. Pausing stops compute charges and keeps your data and snapshots in storage, which continues to be billed. Resuming brings the pool back with the same tables.

Q6When should I use Spark instead of SQL?

Use Spark for large-scale cleaning, complex transformations, semi-structured data, streaming, and machine learning. Use SQL pools for structured, repeatable analytics and for serving many concurrent report users.

Q7How can I stop serverless queries from generating a huge bill?

Use Parquet or Delta, partition folders, select only needed columns, and configure the daily, weekly, and monthly data-processed limits on the serverless pool.

Q8Can I keep Synapse data private from the internet?

Yes. Create the workspace with a managed virtual network, use managed private endpoints for outbound connections, add private endpoints for access to the workspace, enable data exfiltration protection, and disable public network access.

Q9What should I do about the end of support for Spark 3.4?

Inventory the pools and jobs that still use it, test your notebooks and libraries on the newer Synapse runtime or on a Fabric runtime, and migrate before jobs are disabled. Microsoft’s documentation lists the end-of-support date and replacement options.

Q10Should I build new projects on Synapse or Fabric?

For most new greenfield projects, evaluate Fabric first, since it receives the newer features. Choose Synapse for new work only when you have clear reasons such as regional availability, existing investments, or specific features, and keep the design portable using open formats.

Q11How do I recover from a bad data load?

Restore from a user-defined restore point taken before the load, switch partitions back, or reload from the immutable bronze files in the lake. Taking restore points before risky operations is a cheap and powerful habit.

Q12Do I need a data warehouse if I have a lakehouse?

Not always. A lakehouse with serverless SQL or Spark may be enough for modest concurrency. A dedicated warehouse remains attractive when many users need fast, consistent responses on structured data, or when workload isolation and predictable performance matter.

28Summary and Key Takeaways

Azure Synapse Analytics brings together a massively parallel data warehouse, serverless querying, Apache Spark, data pipelines, and operational links in one workspace built on a shared data lake. Its strengths come from using the right engine for each job, designing tables so that work spreads evenly and data movement stays low, loading in bulk through staging, isolating workloads, and layering the lake so that trust grows from raw data to business-ready data. Security is built in layers around private networking, identities, and data protection features, governance gives the data meaning and traceability, and disciplined operations keep costs and reliability under control. At the same time, Microsoft’s investment has shifted toward Fabric, and specific components have reached or are approaching end of support, so wise teams keep their designs portable, watch lifecycle dates, and plan their direction deliberately. Treat official Microsoft documentation as the final word and this guide as your map.

Key Takeaways

  • Synapse is a bundle of engines — dedicated SQL, serverless SQL, Spark, and pipelines share one workspace and one lake, and choosing the right engine per task is the core skill.
  • Sixty distributions shape everything — hash large facts on a high-cardinality key, replicate small dimensions, and avoid skew and data movement.
  • Load through staging — use bulk loading, large files, and set-based transformations rather than row-by-row inserts.
  • Layer the lake — bronze, silver, and gold with open formats such as Parquet and Delta keep data trustworthy and portable.
  • Isolate and secure — workload groups protect critical jobs, while managed virtual networks, private endpoints, least-privilege roles, and Key Vault protect the data.
  • Control cost deliberately — pause dedicated pools, cap serverless scanning, shorten Spark idle times, and reserve steady capacity.
  • Mind the lifecycle — Spark 3.4 has reached end of support and Fabric is where new investment goes, so track lifecycle dates and plan a phased, portable path forward.