Airflow,一个很强大的自动化工作流python库

自动化工作流 - Airflow基础:让你的数据任务井井有条

今天要和大家聊一个特别酷的数据工程利器 - Airflow 。还在为复杂的数据处理任务头疼吗?用Excel做数据分析的过程烦琐又容易出错?来看看如何用Airflow把这些任务编排成一个优雅的自动化工作流吧!

一、初识Airflow:你的数据流水线管家

想象一下,Airflow就像一个尽职尽责的工厂管理员,它帮你安排和监督每一个生产环节,确保所有任务按部就班地完成。首先,让我们来安装这位得力助手:

csharp 复制代码
# 使用pip安装airflow
pip install apache-airflow

# 初始化airflow数据库
airflow db init

📌 小贴士:建议在虚拟环境中安装Airflow,避免依赖冲突:

bash 复制代码
python -m venv airflow_env
source airflow_env/bin/activate  # Linux/Mac
.\airflow_env\Scripts\activate   # Windows

二、DAG:工作流的设计图

在Airflow中,我们用DAG(有向无环图)来描述任务之间的依赖关系。就像是在画一张任务流程图,告诉Airflow:"嘿,先做这个,再做那个"。

ini 复制代码
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta

# 定义默认参数
default_args = {
    'owner': 'your_name',
    'start_date': datetime(2024, 1, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}

# 创建DAG
with DAG(
    'my_first_dag',
    default_args=default_args,
    schedule_interval='@daily'  # 每天执行一次
) as dag:
    
    # 定义具体任务
    def task1_function():
        print("开始处理数据...")
    
    def task2_function():
        print("数据处理完成!")
    
    task1 = PythonOperator(
        task_id='task1',
        python_callable=task1_function
    )
    
    task2 = PythonOperator(
        task_id='task2',
        python_callable=task2_function
    )
    
    # 设置任务依赖关系
    task1 >> task2  # task1执行完后再执行task2

⚠️ 注意事项:DAG名称必须是唯一的,且不能包含空格。

三、Operators:任务的具体执行者

Airflow提供了多种Operators(算子),就像不同岗位的工人,各司其职:

ini 复制代码
# 1. Python操作
from airflow.operators.python import PythonOperator

# 2. Bash命令执行
from airflow.operators.bash import BashOperator

# 3. 数据库操作
from airflow.providers.postgres.operators.postgres import PostgresOperator

# 实际案例:数据处理工作流
with DAG('data_processing', default_args=default_args, schedule_interval='@daily') as dag:
    
    # 执行Shell命令下载数据
    download_data = BashOperator(
        task_id='download_data',
        bash_command='wget https://example.com/data.csv -O /tmp/data.csv'
    )
    
    # Python处理数据
    def process_data():
        import pandas as pd
        df = pd.read_csv('/tmp/data.csv')
        # 数据处理逻辑...
        df.to_sql('processed_data', engine)
    
    process_task = PythonOperator(
        task_id='process_data',
        python_callable=process_data
    )
    
    # 设置执行顺序
    download_data >> process_task

🌟 实用技巧 :使用XCom在任务间传递数据:

python 复制代码
def push_data(**context):
    context['task_instance'].xcom_push(key='data_key', value='some_value')

def pull_data(**context):
    value = context['task_instance'].xcom_pull(key='data_key')
    print(f"接收到的数据: {value}")

四、实战案例:每日销售数据处理流水线

让我们来实现一个实用的数据处理工作流:

ini 复制代码
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.email import EmailOperator
import pandas as pd
import datetime

def extract_sales_data():
    # 读取销售数据
    df = pd.read_excel('daily_sales.xlsx')
    return df.to_dict()

def process_sales_data(**context):
    # 获取上一步的数据
    sales_data = context['task_instance'].xcom_pull(task_ids='extract_data')
    # 处理数据逻辑...
    total_sales = sum(item['amount'] for item in sales_data)
    return {'total_sales': total_sales}

with DAG(
    'sales_pipeline',
    default_args={
        'owner': 'data_team',
        'start_date': datetime(2024, 1, 1),
        'email': ['your_email@example.com']
    },
    schedule_interval='0 1 * * *'  # 每天凌晨1点执行
) as dag:

    extract_task = PythonOperator(
        task_id='extract_data',
        python_callable=extract_sales_data
    )
    
    process_task = PythonOperator(
        task_id='process_data',
        python_callable=process_sales_data
    )
    
    email_task = EmailOperator(
        task_id='send_report',
        to='manager@example.com',
        subject='Daily Sales Report',
        html_content='Sales report attached...'
    )
    
    extract_task >> process_task >> email_task

🎯 进阶提示:

  • 开发时先使用airflow test命令测试单个任务
  • 合理使用schedule_interval设置任务调度周期
  • 注意处理任务失败的重试机制

测试新人可以学习《测试人的 Python 工具书》书籍、《性能测试 JMeter 实战》书籍

相关推荐
冬奇Lab11 小时前
LLM 驱动的自动化测试系列(09):移动端自动化(五)——当通用 Agent 框架下沉到测试场景
人工智能·agent·测试
andyweike11 小时前
iOS App 测试
ios·测试·ad hoc·分发
匠测AI说12 小时前
AI for Testing 提效实战·执行自动化(一):别让AI凭空写脚本,让它在你的框架里写,产出才能直接合入
人工智能·测试
Zelman16 小时前
测试层级与测试类型
后端·面试·测试
Ikalus198819 小时前
预注册的答案表把正控判成「通过」,盲测判成「不通过」——而两个都不对
测试
小元同学20 小时前
一个大三测试实习生的自白:实习重不重要?我在往测开的路上找到了答案
测试
冬奇Lab1 天前
LLM 驱动的自动化测试系列(08):移动端自动化(四)——AppAgent:解析树与视觉特征的结合
人工智能·测试
万联WANFLOW2 天前
从 ARTEX 事件看 AI Agent 安全:工具调用链为何成为新的风险入口?
人工智能·安全·测试
ClouGence2 天前
小团队做自动化测试,选测试平台还是自己搭 Playwright?
测试
冬奇Lab2 天前
LLM 驱动的自动化测试系列(07):移动端自动化(三)——Mobile-Agent-v3 与自研 GUI-Owl 模型路线
android·人工智能·测试