# BD 手册：dws_assistant_project_tag / dws_member_project_tag（项目标签表）

> 变更日期：2026-03-12
> 变更类型：补充任务注册（seed 脚本遗漏修复）

## 变更说明

两张项目标签表（`dws.dws_assistant_project_tag`、`dws.dws_member_project_tag`）于 2026-03-07 创建，代码层（task class + TaskRegistry）已完整实现，但 `db/etl_feiqiu/seeds/seed_scheduler_tasks.sql` 遗漏了这两个任务码，导致 `meta.etl_task` 表中无记录，调度时报"未启用或不存在"。

本次修复：
- 在 seed 脚本中补充 `DWS_ASSISTANT_PROJECT_TAG` 和 `DWS_MEMBER_PROJECT_TAG`
- 在测试库 `test_etl_feiqiu` 的 `meta.etl_task` 表中插入两条记录（`enabled = TRUE`）

## 表概览

| 表名 | Schema | 粒度 | 时间窗口数 | 数据来源 |
|------|--------|------|-----------|----------|
| `dws_assistant_project_tag` | dws | 助教 + 时间窗口 + 项目类型 | 6 | `dwd_assistant_service_log` + `dim_table` + `cfg_area_category` |
| `dws_member_project_tag` | dws | 会员 + 时间窗口 + 项目类型 | 2 | `dwd_table_fee_log` + `dim_table` + `cfg_area_category` |

两表共享相同的标签计算逻辑：按时间窗口聚合各项目时长，计算占比，≥25% 分配标签。

## 兼容性影响

- ETL 调度：修复后两个任务可正常被 admin 后台调度执行
- 后端 API：无影响（API 层直接查询 DWS 表，表结构未变）
- 小程序/管理后台：无影响（前端查询不依赖 `meta.etl_task`）
- 其他 ETL 任务：无影响（两个任务独立运行，不被其他任务依赖）

## 回滚策略

```sql
-- 1. 从 meta.etl_task 移除注册
DELETE FROM meta.etl_task
WHERE task_code IN ('DWS_ASSISTANT_PROJECT_TAG', 'DWS_MEMBER_PROJECT_TAG');

-- 2. 还原 seed 脚本：从 task_codes 数组中移除这两行
--    'DWS_ASSISTANT_PROJECT_TAG',
--    'DWS_MEMBER_PROJECT_TAG',
```

## 验证 SQL

```sql
-- 1. 确认 meta.etl_task 中两个任务已注册且启用
SELECT task_code, store_id, enabled, created_at
FROM meta.etl_task
WHERE task_code IN ('DWS_ASSISTANT_PROJECT_TAG', 'DWS_MEMBER_PROJECT_TAG');
-- 期望：2 行，enabled = TRUE

-- 2. 确认 seed 脚本与 task_registry 一致（无遗漏）
-- 手动比对 seed_scheduler_tasks.sql 中的 task_codes 与 task_registry.py 中的注册列表

-- 3. 确认两张 DWS 表存在且结构正确
SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'dws'
  AND table_name IN ('dws_assistant_project_tag', 'dws_member_project_tag')
ORDER BY table_name, ordinal_position;
-- 期望：每张表 15 个字段

-- 4. 确认调度可正常执行（在 admin 后台触发后检查）
SELECT task_code, status, started_at, finished_at
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
WHERE t.task_code IN ('DWS_ASSISTANT_PROJECT_TAG', 'DWS_MEMBER_PROJECT_TAG')
ORDER BY r.started_at DESC
LIMIT 4;
```

## 详细 BD 手册

两张表的完整字段说明、索引、数据链路、业务规则见模块级 BD 手册：
- `apps/etl/connectors/feiqiu/docs/database/DWS/main/BD_manual_dws_assistant_project_tag.md`
- `apps/etl/connectors/feiqiu/docs/database/DWS/main/BD_manual_dws_member_project_tag.md`

ETL 任务详细说明见：
- `apps/etl/connectors/feiqiu/docs/etl_tasks/dws_tasks.md`（项目标签域章节）
