diff --git a/airflow/migrations/versions/0134_2_9_0_add_rendered_map_index_to_taskinstance.py b/airflow/migrations/versions/0134_2_9_0_add_rendered_map_index_to_taskinstance.py
new file mode 100644
index 0000000000000..1aae15198783d
--- /dev/null
+++ b/airflow/migrations/versions/0134_2_9_0_add_rendered_map_index_to_taskinstance.py
@@ -0,0 +1,51 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""Add rendered_map_index to TaskInstance.
+
+Revision ID: 1fd565369930
+Revises: 88344c1d9134
+Create Date: 2024-02-26 18:48:06.386776
+
+"""
+
+import sqlalchemy as sa
+from alembic import op
+
+
+# revision identifiers, used by Alembic.
+revision = "1fd565369930"
+down_revision = "88344c1d9134"
+branch_labels = None
+depends_on = None
+airflow_version = "2.9.0"
+
+
+def upgrade():
+ """Apply Add rendered_map_index to TaskInstance."""
+ conn = op.get_bind()
+
+ with op.batch_alter_table("task_instance") as batch_op:
+ batch_op.add_column(sa.Column("rendered_map_index", sa.String(length=64), nullable=True))
+
+
+def downgrade():
+ """Unapply Add rendered_map_index to TaskInstance."""
+ conn = op.get_bind()
+ with op.batch_alter_table("task_instance", schema=None) as batch_op:
+ batch_op.drop_column("rendered_map_index")
diff --git a/airflow/utils/db.py b/airflow/utils/db.py
index 8b2b56ed788e5..6cc0d7159b2f2 100644
--- a/airflow/utils/db.py
+++ b/airflow/utils/db.py
@@ -90,6 +90,7 @@
"2.7.0": "405de8318b3a",
"2.8.0": "10b52ebd31f7",
"2.8.1": "88344c1d9134",
+ "2.9.0": "1fd565369930",
}
diff --git a/docs/apache-airflow/img/airflow_erd.sha256 b/docs/apache-airflow/img/airflow_erd.sha256
index 9a2d1e898dfcb..139e0665ed22c 100644
--- a/docs/apache-airflow/img/airflow_erd.sha256
+++ b/docs/apache-airflow/img/airflow_erd.sha256
@@ -1 +1 @@
-243075d59223245db8034a97c7d6f53bd8a39ee0dc02831229a6ec743c2c920a
\ No newline at end of file
+798cc78efa225287635e12ec3cebc6025bbb4d8e0b629fb7a17f4c7f168bfc65
\ No newline at end of file
diff --git a/docs/apache-airflow/img/airflow_erd.svg b/docs/apache-airflow/img/airflow_erd.svg
index 2c3a7a33cc0cb..4bbe208640d2f 100644
--- a/docs/apache-airflow/img/airflow_erd.svg
+++ b/docs/apache-airflow/img/airflow_erd.svg
@@ -240,76 +240,76 @@
dag_run_note
-
-dag_run_note
-
-dag_run_id
- [INTEGER]
- NOT NULL
-
-content
- [VARCHAR(1000)]
-
-created_at
- [TIMESTAMP]
- NOT NULL
-
-updated_at
- [TIMESTAMP]
- NOT NULL
-
-user_id
- [INTEGER]
+
+dag_run_note
+
+dag_run_id
+ [INTEGER]
+ NOT NULL
+
+content
+ [VARCHAR(1000)]
+
+created_at
+ [TIMESTAMP]
+ NOT NULL
+
+updated_at
+ [TIMESTAMP]
+ NOT NULL
+
+user_id
+ [INTEGER]
ab_user--dag_run_note
-
-0..N
+
+0..N
{0,1}
task_instance_note
-
-task_instance_note
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-map_index
- [INTEGER]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-task_id
- [VARCHAR(250)]
- NOT NULL
-
-content
- [VARCHAR(1000)]
-
-created_at
- [TIMESTAMP]
- NOT NULL
-
-updated_at
- [TIMESTAMP]
- NOT NULL
-
-user_id
- [INTEGER]
+
+task_instance_note
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
+
+content
+ [VARCHAR(1000)]
+
+created_at
+ [TIMESTAMP]
+ NOT NULL
+
+updated_at
+ [TIMESTAMP]
+ NOT NULL
+
+user_id
+ [INTEGER]
ab_user--task_instance_note
-
-0..N
-{0,1}
+
+0..N
+{0,1}
@@ -927,9 +927,9 @@
dag_run--dag_run_note
-
-1
-1
+
+1
+1
@@ -948,480 +948,483 @@
dag_run--dagrun_dataset_event
-
-1
-1
+
+1
+1
task_instance
-
-task_instance
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-map_index
- [INTEGER]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-task_id
- [VARCHAR(250)]
- NOT NULL
-
-custom_operator_name
- [VARCHAR(1000)]
-
-duration
- [DOUBLE_PRECISION]
-
-end_date
- [TIMESTAMP]
-
-executor_config
- [BYTEA]
-
-external_executor_id
- [VARCHAR(250)]
-
-hostname
- [VARCHAR(1000)]
-
-job_id
- [INTEGER]
-
-max_tries
- [INTEGER]
-
-next_kwargs
- [JSON]
-
-next_method
- [VARCHAR(1000)]
-
-operator
- [VARCHAR(1000)]
-
-pid
- [INTEGER]
-
-pool
- [VARCHAR(256)]
- NOT NULL
-
-pool_slots
- [INTEGER]
- NOT NULL
-
-priority_weight
- [INTEGER]
-
-queue
- [VARCHAR(256)]
-
-queued_by_job_id
- [INTEGER]
-
-queued_dttm
- [TIMESTAMP]
-
-start_date
- [TIMESTAMP]
-
-state
- [VARCHAR(20)]
-
-trigger_id
- [INTEGER]
-
-trigger_timeout
- [TIMESTAMP]
-
-try_number
- [INTEGER]
-
-unixname
- [VARCHAR(1000)]
-
-updated_at
- [TIMESTAMP]
+
+task_instance
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
+
+custom_operator_name
+ [VARCHAR(1000)]
+
+duration
+ [DOUBLE_PRECISION]
+
+end_date
+ [TIMESTAMP]
+
+executor_config
+ [BYTEA]
+
+external_executor_id
+ [VARCHAR(250)]
+
+hostname
+ [VARCHAR(1000)]
+
+job_id
+ [INTEGER]
+
+max_tries
+ [INTEGER]
+
+next_kwargs
+ [JSON]
+
+next_method
+ [VARCHAR(1000)]
+
+operator
+ [VARCHAR(1000)]
+
+pid
+ [INTEGER]
+
+pool
+ [VARCHAR(256)]
+ NOT NULL
+
+pool_slots
+ [INTEGER]
+ NOT NULL
+
+priority_weight
+ [INTEGER]
+
+queue
+ [VARCHAR(256)]
+
+queued_by_job_id
+ [INTEGER]
+
+queued_dttm
+ [TIMESTAMP]
+
+rendered_map_index
+ [VARCHAR(64)]
+
+start_date
+ [TIMESTAMP]
+
+state
+ [VARCHAR(20)]
+
+trigger_id
+ [INTEGER]
+
+trigger_timeout
+ [TIMESTAMP]
+
+try_number
+ [INTEGER]
+
+unixname
+ [VARCHAR(1000)]
+
+updated_at
+ [TIMESTAMP]
dag_run--task_instance
-
-1
-1
+
+1
+1
dag_run--task_instance
-
-1
-1
+
+1
+1
task_reschedule
-
-task_reschedule
-
-id
- [INTEGER]
- NOT NULL
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-duration
- [INTEGER]
- NOT NULL
-
-end_date
- [TIMESTAMP]
- NOT NULL
-
-map_index
- [INTEGER]
- NOT NULL
-
-reschedule_date
- [TIMESTAMP]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-start_date
- [TIMESTAMP]
- NOT NULL
-
-task_id
- [VARCHAR(250)]
- NOT NULL
-
-try_number
- [INTEGER]
- NOT NULL
+
+task_reschedule
+
+id
+ [INTEGER]
+ NOT NULL
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+duration
+ [INTEGER]
+ NOT NULL
+
+end_date
+ [TIMESTAMP]
+ NOT NULL
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+reschedule_date
+ [TIMESTAMP]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+start_date
+ [TIMESTAMP]
+ NOT NULL
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
+
+try_number
+ [INTEGER]
+ NOT NULL
dag_run--task_reschedule
-
-0..N
-1
+
+0..N
+1
dag_run--task_reschedule
-
-0..N
-1
+
+0..N
+1
task_instance--task_instance_note
-
-1
-1
+
+1
+1
task_instance--task_instance_note
-
-1
-1
+
+1
+1
task_instance--task_instance_note
-
-1
-1
+
+1
+1
task_instance--task_instance_note
-
-1
-1
+
+1
+1
task_instance--task_reschedule
-
-0..N
-1
+
+0..N
+1
task_instance--task_reschedule
-
-0..N
-1
+
+0..N
+1
task_instance--task_reschedule
-
-0..N
-1
+
+0..N
+1
task_instance--task_reschedule
-
-0..N
-1
+
+0..N
+1
task_fail
-
-task_fail
-
-id
- [INTEGER]
- NOT NULL
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-duration
- [INTEGER]
-
-end_date
- [TIMESTAMP]
-
-map_index
- [INTEGER]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-start_date
- [TIMESTAMP]
-
-task_id
- [VARCHAR(250)]
- NOT NULL
+
+task_fail
+
+id
+ [INTEGER]
+ NOT NULL
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+duration
+ [INTEGER]
+
+end_date
+ [TIMESTAMP]
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+start_date
+ [TIMESTAMP]
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
task_instance--task_fail
-
-0..N
-1
+
+0..N
+1
task_instance--task_fail
-
-0..N
-1
+
+0..N
+1
task_instance--task_fail
-
-0..N
-1
+
+0..N
+1
task_instance--task_fail
-
-0..N
-1
+
+0..N
+1
task_map
-
-task_map
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-map_index
- [INTEGER]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-task_id
- [VARCHAR(250)]
- NOT NULL
-
-keys
- [JSON]
-
-length
- [INTEGER]
- NOT NULL
+
+task_map
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
+
+keys
+ [JSON]
+
+length
+ [INTEGER]
+ NOT NULL
task_instance--task_map
-
-1
-1
+
+1
+1
task_instance--task_map
-
-1
-1
+
+1
+1
task_instance--task_map
-
-1
-1
+
+1
+1
task_instance--task_map
-
-1
-1
+
+1
+1
xcom
-
-xcom
-
-dag_run_id
- [INTEGER]
- NOT NULL
-
-key
- [VARCHAR(512)]
- NOT NULL
-
-map_index
- [INTEGER]
- NOT NULL
-
-task_id
- [VARCHAR(250)]
- NOT NULL
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-timestamp
- [TIMESTAMP]
- NOT NULL
-
-value
- [BYTEA]
+
+xcom
+
+dag_run_id
+ [INTEGER]
+ NOT NULL
+
+key
+ [VARCHAR(512)]
+ NOT NULL
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+timestamp
+ [TIMESTAMP]
+ NOT NULL
+
+value
+ [BYTEA]
task_instance--xcom
-
-0..N
-1
+
+0..N
+1
task_instance--xcom
-
-1
-1
+
+1
+1
task_instance--xcom
-
-0..N
-1
+
+1
+1
task_instance--xcom
-
-0..N
-1
+
+0..N
+1
rendered_task_instance_fields
-
-rendered_task_instance_fields
-
-dag_id
- [VARCHAR(250)]
- NOT NULL
-
-map_index
- [INTEGER]
- NOT NULL
-
-run_id
- [VARCHAR(250)]
- NOT NULL
-
-task_id
- [VARCHAR(250)]
- NOT NULL
-
-k8s_pod_yaml
- [JSON]
-
-rendered_fields
- [JSON]
- NOT NULL
+
+rendered_task_instance_fields
+
+dag_id
+ [VARCHAR(250)]
+ NOT NULL
+
+map_index
+ [INTEGER]
+ NOT NULL
+
+run_id
+ [VARCHAR(250)]
+ NOT NULL
+
+task_id
+ [VARCHAR(250)]
+ NOT NULL
+
+k8s_pod_yaml
+ [JSON]
+
+rendered_fields
+ [JSON]
+ NOT NULL
task_instance--rendered_task_instance_fields
-
-1
-1
+
+1
+1
task_instance--rendered_task_instance_fields
-
-1
-1
+
+1
+1
task_instance--rendered_task_instance_fields
-
-1
-1
+
+1
+1
task_instance--rendered_task_instance_fields
-
-1
-1
+
+1
+1
@@ -1601,9 +1604,9 @@
trigger--task_instance
-
-0..N
-{0,1}
+
+0..N
+{0,1}
diff --git a/docs/apache-airflow/migrations-ref.rst b/docs/apache-airflow/migrations-ref.rst
index 0b068e5e53cf3..4b35d68be2a97 100644
--- a/docs/apache-airflow/migrations-ref.rst
+++ b/docs/apache-airflow/migrations-ref.rst
@@ -39,7 +39,9 @@ Here's the list of all the Database Migrations that are executed via when you ru
+---------------------------------+-------------------+-------------------+--------------------------------------------------------------+
| Revision ID | Revises ID | Airflow Version | Description |
+=================================+===================+===================+==============================================================+
-| ``88344c1d9134`` (head) | ``10b52ebd31f7`` | ``2.8.1`` | Drop unused TI index |
+| ``1fd565369930`` (head) | ``88344c1d9134`` | ``2.9.0`` | Add rendered_map_index to TaskInstance. |
++---------------------------------+-------------------+-------------------+--------------------------------------------------------------+
+| ``88344c1d9134`` | ``10b52ebd31f7`` | ``2.8.1`` | Drop unused TI index |
+---------------------------------+-------------------+-------------------+--------------------------------------------------------------+
| ``10b52ebd31f7`` | ``bd5dfbe21f88`` | ``2.8.0`` | Add processor_subdir to ImportError. |
+---------------------------------+-------------------+-------------------+--------------------------------------------------------------+