ADF Pipelines Explained: Building Your First Pipeline
A beginner's guide to pipelines in Azure Data Factory: what a pipeline and an activity are, the three kinds of activity, the objects you create for a first copy from blob storage to a SQL table, the JSON behind the canvas, why Debug moves real data, what Publish does, and how to read a run's output.
GloryTecks Team
Training & Placement Faculty
Last updated: 1 October 2026
In Azure Data Factory, the pipeline is the thing you run. Everything else, connections, datasets, triggers, exists to serve it. Microsoft defines a pipeline as a logical grouping of activities that together perform a task, deployed and scheduled as a unit instead of activity by activity (Microsoft Learn: pipelines and activities).
This guide explains what is inside a pipeline and walks through building the simplest useful one: copy a CSV file from blob storage into a SQL table. The steps follow Microsoft's documentation; they were not carried out in an Azure subscription for this article.
Pipelines and activities
An activity is one step. ADF groups activities into three kinds:
| Kind | What it does | Examples |
|---|---|---|
| Data movement | Copies data between stores | Copy |
| Data transformation | Changes data, in ADF or on another service | Data flow, Stored procedure, Databricks notebook |
| Control | Directs the workflow | ForEach, If Condition, Lookup, Execute Pipeline, Set Variable, Wait |
Activities are connected by dependencies: this one runs after that one succeeds, or fails, or completes either way. Activities with no dependency between them run in parallel. A pipeline has a default soft limit of 120 activities, a number worth knowing only because approaching it means the pipeline should be split.
What you need before the pipeline
A pipeline that copies data needs four supporting objects. Create them in this order:
- A linked service for the source. The connection to the storage account.
- A linked service for the sink. The connection to the database.
- A source dataset. Which container, folder and file, and that it is delimited text with a header row.
- A sink dataset. Which table.
Datasets vs linked services vs pipelines explains why these are separate. The short version: a linked service says where and how to connect; a dataset says what data, there.
Building it
- Create the data factory in Azure Data Factory Studio. Microsoft notes the UI is supported in Microsoft Edge and Google Chrome.
- Create the two linked services on the Manage tab. Test each connection.
- Create the two datasets on the Author tab. Preview the source data to confirm ADF can read it.
- Create a pipeline and drag a Copy data activity onto the canvas.
- Set the Source tab to the CSV dataset and the Sink tab to the table dataset.
- Check the Mapping tab. Import schemas to see which source column goes to which sink column, and fix any that do not line up.
- Select Debug.
What the canvas produces
Every pipeline is a JSON document. The canvas is an editor for it, and the code view shows it. The pipeline above, written from the documentation and not deployed:
{
"name": "CopyZonesToSql",
"properties": {
"description": "Load the zone lookup file into the staging table",
"activities": [
{
"name": "CopyZonesCsvToSql",
"type": "Copy",
"inputs": [
{ "referenceName": "ZonesCsv", "type": "DatasetReference" }
],
"outputs": [
{ "referenceName": "ZonesTable", "type": "DatasetReference" }
],
"typeProperties": {
"source": { "type": "DelimitedTextSource" },
"sink": { "type": "AzureSqlSink" }
},
"policy": {
"timeout": "00:30:00",
"retry": 2,
"retryIntervalInSeconds": 60
}
}
]
}
}Three things to notice.
The activity names datasets, not connections. inputs and outputs reference datasets; the datasets reference linked services. The Copy activity takes exactly one input and one output (Microsoft Learn: Copy activity).
Source and sink have types. DelimitedTextSource and AzureSqlSink tell the activity how to read and how to write. Each connector has its own options here.
The policy is where reliability starts. By default an activity's timeout is 12 hours and its retry count is 0. A copy that hangs will hang for half a day, and a transient network error fails the run. Setting a realistic timeout and a couple of retries, as above, is the first production habit to form.
Reading the JSON is worth the effort early. It is what gets stored in Git, what a reviewer compares between versions, and what deployment moves between environments.
Debug moves real data
Debug runs the pipeline from the canvas without publishing it. It is easy to assume this is a dry run. It is not. The documentation is explicit: selecting Debug actually runs the pipeline, and if it contains a copy activity, the test run copies data from source to destination (Microsoft Learn: iterative development and debugging).
Two consequences:
- Point debug runs at test tables and folders, as Microsoft recommends, until the pipeline is right.
- Running Debug twice loads the data twice if the sink simply inserts. That is your first encounter with the question every pipeline must answer: what happens on a rerun?
Publish and trigger
Changes on the canvas are drafts until you Publish. Publishing saves them to the service, and only published pipelines can be run by triggers. With Git integration enabled, you save to a branch and publish from the collaboration branch instead.
A published pipeline runs in one of two ways:
- Trigger now: a manual run of the published version.
- A trigger: a schedule, a tumbling window, or an event such as a file arriving. Pipeline dependencies and scheduling covers these.
Reading the result
After a run, select the activity's output. For a Copy activity it reports, among other things (Microsoft Learn: monitor copy activity):
| Field | Tells you |
|---|---|
rowsRead, rowsCopied | How many rows left the source and reached the sink |
dataRead, dataWritten | Volume in bytes |
copyDuration, throughput | How long, and how fast |
usedDataIntegrationUnits | The compute the copy used, which drives its cost |
rowsSkipped | Rows rejected, if fault tolerance is on |
Compare rowsRead with rowsCopied, and both with what you expected. A run marked Succeeded that copied zero rows is a common and silent failure, usually a wrong path or an empty source.
What a first pipeline leaves unsolved
The pipeline works, and it is not yet a good pipeline:
- It is hard-coded to one file and one table. Parameterising pipelines fixes that.
- It duplicates on rerun. Truncate-and-load, upsert, or loading only what changed are the remedies; see the Copy activity guide.
- It tells nobody when it fails.
- It runs only when you click.
Each of those is a stage in the Azure Data Factory roadmap. The first pipeline's job is to make the objects and their relationships concrete, so the rest has something to attach to.
What is a pipeline in Azure Data Factory?
What is the difference between a pipeline and an activity?
Does Debug in ADF change real data?
Why do I have to publish a pipeline?
Azure Data Factory and ETL pipeline design are covered in the Data Engineering course.
Sources
- Pipelines and activities in Azure Data Factory and Azure Synapse Analytics (Microsoft Learn) — Microsoft Learn
- Copy activity in Azure Data Factory and Azure Synapse Analytics (Microsoft Learn) — Microsoft Learn
- Iterative development and debugging with Azure Data Factory (Microsoft Learn) — Microsoft Learn
- Monitor copy activity (Microsoft Learn) — Microsoft Learn
- Quickstart: create a data factory (Microsoft Learn) — Microsoft Learn
GloryTecks Team
Training & Placement Faculty
The GloryTecks faculty team mentors learners across Data Science, AI and Data Engineering, with a focus on real-time projects and placement readiness in Hyderabad.
Want to master Azure Data Factory?
Join GloryTecks’ expert-led Data Engineering training in Hyderabad with real-time projects and 100% placement support.
Linked Services in Azure Data Factory Explained
NextAzure Data Factory Roadmap 2026: A Complete Guide
Related articles
Triggers in ADF: Schedule, Tumbling Window and Event
The four Azure Data Factory trigger types — schedule, tumbling window, storage event and custom event — compared on what they guarantee, with a decision table, trigger JSON you can adapt, and the settings that cause missed or duplicate runs.
Mapping Data Flows in ADF: Transformations Without Code
Mapping data flows let you design transformations on a canvas in Azure Data Factory and run them on Spark clusters the service manages. This guide explains how they work, walks through one flow stage by stage with real row counts, and sets out when a data flow is the right tool.
ADF Control Flow: ForEach, If and Until Activities
Control flow activities turn a list of steps into logic. This guide covers the four that do most of the work in Azure Data Factory: ForEach for loops, If Condition and Switch for branching, and Until for polling, with each one's properties and documented limits, a JSON example, the nesting rule and concurrency traps.