View a markdown version of this page

Limpieza de bases de datos de Aurora PostgreSQL en un entorno de Amazon MWAA - Amazon Managed Workflows para Apache Airflow

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Limpieza de bases de datos de Aurora PostgreSQL en un entorno de Amazon MWAA

Amazon Managed Workflows para Apache Airflow utiliza una base de datos Aurora PostgreSQL como base de datos de metadatos de Apache Airflow, donde se ejecuta el DAG y se almacenan las instancias de tareas. La siguiente muestra de código borra periódicamente las entradas de la base de datos Aurora PostgreSQL dedicada a su entorno Amazon MWAA.

Versión

Los ejemplos de código de esta página son específicos de Apache Airflow v2 y v3 compatibles con Amazon MWAA. Consulte las versiones de Apache Airflow compatibles.

Requisitos previos

Para usar el código de muestra de esta página, necesitará lo siguiente:

Dependencias

Para usar este código de ejemplo con Apache Airflow v2, no se necesitan dependencias adicionales. Use aws-mwaa-docker-images para instalar Apache Airflow.

Código de ejemplo

El siguiente DAG limpia la base de datos de metadatos de las tablas especificadas en TABLES_TO_CLEAN. En el ejemplo, se eliminan los datos de las tablas especificadas con más de 30 días de antigüedad. Para ajustar el tiempo de eliminación de las entradas, establezca MAX_AGE_IN_DAYS en un valor diferente.

Apache Airflow v3.0.6 to 3.2.1
from datetime import datetime from airflow import DAG from airflow.providers.standard.operators.bash import BashOperator # Note: Database commands might time out if running longer than 5 minutes. If this occurs, please increase the MAX_AGE_IN_DAYS (or change # timestamp parameter to an earlier date) for initial runs, then reduce on subsequent runs until the desired retention is met. MAX_AGE_IN_DAYS = 30 # To clean specific tables, please provide a comma-separated list per # https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#clean # A value of None will clean all tables TABLES_TO_CLEAN = None with DAG( dag_id="clean_db_dag", schedule=None, catchup=False, start_date=datetime(2026, 1, 1), ) as dag: tables_flag = f"--tables '{TABLES_TO_CLEAN}' " if TABLES_TO_CLEAN else "" bash_command = ( f"TIMESTAMP=$(date -u -d '{MAX_AGE_IN_DAYS} days ago' '+%Y-%m-%d %H:%M:%S' 2>/dev/null " f"|| date -u -v-{MAX_AGE_IN_DAYS}d '+%Y-%m-%d %H:%M:%S') && " "echo \"Cleaning records before: $TIMESTAMP\" && " "airflow db clean " "--clean-before-timestamp \"$TIMESTAMP\" " f"{tables_flag}" "--skip-archive --yes" ) cli_command = BashOperator( task_id="bash_command", bash_command=bash_command, )
Apache Airflow v2.7.2 to 2.11.0
from airflow import DAG from airflow.models.param import Param from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago from datetime import datetime, timedelta # Note: Database commands might time out if running longer than 5 minutes. If this occurs, please increase the MAX_AGE_IN_DAYS (or change # timestamp parameter to an earlier date) for initial runs, then reduce on subsequent runs until the desired retention is met. MAX_AGE_IN_DAYS = 30 # To clean specific tables, please provide a comma-separated list per # https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#clean # A value of None will clean all tables TABLES_TO_CLEAN = None with DAG( dag_id="clean_db_dag", schedule_interval=None, catchup=False, start_date=days_ago(1), params={ "timestamp": Param( default=(datetime.now()-timedelta(days=MAX_AGE_IN_DAYS)).strftime("%Y-%m-%d %H:%M:%S"), type="string", minLength=1, maxLength=255, ), } ) as dag: if TABLES_TO_CLEAN: bash_command="airflow db clean --clean-before-timestamp '{{ params.timestamp }}' --tables '"+TABLES_TO_CLEAN+"' --skip-archive --yes" else: bash_command="airflow db clean --clean-before-timestamp '{{ params.timestamp }}' --skip-archive --yes" cli_command = BashOperator( task_id="bash_command", bash_command=bash_command )