在准备环境前提交次全部更改。

This commit is contained in:
Neo
2026-02-19 08:35:13 +08:00
parent ded6dfb9d8
commit 4eac07da47
1387 changed files with 6107191 additions and 33002 deletions

View File

@@ -0,0 +1,58 @@
# etl_cursor 任务游标表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | meta |
| 表名 | etl_cursor |
| 主键 | cursor_id |
| 唯一约束 | (task_id, store_id) |
| 外键 | task_id → etl_task(task_id) ON DELETE CASCADE |
| 记录数 | 44 |
| 说明 | 记录每个任务/门店的增量窗口水位及最后一次运行 ID是增量正确性的关键表 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 默认值 | 说明 |
|------|--------|------|------|--------|------|
| 1 | cursor_id | BIGINT | NO | BIGSERIAL | 自增主键 |
| 2 | task_id | BIGINT | NO | | 关联 etl_task.task_id标识所属任务 |
| 3 | store_id | BIGINT | NO | | 门店/租户粒度 |
| 4 | last_start | TIMESTAMPTZ | YES | | 上次窗口开始时间(含重叠偏移),下次增量从此时间点继续 |
| 5 | last_end | TIMESTAMPTZ | YES | | 上次窗口结束时间 |
| 6 | last_id | BIGINT | YES | | 上次处理的最大主键/游标值(可选),用于基于 ID 的增量模式 |
| 7 | last_run_id | BIGINT | YES | | 上次运行 ID对应 etl_run.run_id |
| 8 | extra | JSONB | YES | '{}'::jsonb | 附加游标信息 JSON可存放任务特有的水位数据 |
| 9 | created_at | TIMESTAMPTZ | YES | now() | 创建时间 |
| 10 | updated_at | TIMESTAMPTZ | YES | now() | 更新时间 |
## 使用说明
```sql
-- 查询所有任务的当前游标水位
SELECT t.task_code, c.store_id, c.last_start, c.last_end, c.last_run_id
FROM meta.etl_cursor c
JOIN meta.etl_task t ON c.task_id = t.task_id
ORDER BY t.task_code;
-- 查询指定任务的游标详情
SELECT *
FROM meta.etl_cursor
WHERE task_id = (SELECT task_id FROM meta.etl_task WHERE task_code = 'FETCH_ORDERS' LIMIT 1);
-- 重置某任务的游标(用于重跑历史数据)
UPDATE meta.etl_cursor
SET last_start = '2024-01-01 00:00:00+08', last_end = NULL, last_id = NULL, updated_at = now()
WHERE task_id = (SELECT task_id FROM meta.etl_task WHERE task_code = 'FETCH_ORDERS' LIMIT 1);
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯created_at / updated_at 记录变更时间last_run_id 可追溯到具体运行记录) |
| 数据来源 | 由调度器orchestration在每次任务运行后自动更新 |
| 关联表 | etl_task通过 task_id 关联、etl_run通过 last_run_id 关联) |

View File

@@ -0,0 +1,79 @@
# etl_run 运行记录表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | meta |
| 表名 | etl_run |
| 主键 | run_id |
| 外键 | task_id → etl_task(task_id) ON DELETE CASCADE |
| 记录数 | 8726 |
| 说明 | 记录每次任务执行的窗口参数、运行状态、处理计数与日志路径,是 ETL 运维排查的核心表 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 默认值 | 说明 |
|------|--------|------|------|--------|------|
| 1 | run_id | BIGINT | NO | BIGSERIAL | 自增主键 |
| 2 | run_uuid | TEXT | NO | | 本次调度的唯一标识UUID 格式),用于跨系统关联 |
| 3 | task_id | BIGINT | NO | | 关联 etl_task.task_id标识所属任务 |
| 4 | store_id | BIGINT | NO | | 门店/租户粒度 |
| 5 | status | TEXT | NO | | 运行状态。**枚举值**: `SUCC` = 成功, `FAIL` = 失败, `PARTIAL` = 部分成功 |
| 6 | started_at | TIMESTAMPTZ | YES | now() | 开始时间 |
| 7 | ended_at | TIMESTAMPTZ | YES | | 结束时间 |
| 8 | window_start | TIMESTAMPTZ | YES | | 本次窗口开始时间 |
| 9 | window_end | TIMESTAMPTZ | YES | | 本次窗口结束时间 |
| 10 | window_minutes | INTEGER | YES | | 窗口跨度(分钟) |
| 11 | overlap_seconds | INTEGER | YES | | 窗口重叠秒数 |
| 12 | fetched_count | INTEGER | YES | 0 | 抓取/读取的记录数 |
| 13 | loaded_count | INTEGER | YES | 0 | 插入的记录数 |
| 14 | updated_count | INTEGER | YES | 0 | 更新的记录数 |
| 15 | skipped_count | INTEGER | YES | 0 | 跳过的记录数 |
| 16 | error_count | INTEGER | YES | 0 | 错误记录数 |
| 17 | unknown_fields | INTEGER | YES | 0 | 未知字段计数(清洗阶段发现的未定义字段) |
| 18 | export_dir | TEXT | YES | | 抓取/导出目录路径 |
| 19 | log_path | TEXT | YES | | 日志文件路径 |
| 20 | request_params | JSONB | YES | '{}'::jsonb | 请求参数 JSON记录本次运行使用的 API 请求参数 |
| 21 | manifest | JSONB | YES | '{}'::jsonb | 运行产出清单/统计 JSON记录处理结果摘要 |
| 22 | error_message | TEXT | YES | | 错误信息(若失败时记录具体原因) |
| 23 | extra | JSONB | YES | '{}'::jsonb | 附加字段,保留扩展 |
## 使用说明
```sql
-- 查询最近 10 次运行记录
SELECT r.run_id, t.task_code, r.status, r.started_at, r.ended_at,
r.fetched_count, r.loaded_count, r.error_count
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
ORDER BY r.started_at DESC
LIMIT 10;
-- 查询失败的运行记录及错误信息
SELECT r.run_id, t.task_code, r.started_at, r.error_message
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
WHERE r.status = 'FAIL'
ORDER BY r.started_at DESC;
-- 统计各任务的运行成功率
SELECT t.task_code,
COUNT(*) AS total_runs,
COUNT(*) FILTER (WHERE r.status = 'SUCC') AS success_count,
ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 'SUCC') / COUNT(*), 1) AS success_rate
FROM meta.etl_run r
JOIN meta.etl_task t ON r.task_id = t.task_id
GROUP BY t.task_code
ORDER BY success_rate;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(每次运行独立记录,含完整窗口参数、计数和错误信息) |
| 数据来源 | 由调度器orchestration在任务执行过程中自动写入和更新 |
| 关联表 | etl_task通过 task_id 关联、etl_cursor通过 last_run_id 反向关联) |

View File

@@ -0,0 +1,59 @@
# etl_task 任务注册表
> 生成时间2026-02-13
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | meta |
| 表名 | etl_task |
| 主键 | task_id |
| 唯一约束 | (task_code, store_id) |
| 记录数 | 49 |
| 说明 | 调度依据的任务清单,与代码中 task_registry 的任务码对应;按门店粒度管理任务参数 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 默认值 | 说明 |
|------|--------|------|------|--------|------|
| 1 | task_id | BIGINT | NO | BIGSERIAL | 自增主键 |
| 2 | task_code | TEXT | NO | | 任务编码,需与代码中的任务码一致(如 `FETCH_ORDERS``DWD_LOAD_FROM_ODS` |
| 3 | store_id | BIGINT | NO | | 门店/租户粒度,区分多门店执行 |
| 4 | enabled | BOOLEAN | YES | true | 是否启用此任务 |
| 5 | cursor_field | TEXT | YES | | 增量游标字段名(可选),用于标识增量抽取的时间/ID 字段 |
| 6 | window_minutes_default | INTEGER | YES | 30 | 默认时间窗口(分钟),控制每次增量抽取的时间跨度 |
| 7 | overlap_seconds | INTEGER | YES | 120 | 窗口重叠秒数,用于防止因时间精度导致的数据遗漏 |
| 8 | page_size | INTEGER | YES | 200 | 默认分页大小,控制 API 单次请求返回的记录数 |
| 9 | retry_max | INTEGER | YES | 3 | API 重试次数上限 |
| 10 | params | JSONB | YES | '{}'::jsonb | 任务级自定义参数 JSON可存放端点特有配置 |
| 11 | created_at | TIMESTAMPTZ | YES | now() | 创建时间 |
| 12 | updated_at | TIMESTAMPTZ | YES | now() | 更新时间 |
## 使用说明
```sql
-- 查询所有已启用的任务
SELECT task_code, store_id, window_minutes_default, overlap_seconds
FROM meta.etl_task
WHERE enabled = TRUE
ORDER BY task_code;
-- 查询指定门店的任务配置
SELECT *
FROM meta.etl_task
WHERE store_id = 2790685415443269 AND enabled = TRUE;
-- 修改某任务的时间窗口和重叠秒数
UPDATE meta.etl_task
SET window_minutes_default = 60, overlap_seconds = 300, updated_at = now()
WHERE task_code = 'FETCH_ORDERS' AND store_id = 2790685415443269;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯created_at / updated_at 记录变更时间) |
| 数据来源 | 系统初始化时由 seed 脚本或 CLI 注册写入 |
| 关联表 | etl_cursor通过 task_id 关联、etl_run通过 task_id 关联) |