Fabric API - Jobs
run_job, wait_for_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, and the four methods below start, wait for, check and cancel them. Each method 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 without waiting for it.
| 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 go under executionData. A notebook takes them with a value and a type each, a pipeline takes plain values:
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class RunNotebook(Service):
def handle(self):
workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
notebook_id = 'ba7b1e23-b680-4fe7-a982-2a979b125604'
conn = self.microsoft.fabric['Zato 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:
wait_for_job
Waits until a job ends and returns its final state, checking with get_job every interval seconds.
| 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 |
timeout | int | How many seconds to wait at most, 30 minutes by default |
interval | float | How many seconds between two checks, 10 by default |
Returns the same dict as get_job once the status is Completed. A job that ends with any other status raises an exception with the job's details, and so does one that is still running when the timeout passes, the job itself keeps running in Fabric then.
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class RunAndWait(Service):
def handle(self):
workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
pipeline_id = 'bf4868aa-05c8-4213-ab4d-8dcbe3189767'
conn = self.microsoft.fabric['Zato Fabric']
job_id = conn.run_job(workspace_id, pipeline_id, 'Pipeline')
job = conn.wait_for_job(workspace_id, pipeline_id, job_id, timeout=600)
self.response.payload = {'status': job['status'], 'ended': job['endTimeUtc']}
get_job
Returns the job's current state without waiting for it.
| 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):
input = 'job_id'
def handle(self):
workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
notebook_id = 'ba7b1e23-b680-4fe7-a982-2a979b125604'
# The ID of a job that run_job returned earlier
job_id = self.request.input.job_id
conn = self.microsoft.fabric['Zato Fabric']
job = conn.get_job(workspace_id, notebook_id, job_id)
self.response.payload = {
'status': job['status'],
'started': job['startTimeUtc'],
'ended': job['endTimeUtc'],
}
cancel_job
Stops a running job. Returns nothing, the job's status becomes Cancelled once it has stopped.
| 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):
input = 'job_id'
def handle(self):
workspace_id = '262ddd3d-3d0d-4495-b80f-6dddda1e23a1'
notebook_id = 'ba7b1e23-b680-4fe7-a982-2a979b125604'
# The ID of a job that run_job returned earlier
job_id = self.request.input.job_id
conn = self.microsoft.fabric['Zato Fabric']
conn.cancel_job(workspace_id, notebook_id, job_id)
See also
| Page | What it covers |
|---|---|
| Fabric notebooks and pipelines | run_job and wait_for_job for a notebook, a pipeline and a report refresh |
| Fabric API - Workspaces | Finding the item IDs the jobs need |