# Skill: tm_scene_coverage_m 重点场景覆盖指标月表计算指导 (非 ODS 版) ## 1. 实现目标 按场景粒度汇总覆盖、干扰、用户指标。通过关联桥接表与一级事实表,实现 100% 不直接读取 ODS 层。 ## 2. 计算拓扑 (Topology) - **计算执行环境**:**HiveSQL**。 - **基本架构**:基于桥接表 (`tm_scene_grid_coverage_m`) 与一级事实表 (`tm_grid_coverage_m`) 的空间关联聚合。 - **数据流向**: 1. 输入 A:`tm_scene_grid_coverage_m *` (提供场景-栅格对应关系)。 2. 输入 B:`tm_grid_coverage_m *` (提供栅格指标及用户列表)。 3. 输入 C:`td_scene #` (提供场景维表属性)。 ## 3. 字段映射矩阵 (The Matrix) | 目标字段 | 类型 | 取值逻辑 | 备注 | | :--- | :--- | :--- | :--- | | **`total_user_count`** | BIGINT | `approx_count_distinct(exploded_id)` | **跨栅格去重**,详见原语说明 | | **`rsrpcount`** | BIGINT | `SUM(g.rsrpcount)` | - | | **`avgrsrp`** | DECIMAL | `SUM(g.totalrsrp) / SUM(g.rsrpcount)` | 基于事实表累加值聚合 | | **`mr_grid_count`** | BIGINT | `COUNT(DISTINCT regionid)` | **场景内有采样栅格总数** | | **`covered_grid_count_105`**| BIGINT | `SUM(is_covered_105)` | **场景内达标栅格总数** (-105) | | **`covered_grid_count_110`**| BIGINT | `SUM(is_covered_110)` | **场景内达标栅格总数** (-110) | | **`grid_cover_rate_105`**| DECIMAL | `covered_grid_count_105 / mr_grid_count` | **场景级栅格达标率** (-105) | | **`grid_cover_rate_110`**| DECIMAL | `covered_grid_count_110 / mr_grid_count` | **场景级栅格达标率** (-110) | | **`total_grid_count`** | BIGINT | `COUNT(DISTINCT regionid)` | 场景内总栅格数 | | **市场份额/VIP/高价值等** | - | **置空处理** | 严格遵循 `openspec.md` | ## 4. 关键计算原语 (Primitives) - **无 ODS 用户数聚合原语**: ```sql -- Step: 场景级用户数去重计算 SELECT scene_id, approx_count_distinct(id) FROM tm_scene_grid_coverage_m s JOIN tm_grid_coverage_m g ON s.regionid = g.regionid AND s.indoor_flag = g.indoor_flag LATERAL VIEW EXPLODE(g.device_id_list) e AS id WHERE g.operator_name = 'telecom' GROUP BY scene_id ``` ## 5. 存储与优化规范 - 最终结果存入 PG `tm_scene_coverage_m`。 - 严禁在脚本中出现任何 `ODS_` 开头的表名。