Use an Airflow asset schedule when a downstream DAG should become eligible after upstream data is successfully updated. Use cron when the DAG must run at recurring wall-clock times, whether or not new data arrived. If you need both behaviors, Airflow provides AssetOrTimeSchedule. Before changing a cron schedule, check your Airflow version and timetable semantics: Airflow 2.x and Airflow 3 use different defaults for bare cron strings.
What is the difference between Airflow assets and cron?
Assets express a relationship between data-producing and data-consuming workflows: a successful producer task updates a declared asset, which can make a consumer DAG eligible to run. Cron expresses a recurring time cadence, such as hourly or daily. In short, choose based on what should cause the run: data readiness, the clock, or both.
As an Amazon Associate I earn from qualifying purchases.
| Decision | Asset-aware schedule | Cron or time schedule |
|---|---|---|
| What makes a run eligible? | A successful update to a declared asset, subject to the consumer DAG’s asset condition. | A cron tick or preset cadence. |
| What does it model? | Readiness or dependency between data-producing and data-consuming DAGs. | A recurring wall-clock schedule. |
| Several inputs | A list of assets waits until all listed assets have updated at least once since the consumer’s last run. | Time determines the run; upstream readiness needs separate handling if required. |
| Data interval and logical date | Do not assume a cron-like interval; semantics depend on the scheduling model. | Depends on the timetable: trigger and data-interval timetables behave differently. |
Apache Airflow’s asset-aware scheduling guide describes scheduling DAGs based on when a task updates an asset, in addition to scheduling by time.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
When should I use assets to trigger a DAG?
Choose an asset schedule when a consumer should react to an upstream task’s successful production or update of data, rather than wake up on a timer and check whether the data is ready. Airflow’s asset-aware scheduling feature was added in version 2.4, according to the official guide.
#1 Best Overall
In the documented pattern, a producer task declares an asset as an outlet and the consumer DAG lists that asset in its schedule. A successful producer task that updates the asset can trigger the consumer. A failed or skipped producer task does not update the asset, so it does not trigger that consumer through this mechanism.
When a consumer needs several inputs
When a DAG lists multiple assets, Airflow waits until each listed asset has updated at least once since the DAG’s previous run. This is useful when the consumer needs a complete set of inputs before processing. If one asset updates repeatedly while another is still missing, those repeated updates do not necessarily create separate downstream runs; the documented list condition is satisfied once the other asset has also updated.
Rank #2
When should I use cron or another time schedule?
Use a time schedule when a business requirement calls for regular runs—such as a recurring reporting cycle or periodic maintenance—regardless of whether an upstream asset update occurred at that moment. Airflow supports cron expressions, cron presets such as @daily, and datetime.timedelta schedules. Its cron and time-interval documentation notes that cron expressions are parsed with croniter, including extended syntax.
A cron expression specifies timing, but it does not by itself fully describe which data a run should process. Airflow implements schedules through timetables, and the timetable determines details such as logical dates and data intervals. For more involved timing or interval requirements, the timetable guide describes built-in and custom timetable options, including schedules with different times on different days, rolling or overlapping windows, and gaps between intervals.
Trigger times versus data intervals
CronTriggerTimetable triggers at cron times and does not itself establish a nonzero data interval: the interval’s start and end are equal to the trigger time. CronDataIntervalTimetable instead defines intervals between cron points and triggers at the end of each interval. A change between these timetable behaviors can affect logical dates and run IDs, so check how your DAG uses those values and what data each run is expected to cover.
Check the Airflow version before changing a bare cron string
The Airflow timetable documentation states that the default for [scheduler] create_cron_data_intervals is True in Airflow 2.x and False in Airflow 3. As a result, the same bare cron schedule can use different timetable behavior across those major versions. For a migration or version change, explicitly select the intended behavior—by setting the configuration on each side or using an explicit timetable—rather than assuming the default preserves your existing intervals, logical dates, or run IDs.
Rank #4
Can an Airflow DAG run on both an asset update and a schedule?
Yes. Airflow documents AssetOrTimeSchedule, which combines a time-based timetable with an asset condition and can create scheduled runs and asset-triggered runs independently. Use it when the DAG needs both event responsiveness and periodic work, such as reacting to new data while also performing scheduled checks. Before adopting it, decide whether both paths could process overlapping data, and verify that the DAG’s work is safe to repeat and that each run’s data window is appropriate. See the timetable documentation for its behavior.
Recommended Free Tools
How to choose the right schedule for your DAG
- Identify the run condition. If a successful upstream data update should make the consumer eligible, use an asset condition. If a recurring time should drive runs, use a time schedule.
- Check input readiness. If all of several upstream assets must be available, the documented asset-list condition waits for each to update since the last consumer run. If the requirement is instead to run at fixed times, use a time schedule and handle readiness separately.
- Specify data coverage. Decide what period or records each run should process. Do not infer that coverage from the cron expression alone; choose the appropriate timetable semantics.
- Confirm the Airflow major version. In particular, check the bare-cron default before changing versions or migrating, and pin the intended behavior if it must remain consistent.
- Use both only for two real requirements. Select
AssetOrTimeSchedulewhen the DAG truly needs both triggers, then validate duplicate-work risk, repeat safety, and run windows for your DAG.
Airflow 3.0 also documents external event-driven scheduling approaches, including push-based delivery and pull-based asset watchers. Those are relevant when the event originates outside Airflow; for the basic choice between an upstream DAG’s asset update and a recurring clock cadence, the asset and timetable patterns above are the central distinction. See the event-driven scheduling guide.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




