空值有三种含义
维度里的空值至少代表三种情况:未知(源端本来就没有)、不适用(业务上该属性不存在)、未采集(未来可以获得)。把三者混成同一个空值,分析时就无法区分「客户没填城市」与「该属性对这类客户不适用」,统计口径会越来越含糊。
基本信息
| 未知 | 统一占位符,例如 UNKNOWN |
|---|---|
| 不适用 | 业务上不存在,例如个人客户的企业规模 |
| 未采集 | 暂未获取,未来可能补齐 |
| 规整要求 | 入维前统一空串与空值,禁止空格串冒充空值 |
| 配套 | 占位符约定写入维度规范与数据字典 |
典型使用场景
- 客户画像:区分未填与不适用,避免把缺失当特征使用
- 报表展示:未知归为一类固定展示,避免出现空白行
- 质量监控:统计未知占比,评估采集流程的有效性
- 模型特征:区分空值类型后,缺失值处理策略才准确
- 运营触达:未采集手机号进入补全流程,不适用则不必触达
三类空值的规整
三类空值的规整
-- 约定:未知用 UNKNOWN,不适用用 NA,禁止空串
SELECT customer_id,
coalesce(nullif(trim(city), ''), 'UNKNOWN') AS city,
CASE WHEN cust_type = 'personal' THEN 'NA'
ELSE coalesce(scale, 'UNKNOWN') END AS scale
FROM stg_customer;占位与下游处理
| 空值类型 | 占位约定 | 下游处理 |
|---|---|---|
| 未知 | UNKNOWN | 归为一类展示,可量化占比 |
| 不适用 | NA | 统计时通常剔除 |
| 未采集 | PENDING | 进入补全队列 |
| 原始空值 | 入维前必须规整 | 不允许直接进入维表 |
空串与空值混用是最常见的脏数据来源:两者在过滤时行为不同,聚合结果会莫名多出一块,入维前统一规整最省事。
占位符不要用业务可能出现的真实值:用「其他」当未知占位时,一旦源端真有「其他」类目就无法区分,建议用源端不会出现的字符串。
空值策略要与未知成员对齐:事实表无法确定具体成员时统一落到未知成员键,而不是留空的代理键,否则维度关联会直接丢行。