# BD 手册：删除助教废除（Abolish）独立链路表

## 迁移脚本

`db/etl_feiqiu/migrations/2026-02-22__drop_assistant_abolish_tables.sql`

## 变更说明

### 删除的表

| Schema | 表名 | 说明 |
|--------|------|------|
| `ods` | `assistant_cancellation_records` | 上游废除 API 原始数据（仅 78 条），不再抓取 |
| `dwd` | `dwd_assistant_trash_event` | 废除事件主表，无消费者 |
| `dwd` | `dwd_assistant_trash_event_ex` | 废除事件扩展表，无消费者 |

### 删除的索引

| Schema | 索引名 | 所属表 |
|--------|--------|--------|
| `ods` | `idx_ods_assistant_cancellation_records_latest` | `assistant_cancellation_records` |

### 清理的元数据

- `meta.etl_task` 中 `task_code = 'ODS_ASSISTANT_ABOLISH'` 的注册行

## 兼容性影响

- **ETL**：ODS 抓取任务 `ODS_ASSISTANT_ABOLISH` 已在代码层移除（Task 1–3），迁移脚本清理数据库残留
- **DWD 加载**：`FACT_MAPPINGS` 和 `TABLE_MAP` 中的废除表映射已在代码层移除
- **DWS 聚合**：`assistant_daily_task.py` 已改用 `dwd_assistant_service_log_ex.is_trash` 字段，不受影响
- **后端 API**：无直接引用这些表
- **小程序**：无直接引用这些表

## 回滚策略

1. 从 `db/etl_feiqiu/schemas/ods.sql` 恢复 `assistant_cancellation_records` 的 `CREATE TABLE`
2. 从 `db/etl_feiqiu/schemas/dwd.sql` 恢复 `dwd_assistant_trash_event` / `_ex` 的 `CREATE TABLE`
3. 重建索引：`CREATE INDEX idx_ods_assistant_cancellation_records_latest ON ods.assistant_cancellation_records (id, fetched_at DESC);`
4. 重新注册任务：`INSERT INTO meta.etl_task (task_code, store_id, enabled) VALUES ('ODS_ASSISTANT_ABOLISH', <store_id>, TRUE);`
5. ODS 数据可从上游 API 重新抓取（仅 78 条）

## 验证 SQL

```sql
-- 1. 确认 3 张表已不存在
SELECT tablename FROM pg_tables
 WHERE schemaname IN ('ods', 'dwd')
   AND tablename IN (
       'assistant_cancellation_records',
       'dwd_assistant_trash_event',
       'dwd_assistant_trash_event_ex'
   );
-- 预期：0 行

-- 2. 确认索引已不存在
SELECT indexname FROM pg_indexes
 WHERE schemaname = 'ods'
   AND indexname = 'idx_ods_assistant_cancellation_records_latest';
-- 预期：0 行

-- 3. 确认 meta.etl_task 中无 ODS_ASSISTANT_ABOLISH 注册
SELECT * FROM meta.etl_task WHERE task_code = 'ODS_ASSISTANT_ABOLISH';
-- 预期：0 行
```
