tutorial
### Tutorial Documentation Documentation that goes along with the Airflow tutorial located [here](https://airflow.apache.org/tutorial.html)
Airflow Fundamentals
Providers:
Modules:
Run this DAG
1. Install the Astronomer CLI:Skip if you already have the CLI
2. Initate the project in a local directory:
3. Copy and paste the code below into a file in thedags
directory.
4. Run the DAG from the local directory where the project was initiated:
## 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."""### Tutorial DocumentationDocumentation that goes along with the Airflow tutorial located[here](https://airflow.apache.org/tutorial.html)"""from __future__ import annotations# [START tutorial]# [START import_module]import textwrapfrom datetime import datetime, timedelta# The DAG object; we'll need this to instantiate a DAGfrom airflow.models.dag import DAG# Operators; we need this to operate!from airflow.operators.bash import BashOperator# [END import_module]# [START instantiate_dag]with DAG("tutorial",# [START default_args]# These args will get passed on to each operator# You can override them on a per-task basis during operator initializationdefault_args={"depends_on_past": False,"email": ["airflow@example.com"],"email_on_failure": False,"email_on_retry": False,"retries": 1,"retry_delay": timedelta(minutes=5),# 'queue': 'bash_queue',# 'pool': 'backfill',# 'priority_weight': 10,# 'end_date': datetime(2016, 1, 1),# 'wait_for_downstream': False,# 'sla': timedelta(hours=2),# 'execution_timeout': timedelta(seconds=300),# 'on_failure_callback': some_function, # or list of functions# 'on_success_callback': some_other_function, # or list of functions# 'on_retry_callback': another_function, # or list of functions# 'sla_miss_callback': yet_another_function, # or list of functions# 'trigger_rule': 'all_success'},# [END default_args]description="A simple tutorial DAG",schedule=timedelta(days=1),start_date=datetime(2021, 1, 1),catchup=False,tags=["example"],) as dag:# [END instantiate_dag]# t1, t2 and t3 are examples of tasks created by instantiating operators# [START basic_task]t1 = BashOperator(task_id="print_date",bash_command="date",)t2 = BashOperator(task_id="sleep",depends_on_past=False,bash_command="sleep 5",retries=3,)# [END basic_task]# [START documentation]t1.doc_md = textwrap.dedent("""\#### Task DocumentationYou can document your task using the attributes `doc_md` (markdown),`doc` (plain text), `doc_rst`, `doc_json`, `doc_yaml` which getsrendered in the UI's Task Instance Details page.![img](http://montcs.bloomu.edu/~bobmon/Semesters/2012-01/491/import%20soul.png)**Image Credit:** Randall Munroe, [XKCD](https://xkcd.com/license.html)""")dag.doc_md = __doc__ # providing that you have a docstring at the beginning of the DAG; ORdag.doc_md = """This is a documentation placed anywhere""" # otherwise, type it like this# [END documentation]# [START jinja_template]templated_command = textwrap.dedent("""{% for i in range(5) %}echo "{{ ds }}"echo "{{ macros.ds_add(ds, 7)}}"{% endfor %}""")t3 = BashOperator(task_id="templated",depends_on_past=False,bash_command=templated_command,)# [END jinja_template]t1 >> [t2, t3]# [END tutorial]