# Apache Airflow 2.9.0: Dataset and UI Improvements

DevFeed: [Apache Airflow 2.9.0: Dataset and UI Improvements](<https://devfeed.tech/articles/apache-airflow-2-9-0-dataset-and-ui-improvements-32539.md>)

Original publisher: [Read original article](<https://airflow.apache.org/blog/airflow-2.9.0/>)

Author: Apache Airflow

Published: 2024-04-08T00:00:00Z

Content type: release

Language: en

Sources: [Apache Airflow Blog](<https://devfeed.tech/sources/apache-airflow-blog.md>)

Topics: [airflow](<https://devfeed.tech/topics/airflow.md>), [dataset](<https://devfeed.tech/topics/dataset.md>), [datasets](<https://devfeed.tech/topics/datasets.md>), [releases](<https://devfeed.tech/topics/releases.md>), [Release notes](<https://devfeed.tech/topics/release-notes.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Python](<https://devfeed.tech/topics/python.md>)

Tags: [2-9-0](<https://devfeed.tech/tags/2-9-0.md>), [airflow](<https://devfeed.tech/tags/airflow.md>), [apache-airflow](<https://devfeed.tech/tags/apache-airflow.md>), [dataset](<https://devfeed.tech/tags/dataset.md>), [datasets](<https://devfeed.tech/tags/datasets.md>), [python](<https://devfeed.tech/tags/python.md>), [release](<https://devfeed.tech/tags/release.md>), [release-notes](<https://devfeed.tech/tags/release-notes.md>), [scheduling](<https://devfeed.tech/tags/scheduling.md>), [ui](<https://devfeed.tech/tags/ui.md>)

## AI overview

Apache Airflow 2.9.0 introduces expanded data-aware scheduling with logical OR and arbitrary AND/OR combinations, plus a timetable combining dataset events with time-based schedules. It also adds dataset event REST API endpoints, dataset UI enhancements, Python 3.12 support with Pendulum 3, and custom names for dynamically mapped tasks.

## Source excerpt

I'm happy to announce that Apache Airflow 2.9.0 has been released! This time around we have new features for data-aware scheduling and a bunch of UI-related improvements. Apache Airflow 2.9.0 contains over 550 commits, which include 38 new features, 70 improvements, 31 bug fixes, and 18 documentation changes. Details: 📦 PyPI: https://pypi.org/project/apache-airflow/2.9.0/ 📚 Docs: https://airflow.apache.org/docs/apache-airflow/2.9.0/ 🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/2.9.0/release_notes.html 🐳 Docker Image: "docker pull apache/airflow:2.9.0" 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-2.9.0 Airflow 2.9.0 is also the first release that supports Python 3.12. However, Pendulum 2 does not support Python 3.12, so you'll need to use Pendulum 3 if you upgrade to Python 3.12. New data-aware scheduling options Logical operators and conditional expressions for DAG scheduling When Datasets were added in Airflow 2.4, DAGs only had scheduling support for logical AND combinations of Datasets. Simply, you could schedule against more than one Dataset, but a DAG run would only be created once all the Datasets were updated after the last run. Now in Airflow 2.9, we support logical OR and even arbitrary combinations of AND and OR. As an example, you can schedule a DAG whenever dataset_1 or dataset_2 are updated : with DAG(schedule=(dataset_1 | dataset_2), ...): ... You can have arbitrary combinations: with DAG(schedule=((dataset_1 | dataset_2) & dataset_3), ...): ... You can read more about this new functionality in the data-aware scheduling docs. Combining Dataset and Time-Based Schedules Airflow 2.9 comes with a new timetable, DatasetOrTimeSchedule, that allows you to schedule DAGs based on both dataset events and a timetable. Now you have the best of both worlds. For example, to run whenever dataset_1 updates and at midnight UTC: with DAG( schedule=DatasetOrTimeSchedule( timetable=CronTriggerTimetable("0 0 * * *", timezone="UTC"),