4.1 KiB
4.1 KiB
BD_Manual:DWS 库存汇总(日/周/月)
DWS 表:
dws.dws_goods_stock_daily_summary、dws.dws_goods_stock_weekly_summary、dws.dws_goods_stock_monthly_summaryDWD 数据源:dwd.dwd_goods_stock_summary任务代码:DWS_GOODS_STOCK_DAILY、DWS_GOODS_STOCK_WEEKLY、DWS_GOODS_STOCK_MONTHLY代码位置:apps/etl/connectors/feiqiu/tasks/dws/goods_stock_daily_task.py、goods_stock_weekly_task.py、goods_stock_monthly_task.pyDDL 位置:docs/database/ddl/etl_feiqiu__dws.sql迁移脚本:db/_archived/ddl_baseline_2026-02-22/db/etl_feiqiu/migrations/2026-02-20__create_dws_goods_stock_summary.sql(已归档)
1. 表结构(三张表结构相同)
| DWS 列名 | 类型 | 业务含义 | 取值范围/示例 |
|---|---|---|---|
site_id |
BIGINT | 门店 ID(PK 之一) | 飞球门店 ID |
tenant_id |
BIGINT | 租户 ID | 飞球租户 ID |
stat_date |
DATE | 统计日期(PK 之一)。日度=当天日期,周度=ISO 周一日期,月度=月首日期 | 如 2026-01-15、2026-01-13(周一)、2026-01-01(月首) |
site_goods_id |
BIGINT | 门店商品 ID(PK 之一),关联 dim_store_goods.site_goods_id |
飞球商品 ID |
goods_name |
TEXT | 商品名称 | 如 百威啤酒 |
goods_unit |
TEXT | 计量单位 | 如 瓶、包 |
goods_category_id |
BIGINT | 一级商品分类 ID | 飞球分类 ID |
goods_category_second_id |
BIGINT | 二级商品分类 ID | 飞球分类 ID |
category_name |
TEXT | 一级分类名称 | 如 酒水 |
range_start_stock |
NUMERIC | 期初库存(统计周期起点的库存量) | 数值 |
range_end_stock |
NUMERIC | 期末库存(统计周期终点的库存量) | 数值 |
range_in |
NUMERIC | 入库数量(统计周期内的采购/调拨入库总量) | 数值 |
range_out |
NUMERIC | 出库数量(统计周期内的调拨出库/报损总量) | 数值 |
range_sale |
NUMERIC | 销售数量(统计周期内的销售出库总量) | 数值 |
range_sale_money |
NUMERIC(12,2) | 销售金额(元),统计周期内的销售总金额 | 金额值 |
range_inventory |
NUMERIC | 盘点调整量(统计周期内的盘盈/盘亏净量) | 正/负数值 |
current_stock |
NUMERIC | 当前库存(统计周期末的实时库存量) | 数值 |
stat_period |
TEXT | 汇总粒度标识 | 'daily' / 'weekly' / 'monthly' |
created_at |
TIMESTAMPTZ | 记录创建时间 | 自动填充 now() |
updated_at |
TIMESTAMPTZ | 记录最后更新时间 | 自动填充 now() |
2. 主键
(site_id, stat_date, site_goods_id) — 按门店、日期、商品维度唯一。
3. 粒度说明
| 表名 | 粒度 | stat_date 规则 | stat_period |
|---|---|---|---|
dws_goods_stock_daily_summary |
日 | 当天日期 | 'daily' |
dws_goods_stock_weekly_summary |
周 | ISO 周一日期 | 'weekly' |
dws_goods_stock_monthly_summary |
月 | 月首日期(如 2026-01-01) |
'monthly' |
4. 聚合逻辑
- extract:从
dwd.dwd_goods_stock_summary按时间范围查询 - transform:按粒度对
fetched_at进行分组聚合range_start_stock:取周期内最早记录的range_start_stockrange_end_stock:取周期内最晚记录的range_end_stockrange_in/range_out/range_sale/range_inventory:SUM 汇总range_sale_money:SUM 汇总current_stock:取周期内最晚记录的current_stockgoods_name/goods_unit/category_name:取最晚记录的值
- load:upsert 写入目标表,主键冲突时更新
5. 前置依赖
dwd.dwd_goods_stock_summary表必须已创建并有数据- ODS 任务配置
requires_window=True必须已生效并重新采集
6. 代码引用
- 任务代码:
tasks/dws/goods_stock_daily_task.py、goods_stock_weekly_task.py、goods_stock_monthly_task.py - 继承:
BaseDwsTask(tasks/dws/base_dws_task.py) - 任务注册:
DWS_GOODS_STOCK_DAILY、DWS_GOODS_STOCK_WEEKLY、DWS_GOODS_STOCK_MONTHLY