主事实加轨迹两张表
物流域通常拆成两张事实表:运单主事实一运单一行,存发运、到达、签收等关键时间戳与当前状态;轨迹事件事实多行,存每一次扫描的节点类型、时间与操作方。时效指标从两张表联合计算,主事实供快速聚合,轨迹表供节点级排查。只建轨迹表会让时效计算每次都扫全量明细,只建主事实则在滞留排查时缺少依据。
基本信息
| 主事实 | 一运单一行,关键里程碑与状态 |
|---|---|
| 轨迹事实 | 每次扫描一行 |
| 维度 | 网点、线路、承运商、区域 |
| 度量 | 时效、成本、异常件数 |
| 逆向单 | 拒收、退回、改址单独标记 |
典型使用场景
- 计算发运到签收的时效,按线路、承运商、区域多维度考核
- 排查滞留件:查看轨迹中最新的节点与停留时长
- 结算承运商费用,按运单重量、体积与线路核对
- 异常件管理:破损、丢失、超时未更新的运单清单
- 逆向物流分析:退回原因与退回时效单独统计
运单主事实
运单主事实
-- 运单主事实:里程碑时间戳与当前状态
CREATE TABLE fact_shipment (
waybill_no string,
sender_site_sk bigint,
recv_site_sk bigint,
ship_ts timestamp COMMENT '发运时间',
sign_ts timestamp COMMENT '签收时间',
status string,
is_return boolean COMMENT '是否逆向单'
) PARTITIONED BY (dt string) STORED AS ORC;
-- 时效只在已签收样本上计算,未签收单独看滞留数
SELECT avg(timestampdiff(hour, ship_ts, sign_ts)) AS avg_hours
FROM fact_shipment
WHERE sign_ts IS NOT NULL AND dt = '2026-10-12';字段读法
| 要素 | 作用 | 异常表现 |
|---|---|---|
| ship_ts 与 sign_ts | 时效计算的两端 | 任一端缺失该单无法计入 |
| 轨迹 scan_ts | 节点级时序 | 轨迹缺失说明采集断链 |
| 网点键 | 收发归属统计 | 编码变更未做对照会导致断层 |
| is_return | 区分逆向单 | 不标记则正向时效被污染 |
时效考核按线路聚合比按网点更贴近实际:同一条线路的时效可比性高,网点维度会把不同线路混在一起,掩盖真实问题。
轨迹表数据量大,通常只在需要节点级排查时查询;日常时效看板从主事实表出数,避免每次都扫全量轨迹。