Python Microsoft Fabric API - Jobs
run_job, get_job and cancel_job, the job types for notebooks, pipelines and report refreshes, and the statuses.
Running a notebook, running a pipeline and refreshing a report's data are all jobs in Fabric, started, checked and cancelled with the same three methods. Every one takes the workspace ID and the ID of the item the job belongs to.
Job types
| Item | Job type | What it does |
|---|---|---|
| Notebook | RunNotebook | Runs the notebook once |
| Pipeline | Pipeline | Runs the pipeline once |
| A report's dataset | DefaultSemanticModelRefresh | Refreshes the report's data from the tables it reads |
Statuses
get_job reports one of these in status:
| Status | Meaning |
|---|---|
NotStarted | Accepted, not yet running |
InProgress | Running |
Completed | Ended without error |
Failed | Ended with an error, details in failureReason |
Cancelled | Stopped with cancel_job or from Fabric |
Deduped | Not started, because the same job was already running |
The first two mean the job is still going, everything else means it has ended.
run_job
Starts a job and returns as soon as Fabric has accepted it, without waiting for it to run.
| Parameter | Type | Meaning |
|---|---|---|
workspace_id | str | The workspace the item is in |
item_id | str | The notebook, pipeline or dataset |
job_type | str | One of the job types above |
payload | dict | Parameters for the job, or none |
Returns the job's ID as a string, for get_job and cancel_job.
Parameters travel under executionData. A notebook takes them for its parameter cell, each with a value and a type, a pipeline takes them as plain values:
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class RunNotebook(Service):
def handle(self):
workspace_id = '11111111-2222-3333-4444-555555555555'
notebook_id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
conn = self.microsoft.fabric['My Fabric']
payload = {
'executionData': {
'parameters': {
'location': {'value': 'Riverside', 'type': 'string'},
'days_ahead': {'value': '1', 'type': 'int'},
}
}
}
job_id = conn.run_job(workspace_id, notebook_id, 'RunNotebook', payload)
self.response.payload = {'job_id': job_id}
payload = {
'executionData': {
'parameters': {
'source_table': 'admissions',
'target_table': 'occupancy',
}
}
}
job_id = conn.run_job(workspace_id, pipeline_id, 'Pipeline', payload)
A report refresh takes no parameters:
get_job
Returns the job's current state.
| Parameter | Type | Meaning |
|---|---|---|
workspace_id | str | The workspace the item is in |
item_id | str | The item the job belongs to |
job_id | str | The ID run_job returned |
Returns a dict with id, itemId, jobType, invokeType, status, startTimeUtc, endTimeUtc and, for a failed job, failureReason.
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class GetJob(Service):
def handle(self):
workspace_id = '11111111-2222-3333-4444-555555555555'
item_id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
job_id = 'dddddddd-eeee-ffff-0000-111111111111'
conn = self.microsoft.fabric['My Fabric']
job = conn.get_job(workspace_id, item_id, job_id)
self.response.payload = {'status': job['status'], 'started': job['startTimeUtc'], 'ended': job['endTimeUtc']}
cancel_job
Asks Fabric to stop a running job. Returns nothing, and the job's status becomes Cancelled once it has stopped, which get_job shows.
| Parameter | Type | Meaning |
|---|---|---|
workspace_id | str | The workspace the item is in |
item_id | str | The item the job belongs to |
job_id | str | The ID run_job returned |
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class CancelJob(Service):
def handle(self):
workspace_id = '11111111-2222-3333-4444-555555555555'
item_id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
job_id = 'dddddddd-eeee-ffff-0000-111111111111'
conn = self.microsoft.fabric['My Fabric']
conn.cancel_job(workspace_id, item_id, job_id)
See also
| Page | What it covers |
|---|---|
| Picking up results when a notebook finishes | run_job and get_job across two scheduled services |
| Running a pipeline and refreshing a report | All three methods in one service, with a timeout |
| Workspaces | Finding the item IDs the jobs need |