-- 填充用户地址UPDATE dim_users u
SET address =COALESCE(u.address, a.standard_address)FROM address_api a
WHERE u.user_id = a.user_id AND u.address ISNULL;-- 标记支付状态异常订单UPDATE fact_orders
SET payment_status ='状态异常'WHERE payment_status ISNULL;
2. 异常值处理
检测与修正流程
单价异常:订单表中存在price < 0的记录(如退货订单),需将其金额标记为负数并关联退货单号。
UPDATE fact_orders
SET order_amount =-order_amount
WHERE product_id IN(SELECT product_id FROM dim_products WHERE is_returnable =TRUE);
时间异常:下单时间早于注册时间的记录,通过用户注册时间修正。
UPDATE fact_orders o
SET order_time = u.register_time +INTERVAL'1 minute'FROM dim_users u
WHERE o.user_id = u.user_id AND o.order_time < u.register_time;
3. 重复值处理
基于窗口函数去重
-- 保留同一用户同一商品的最新订单WITH ranked_orders AS(SELECT order_id,user_id,product_id,ROW_NUMBER()OVER(PARTITIONBY user_id, product_id ORDERBY order_time DESC)AS rnFROM fact_orders
)DELETEFROM fact_orders
WHERE order_id IN(SELECT order_id FROM ranked_orders WHERE rn >1);
4. 数据标准化
地址字段拆分
ALTERTABLE dim_users
ADDCOLUMN province VARCHAR(20),ADDCOLUMN city VARCHAR(20),ADDCOLUMN district VARCHAR(20);UPDATE dim_users
SET province = SPLIT_PART(address,'省',1),city = SPLIT_PART(SPLIT_PART(address,'省',2),'市',1),district = SPLIT_PART(SPLIT_PART(address,'省',2),'市',2);
9.1.5 数据质量评估
关键指标监控
指标名称
计算公式
阈值
监控频率
缺失率
(缺失记录数 / 总记录数) * 100%
<5%
每日
重复率
(重复记录数 / 总记录数) * 100%
<0.1%
每日
异常值占比
(异常记录数 / 总记录数) * 100%
<2%
实时
数据一致性
关联表字段匹配率
>99%
每周
可视化监控看板
通过Grafana连接PostgreSQL,实时展示数据质量指标:
缺失值趋势图:按表和字段展示缺失率变化。
异常订单热力图:按时间和地区分布展示异常订单密度。
数据一致性仪表盘:监控订单表与用户表、商品表的关联匹配情况。
9.1.6 数据安全与权限管理
敏感数据处理
用户隐私保护:对用户手机号、身份证号等敏感字段进行脱敏处理。
CREATEORREPLACEFUNCTION mask_phone(phone text)RETURNStextAS $$
BEGINRETURN SUBSTRING(phone,1,3)||'****'|| SUBSTRING(phone,8,4);END;
$$ LANGUAGE plpgsql;UPDATE dim_users
SET phone = mask_phone(phone);
访问权限控制:通过PostgreSQL的角色管理(ROLE)和行级安全性(RLS)限制数据访问。
CREATE ROLE analyst;GRANTSELECTON fact_orders TO analyst;CREATE POLICY orders_policy ON fact_orders
FORSELECTTO analyst
USING(user_id IN(SELECT user_id FROM dim_users WHERE department ='分析部'));