Schedules as Code

What are Paradime YAML-Based Schedules?

Paradime YAML schedules are configuration-as-code definitions, allowing you to define, version, and manage your data pipeline schedules directly within your dbt project repository. These schedules are configured in a single file named paradime_schedules.yml located in the root directory of your dbt project (alongside dbt_project.yml).

Prerequisites

File Location and Structure

your-dbt-project/
├── dbt_project.yml
├── paradime_schedules.yml    # All schedules must be defined here
├── models/
├── tests/
└── ...

Why Use YAML-Based Schedules?

  1. Version Control

    • Schedule configurations are tracked alongside your dbt models

    • Review schedule modifications through Pull Requests

    • Enforce team review processes for schedule changes

  2. Infrastructure as Code

    • Schedules are treated as code, not just UI configurations

    • Easy replication across environments

    • Enables automated deployment pipelines

  3. Team Collaboration

    • Simplified schedule review process

    • Standard formatting and validation

    • Documentation lives with the code

How YAML-bases schedules are deployed?

Schedules are always read from the paradime_schedules.yml file on your default branch (usually main or master).

  • Automatic Refresh: Paradime checks for changes every 10 minutes.

  • Manual Refresh: For immediate updates, navigate to the Bolt interface and click Parse Schedules.

💡 Note: To update your schedules, make sure to merge your changes to the default branch first.


Configuration Reference

This section describes the YAML configuration format for scheduling and managing automated tasks. The configuration supports various execution modes including scheduled runs, trigger-based execution, deferred scheduling, CI/CD integration and API.

💡 Looking for complete examples? Jump to the Example Configurations section below.

Base Configuration

Every scheduler configuration must include these basic fields:

name: string               # Name of the schedule
description: string        # Job description
owner_email: string       # Email of the job owner
git_branch: string        # Target Git branch
environment: string       # Only "production" is supported
commands:                 # List of commands to execute
  - string

Execution Modes

1. Schedule-Triggered Execution

Basic scheduled execution using cron expression:

schedule: '0 */2 * * *'     # Runs every 2 hours
timezone: UTC               # Timezone
Supported Timezone List
Timezone
Timezone
Timezone

Africa/Accra

America/Sao_Paulo

Etc/GMT-6

Africa/Addis_Ababa

America/Scoresbysund

Etc/GMT-7

Africa/Algiers

America/Shiprock

Etc/GMT-8

Africa/Asmara

America/Sitka

Etc/GMT-9

Africa/Asmera

America/St_Barthelemy

Etc/GMT-10

Africa/Bamako

America/St_Johns

Etc/GMT-11

Africa/Bangui

America/St_Kitts

Etc/GMT-12

Africa/Banjul

America/St_Lucia

Etc/GMT-13

Africa/Bissau

America/St_Thomas

Etc/GMT-14

Africa/Blantyre

America/St_Vincent

Etc/GMT+0

Africa/Brazzaville

America/Swift_Current

Etc/GMT+1

Africa/Bujumbura

America/Tegucigalpa

Etc/GMT+2

Africa/Cairo

America/Thule

Etc/GMT+3

Africa/Casablanca

America/Thunder_Bay

Etc/GMT+4

Africa/Ceuta

America/Tijuana

Etc/GMT+5

Africa/Conakry

America/Toronto

Etc/GMT+6

Africa/Dakar

America/Tortola

Etc/GMT+7

Africa/Dar_es_Salaam

America/Vancouver

Etc/GMT+8

Africa/Djibouti

America/Virgin

Etc/GMT+9

Africa/Douala

America/Whitehorse

Etc/GMT+10

Africa/El_Aaiun

America/Winnipeg

Etc/GMT+11

Africa/Freetown

America/Yakutat

Etc/GMT+12

Africa/Gaborone

America/Yellowknife

Etc/GMT0

Africa/Harare

Antarctica/Casey

Etc/Greenwich

Africa/Johannesburg

Antarctica/Davis

Etc/UCT

Africa/Juba

Antarctica/DumontDUrville

Etc/Universal

Africa/Kampala

Antarctica/Macquarie

Etc/UTC

Africa/Khartoum

Antarctica/Mawson

Etc/Zulu

Africa/Kigali

Antarctica/McMurdo

Europe/Amsterdam

Africa/Kinshasa

Antarctica/Palmer

Europe/Andorra

Africa/Lagos

Antarctica/Rothera

Europe/Astrakhan

Africa/Libreville

Antarctica/South_Pole

Europe/Athens

Africa/Lome

Antarctica/Syowa

Europe/Belfast

Africa/Luanda

Antarctica/Troll

Europe/Belgrade

Africa/Lubumbashi

Antarctica/Vostok

Europe/Berlin

Africa/Lusaka

Arctic/Longyearbyen

Europe/Bratislava

Africa/Malabo

Asia/Aden

Europe/Brussels

Africa/Maputo

Asia/Almaty

Europe/Bucharest

Africa/Maseru

Asia/Amman

Europe/Budapest

Africa/Mbabane

Asia/Anadyr

Europe/Busingen

Africa/Mogadishu

Asia/Aqtau

Europe/Chisinau

Africa/Monrovia

Asia/Aqtobe

Europe/Copenhagen

Africa/Nairobi

Asia/Ashgabat

Europe/Dublin

Africa/Ndjamena

Asia/Ashkhabad

Europe/Gibraltar

Africa/Niamey

Asia/Atyrau

Europe/Guernsey

Africa/Nouakchott

Asia/Baghdad

Europe/Helsinki

Africa/Ouagadougou

Asia/Bahrain

Europe/Isle_of_Man

Africa/Porto-Novo

Asia/Baku

Europe/Istanbul

Africa/Sao_Tome

Asia/Bangkok

Europe/Jersey

Africa/Timbuktu

Asia/Barnaul

Europe/Kaliningrad

Africa/Tripoli

Asia/Beirut

Europe/Kiev

Africa/Tunis

Asia/Bishkek

Europe/Kirov

Africa/Windhoek

Asia/Brunei

Europe/Kyiv

America/Adak

Asia/Calcutta

Europe/Lisbon

America/Anchorage

Asia/Chita

Europe/Ljubljana

America/Anguilla

Asia/Choibalsan

Europe/London

America/Antigua

Asia/Chongqing

Europe/Luxembourg

America/Araguaina

Asia/Chungking

Europe/Madrid

America/Argentina/Buenos_Aires

Asia/Colombo

Europe/Malta

America/Argentina/Catamarca

Asia/Dacca

Europe/Mariehamn

America/Argentina/ComodRivadavia

Asia/Damascus

Europe/Minsk

America/Argentina/Cordoba

Asia/Dhaka

Europe/Monaco

America/Argentina/Jujuy

Asia/Dili

Europe/Moscow

America/Argentina/La_Rioja

Asia/Dubai

Europe/Nicosia

America/Argentina/Mendoza

Asia/Dushanbe

Europe/Oslo

America/Argentina/Rio_Gallegos

Asia/Famagusta

Europe/Paris

America/Argentina/Salta

Asia/Gaza

Europe/Podgorica

America/Argentina/San_Juan

Asia/Harbin

Europe/Prague

America/Argentina/San_Luis

Asia/Hebron

Europe/Riga

America/Argentina/Tucuman

Asia/Ho_Chi_Minh

Europe/Rome

America/Argentina/Ushuaia

Asia/Hong_Kong

Europe/Samara

America/Aruba

Asia/Hovd

Europe/San_Marino

America/Asuncion

Asia/Irkutsk

Europe/Sarajevo

America/Atikokan

Asia/Istanbul

Europe/Saratov

America/Atka

Asia/Jakarta

Europe/Simferopol

America/Bahia

Asia/Jayapura

Europe/Skopje

America/Bahia_Banderas

Asia/Jerusalem

Europe/Sofia

America/Barbados

Asia/Kabul

Europe/Stockholm

America/Belem

Asia/Kamchatka

Europe/Tallinn

America/Belize

Asia/Karachi

Europe/Tirane

America/Blanc-Sablon

Asia/Kashgar

Europe/Tiraspol

America/Boa_Vista

Asia/Kathmandu

Europe/Ulyanovsk

America/Bogota

Asia/Katmandu

Europe/Uzhgorod

America/Boise

Asia/Khandyga

Europe/Vaduz

America/Buenos_Aires

Asia/Kolkata

Europe/Vatican

America/Cambridge_Bay

Asia/Krasnoyarsk

Europe/Vienna

America/Campo_Grande

Asia/Kuala_Lumpur

Europe/Vilnius

America/Cancun

Asia/Kuching

Europe/Volgograd

America/Caracas

Asia/Kuwait

Europe/Warsaw

America/Catamarca

Asia/Macao

Europe/Zagreb

America/Cayenne

Asia/Macau

Europe/Zaporozhye

America/Cayman

Asia/Magadan

Europe/Zurich

America/Chicago

Asia/Makassar

Factory

America/Chihuahua

Asia/Manila

GB

America/Ciudad_Juarez

Asia/Muscat

GB-Eire

America/Coral_Harbour

Asia/Nicosia

GMT

America/Cordoba

Asia/Novokuznetsk

GMT-0

America/Costa_Rica

Asia/Novosibirsk

GMT+0

America/Coyhaique

Asia/Omsk

GMT0

America/Creston

Asia/Oral

Greenwich

America/Cuiaba

Asia/Phnom_Penh

Hongkong

America/Curacao

Asia/Pontianak

HST

America/Danmarkshavn

Asia/Pyongyang

Iceland

America/Dawson

Asia/Qatar

Indian/Antananarivo

America/Dawson_Creek

Asia/Qostanay

Indian/Chagos

America/Denver

Asia/Qyzylorda

Indian/Christmas

America/Detroit

Asia/Rangoon

Indian/Cocos

America/Dominica

Asia/Riyadh

Indian/Comoro

America/Edmonton

Asia/Saigon

Indian/Kerguelen

America/Eirunepe

Asia/Sakhalin

Indian/Mahe

America/El_Salvador

Asia/Samarkand

Indian/Maldives

America/Ensenada

Asia/Seoul

Indian/Mauritius

America/Fort_Nelson

Asia/Shanghai

Indian/Mayotte

America/Fort_Wayne

Asia/Singapore

Indian/Reunion

America/Fortaleza

Asia/Srednekolymsk

Iran

America/Glace_Bay

Asia/Taipei

Israel

America/Godthab

Asia/Tashkent

Jamaica

America/Goose_Bay

Asia/Tbilisi

Japan

America/Grand_Turk

Asia/Tehran

Kwajalein

America/Grenada

Asia/Tel_Aviv

Libya

America/Guadeloupe

Asia/Thimbu

MET

America/Guatemala

Asia/Thimphu

Mexico/BajaNorte

America/Guayaquil

Asia/Tokyo

Mexico/BajaSur

America/Guyana

Asia/Tomsk

Mexico/General

America/Halifax

Asia/Ujung_Pandang

MST

America/Havana

Asia/Ulaanbaatar

MST7MDT

America/Hermosillo

Asia/Ulan_Bator

Navajo

America/Indiana/Indianapolis

Asia/Urumqi

NZ

America/Indiana/Knox

Asia/Ust-Nera

NZ-CHAT

America/Indiana/Marengo

Asia/Vientiane

Pacific/Apia

America/Indiana/Petersburg

Asia/Vladivostok

Pacific/Auckland

America/Indiana/Tell_City

Asia/Yakutsk

Pacific/Bougainville

America/Indiana/Vevay

Asia/Yangon

Pacific/Chatham

America/Indiana/Vincennes

Asia/Yekaterinburg

Pacific/Chuuk

America/Indiana/Winamac

Asia/Yerevan

Pacific/Easter

America/Indianapolis

Atlantic/Azores

Pacific/Efate

America/Inuvik

Atlantic/Bermuda

Pacific/Enderbury

America/Iqaluit

Atlantic/Canary

Pacific/Fakaofo

America/Jamaica

Atlantic/Cape_Verde

Pacific/Fiji

America/Jujuy

Atlantic/Faeroe

Pacific/Funafuti

America/Juneau

Atlantic/Faroe

Pacific/Galapagos

America/Kentucky/Louisville

Atlantic/Jan_Mayen

Pacific/Gambier

America/Kentucky/Monticello

Atlantic/Madeira

Pacific/Guadalcanal

America/Knox_IN

Atlantic/Reykjavik

Pacific/Guam

America/Kralendijk

Atlantic/South_Georgia

Pacific/Honolulu

America/La_Paz

Atlantic/St_Helena

Pacific/Johnston

America/Lima

Atlantic/Stanley

Pacific/Kanton

America/Los_Angeles

Australia/ACT

Pacific/Kiritimati

America/Louisville

Australia/Adelaide

Pacific/Kosrae

America/Lower_Princes

Australia/Brisbane

Pacific/Kwajalein

America/Maceio

Australia/Broken_Hill

Pacific/Majuro

America/Managua

Australia/Canberra

Pacific/Marquesas

America/Manaus

Australia/Currie

Pacific/Midway

America/Marigot

Australia/Darwin

Pacific/Nauru

America/Martinique

Australia/Eucla

Pacific/Niue

America/Matamoros

Australia/Hobart

Pacific/Norfolk

America/Mazatlan

Australia/LHI

Pacific/Noumea

America/Mendoza

Australia/Lindeman

Pacific/Pago_Pago

America/Menominee

Australia/Lord_Howe

Pacific/Palau

America/Merida

Australia/Melbourne

Pacific/Pitcairn

America/Metlakatla

Australia/North

Pacific/Pohnpei

America/Mexico_City

Australia/NSW

Pacific/Ponape

America/Miquelon

Australia/Perth

Pacific/Port_Moresby

America/Moncton

Australia/Queensland

Pacific/Rarotonga

America/Monterrey

Australia/South

Pacific/Saipan

America/Montevideo

Australia/Sydney

Pacific/Samoa

America/Montreal

Australia/Tasmania

Pacific/Tahiti

America/Montserrat

Australia/Victoria

Pacific/Tarawa

America/Nassau

Australia/West

Pacific/Tongatapu

America/New_York

Australia/Yancowinna

Pacific/Truk

America/Nipigon

Brazil/Acre

Pacific/Wake

America/Nome

Brazil/DeNoronha

Pacific/Wallis

America/Noronha

Brazil/East

Pacific/Yap

America/North_Dakota/Beulah

Brazil/West

Poland

America/North_Dakota/Center

Canada/Atlantic

Portugal

America/North_Dakota/New_Salem

Canada/Central

PRC

America/Nuuk

Canada/Eastern

PST8PDT

America/Ojinaga

Canada/Mountain

ROC

America/Panama

Canada/Newfoundland

ROK

America/Pangnirtung

Canada/Pacific

Singapore

America/Paramaribo

Canada/Saskatchewan

Turkey

America/Phoenix

Canada/Yukon

UCT

America/Port_of_Spain

CET

Universal

America/Port-au-Prince

Chile/Continental

US/Alaska

America/Porto_Acre

Chile/EasterIsland

US/Aleutian

America/Porto_Velho

CST6CDT

US/Arizona

America/Puerto_Rico

Cuba

US/Central

America/Punta_Arenas

EET

US/East-Indiana

America/Rainy_River

Egypt

US/Eastern

America/Rankin_Inlet

Eire

US/Hawaii

America/Recife

EST

US/Indiana-Starke

America/Regina

EST5EDT

US/Michigan

America/Resolute

Etc/GMT

US/Mountain

America/Rio_Branco

Etc/GMT-0

US/Pacific

America/Rosario

Etc/GMT-1

US/Samoa

America/Santa_Isabel

Etc/GMT-2

UTC

America/Santarem

Etc/GMT-3

W-SU

America/Santiago

Etc/GMT-4

WET

America/Santo_Domingo

Etc/GMT-5

Zulu

2. Run Completion Trigger

Triggers execution based on completion of another job:

schedule: 'OFF'
schedule_trigger:
  enabled: true
  schedule_name: string     # Name of the trigger schedule
  workspace_name: string    # Workspace containing the trigger schedule
  trigger_on:               # Events that trigger execution
    - passed
    - failed

3. Merge Trigger

Triggers execution on merge events:

schedule: 'OFF'
trigger_on_merge: true     # Enables merge-triggered execution

4. Deferred Scheduling

Allows schedules to used dbt defer to artifacts comparison:

schedule: 'OFF'
deferred_schedule:
  enabled: true
  deferred_schedule_name: string  # Name of the deferred schedule
  successful_run_only: boolean    

5. Turbo CI Configuration

Configuration for CI pipelines:

schedule: 'OFF'
turbo_ci:
  enabled: true
  deferred_schedule_name: string  # Name of the schedule for CI
  successful_run_only: boolean    # Whether to run only after successful executions

6. API Configuration

Basic configuration when triggering Bolt via API:

schedule: 'OFF'

For more details on Paradime APIs check our Developers guide.

7. Suspended State

Configuration for suspended jobs:

suspended: true            # Indicates the job is suspended

Notifications Configuration

Notifications can be configured for various events through multiple channels:

notifications:
  emails:                  # Email notifications configuration
    - address: string      # List of recipient email address
      events:              # List of events to notify for each recipient
        - passed           # Schedule completed successfully
        - failed          # Schedule completed successfully with errors
        - sla             # SLA threshold exceeded
        
  microsoft_teams:         # Microsoft Teams notifications
    - channel: string      # List of Teams channel name
      events:              # List of events to notify for each recipient
        - passed          # Schedule completed successfully
        - failed          # Schedule completed successfully with errors
        - sla             # SLA threshold exceeded
        
  slack_channels:
    - channel: string      # List of Slack channel name
      events:              # List of events to notify for each recipient
        - passed          # Schedule completed successfully
        - failed          # Schedule completed successfully with errors
        - sla             # SLA threshold exceeded
        
sla_minutes: number        # SLA threshold in minutes

For Slack and MS Teams notifications, check our integrations guide:

Example: Complete Configuration

schedules:
  - name: daily run
    description: "Daily build of all dbt models"
    owner_email: [email protected] 
    environment: production
    git_branch: main  
    commands:
      - dbt run
      - dbt test
    schedule: 0 10 * * *
    timezone: UTC    
    sla_minutes: 60
    notifications:
      emails:                 
        - address: [email protected] 
          events:
            - failed
            - sla
      slack_channels:
        - channel: data-team    
          events:            
            - passed         
            - failed         
        - channel: pipeline-monitoring    
          events:                    
            - failed         
            - sla  

Best Practices

Schedule Format

  • Use standard cron expressions for scheduling

    • ✅ Standard cron to define days 0-6

      • 10 * * * 0-6 : At minute 10 on every day-of-week from Sunday through Saturday.

    • ❌ Non-standard cron to define days 1-7

      • 10 * * * 1-7 : At minute 10 on every day-of-week from Monday through Sunday

  • Use 'OFF' to disable scheduled execution

  • Use crontab.guru to validate your cron expressions

SLA Configuration

  • sla_minutes should be set based on job complexity

    Consider dependencies when setting SLA

  • Recommended minimum: 30 minutes

Notification Configuration

  • Configure at least one notification channel

  • Include critical events (failed, SLA) in notifications

  • Use team channels for collaborative workflows

  • Make sure to set the Slack / MS Teams Channel or Email for System notifications. Check our guide here for Notifications Settingss


Paradime schedules terminal commands

Before running any of the following commands, navigate to your dbt™️ project directory where paradime_schedules.yml is located.

CLI command
Description
paradime schedule verify

Validate File Format - This command checks the paradime_schedules.yml for formatting errors and outputs the result.

paradime schedule run

Run Schedule Locally - To run all defined schedules based on your local context: (ie. based on your development environment and your current branch).

paradime schedule run <schedule_name>

Run Selected Schedule Locally - To run the named schedule based on your local context: (ie. based on your development environment and your current branch).

paradime schedule run --dry-run

Dry run - To simulate all schedule executions without running dbt™️ models.

paradime schedule run --dry-run <schedule_name>

Dry run - To simulate the named schedule executions without running dbt™️ models.

Last updated

Was this helpful?