数据质量管理我把它总结成两个方面:数据规范和数据稽核
数据规范
基本命名规范
- 以 数仓分层模型 开头,如:
dw_
表示数据仓库层,ods_
表示操作数据存储层,dm_
表示数据集市层。 - 后接 业务线,如:
c_
代表 C 端业务线,b_
代表 B 端业务线。 - 再后是 业务域,如:
hr
代表人力资源相关,sales
代表销售相关,finance
代表财务相关。 - 最后是 具体业务实体表,如:
interview
代表面试情况,order
代表订单数据,payment
代表支付数据。 - 举例:
dw_c_hr_interview
,此表代表dw
层的 C 端业务线、人力资源相关业务中的面试情况。
表使用规范
- 表层级规范:不能跨层使用表。例如,
app
层的表不能直接引用底层ods
表的数据,应该引用加工过后的dw
或dm
层数据。 - 表复用与合理设计:尽可能复用表,避免重复计算和数据清洗。这个要求你在数据建模时,需要合理设计表结构、字段扩展,并确保表间关联清晰,避免冗余数据。
- 数据集成与清洗规范:对于源数据要做好清洗和格式统一,确保在数据层的不同表中,数据源格式一致,并避免手动干预的错误。
- 历史数据管理:在设计数据模型时,需要考虑数据的历史记录管理。例如使用拉链表(History Table)来保存数据的历史版本。
数据安全规范
- 权限管理:
- 在查询或写入表数据前,必须校验权限,确保执行者有相关表的访问权限。定时任务会定期检查权限,确保任务调度执行前权限正确无误。
- 强调 最小权限原则,确保用户仅访问其完成工作所需的最小数据集。
- 修改审批:
- 表结构的修改需要经过严格审批流程,确保修改不会影响到下游的数据处理任务。如果修改影响下游,则需要提前通知并协调下游团队做好准备。
- 变更时需要提供详细的 变更影响分析,包括对现有数据、任务调度的潜在影响评估。
- 敏感数据处理:
- 针对包含个人信息和敏感数据的表,必须实施加密和脱敏措施。例如自动检测和处理个人身份信息(PII)字段,并对这些信息进行加密或脱敏处理。
- 定期审计敏感数据访问日志,确保敏感数据的合规性和安全性。
- 数据操作审计:
- 所有数据操作(如数据的导入、导出、查询等)都必须进行完整的审计日志管理。审计日志需要记录 操作人员、操作时间、操作内容 等信息,确保可追溯性。
- 定期进行审计日志分析,识别潜在的违规操作和安全漏洞。
数据版本控制与回滚机制
- 版本控制:
- 所有表和数据处理任务应实现 版本控制。表结构或数据处理任务修改时,需要记录版本号,并确保版本之间的兼容性。
- 对于数据清洗或转换的步骤,确保记录清晰的版本信息,以便需要时进行回滚。
- 回滚机制:
- 提供回滚机制,确保在数据处理错误时能够恢复到上一个稳定状态。特别是在进行数据更新时,避免因错误更新造成数据丢失或损坏。
数据稽核
- 梳理稽核规则,并在稽核系统中支持用户自助选择配置一些稽核规则,并且支持自定义稽核规则,比如允许用户根据业务需求上传自定义规则(如 SQL 查询或正则表达式)并应用于稽核任务
- 任务创建之后会自动配置稽核任务,涵盖一些基本规则,如 NULL 值检查、数据类型检查、唯一性检查等。同时做好任务与稽核任务关联,确保可以互相关联查询展示
- 任务执行完成后,稽核系统订阅任务完成消息,接收到消息后提交稽核任务,只有稽核通过后任务才能视为任务成功
- 任务前置稽核验证:在任务启动之前,增加一个检查机制,确保任务所依赖的数据已经通过了预定的稽核。如果稽核失败,系统会通过 通知机制,如邮件、Slack、短信等发送告警, 提醒相关人员修复数据问题
- 稽核日志:每次稽核执行时,记录详细的稽核日志,包括执行的稽核规则、处理的记录数、每个规则的成功与失败情况等
一些实际场景下的问题
1. 修改任务或者表结构会影响下游,虽然有时候通知到下游了,但是也可能出现下游业务复杂度高,改起来很难的情况。 解决方案:
- 抽象数据服务层: 将数据加工任务封装成对外提供 API 接口服务形式,统一管理数据流转,隔离下游系统。
- 并行执行与切换: 对于修改较大的任务,可以采取并行执行的方式,将新任务与旧任务同时运行,逐步转移流量,最终停用旧版本
- 回滚机制: 在任务修改后,提供回滚机制,确保修改失败时能够快速恢复到原有状态,防止下游系统遭遇不可预测的影响。
2. 如何解决跨层依赖问题
- 创建 sql 任务时,通过 sql 解析上游依赖的表,判断是否存在跨层依赖问题,有问题的情况下不允许提交保存任务
- 非 sql 任务需要配置任务依赖,配置了依赖的表才会申请给予权限,没有权限的情况下任务会执行失败
3. 随着数据量的增加,如何管理历史数据,兼顾成本优化
- 数据归档与清理策略: 根据数据的生命周期对数据进行归档或清理。将不再频繁访问的数据迁移到低成本的存储(如冷数据存储),以减轻热数据存储的负担。
- 分区与分表管理: 使用 数据分区 和 分表 技术将大数据集拆分成多个小表,根据数据的时间、地域等维度分区存储,减少查询时的扫描量。对历史数据进行单独分区或单独表存储,定期清理不再使用的数据