调度系统:使用 Apache Airflow 管理和调度 Couchbase SQL 脚本的实际例子

假设场景如下:

每天定时执行一组 Couchbase SQL 脚本,用于数据同步、聚合和清洗。

脚本包括:

同步数据到 Couchbase 集群。

执行数据聚合查询。

清理过期数据。

要求:

支持任务依赖管理。

提供任务失败后的重试机制。

支持日志和运行状态的监控。

使用 Airflow 实现

Airflow 提供了强大的调度和任务依赖管理能力,可以将上述流程定义为一个 DAG(有向无环图)。

  1. 创建 Couchbase SQL 脚本

创建三个 SQL 脚本:

sync_data.sql:

INSERT INTO bucket-name (KEY, VALUE)

SELECT META().id, new_data.*

FROM source-bucket new_data

WHERE META().id NOT IN (SELECT RAW META().id FROM bucket-name);

aggregate_data.sql:

SELECT category, COUNT(*) AS count

FROM bucket-name

WHERE type = "product"

GROUP BY category;

cleanup_expired_data.sql:

DELETE FROM bucket-name

WHERE expiration_date < NOW_STR();

  1. 安装 Couchbase 的 Python 客户端

通过 pip 安装所需的 Couchbase 依赖:

pip install couchbase

  1. 定义 Airflow DAG 和任务

couchbase_workflow.py:

from airflow import DAG

from airflow.operators.python import PythonOperator

from datetime import datetime, timedelta

from couchbase.cluster import Cluster, ClusterOptions

from couchbase_core.cluster import PasswordAuthenticator

\

Couchbase 连接函数

def execute_couchbase_query(sql_file_path):

连接 Couchbase 集群

cluster = Cluster(

'couchbase://localhost',

ClusterOptions(PasswordAuthenticator('username', 'password'))

)

bucket = cluster.bucket('bucket-name')

query_service = cluster.query_indexes()

复制代码
# 读取并执行 SQL 脚本
with open(sql_file_path, 'r') as file:
    query = file.read()
result = query_service.query(query)
print(f"Executed query from {sql_file_path}: {result}")

定义默认参数

default_args = {

'owner': 'admin',

'depends_on_past': False,

'email_on_failure': True,

'email': ['admin@example.com'],

'retries': 2,

'retry_delay': timedelta(minutes=5),

}

定义 DAG

with DAG(

dag_id='couchbase_sql_workflow',

default_args=default_args,

description='A workflow to execute Couchbase SQL scripts',

schedule_interval='0 3 * * *', # 每天凌晨 3 点运行

start_date=datetime(2024, 1, 1),

catchup=False,

tags=['couchbase', 'sql'],

) as dag:

复制代码
# 任务 1: 同步数据
sync_data_task = PythonOperator(
    task_id='sync_data',
    python_callable=execute_couchbase_query,
    op_args=['/path/to/sql_scripts/sync_data.sql']
)

# 任务 2: 数据聚合
aggregate_data_task = PythonOperator(
    task_id='aggregate_data',
    python_callable=execute_couchbase_query,
    op_args=['/path/to/sql_scripts/aggregate_data.sql']
)

# 任务 3: 清理过期数据
cleanup_data_task = PythonOperator(
    task_id='cleanup_data',
    python_callable=execute_couchbase_query,
    op_args=['/path/to/sql_scripts/cleanup_expired_data.sql']
)

# 定义任务依赖
sync_data_task >> aggregate_data_task >> cleanup_data_task
  1. 部署 DAG 到 Airflow

将脚本保存为 couchbase_workflow.py 并放置到 Airflow 的 DAG 文件夹中(通常是 /airflow/dags)。

确保 Airflow 服务正常运行:

airflow webserver

airflow scheduler

登录到 Airflow Web 界面,启用并监控 couchbase_sql_workflow。

  1. 优势分析

任务调度:通过 schedule_interval 定时调度任务,支持灵活的 Cron 表达式。

任务依赖管理:通过 >> 定义任务依赖,确保顺序执行。

重试机制:默认支持失败后的自动重试。

可观察性:Airflow 提供任务状态跟踪和日志记录,方便调试和监控。

  1. 扩展优化

参数化 SQL:可在 SQL 中加入参数,通过 PythonOperator 动态替换。

自定义连接器:使用 Airflow 的 Hook 构建更灵活的 Couchbase 连接器。

错误处理:在 Python 函数中捕获异常并记录到外部系统(如日志系统或监控平台)。

相关推荐
ChineHe15 小时前
Redis数据类型篇002_详解Strings核心命令与存储结构
数据库·redis·缓存
清水白石00816 小时前
《从零到进阶:Pydantic v1 与 v2 的核心差异与零成本校验实现原理》
数据库·python
电商API&Tina16 小时前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
柠檬叶子C16 小时前
PostgreSQL 忘记 postgres 密码怎么办?(已解决)
数据库·postgresql
864记忆17 小时前
Qt创建连接注意事项
数据库·qt·nginx
毕设十刻17 小时前
基于Vue的迅读网上书城22f4d(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
薛定谔的猫198218 小时前
Langchain(十二)LangGraph 实战入门:用流程图思维构建 LLM 工作流
数据库·microsoft
坐吃山猪18 小时前
ChromaDB02-代码实战
数据库·向量数据库·chromadb
摇滚侠18 小时前
MySQL 中 utf8mb4 字符集,字母a占几个字节,一个汉字占几个字节 / MySQL 中 utf8mb3 字符集,字母a占几个字节,一个汉字占几个字节
数据库·mysql
ChineHe18 小时前
Redis数据类型篇001_数据类型梳理与选择指南
数据库·redis·缓存