数据质量管理我把它总结成两个方面:数据规范和数据稽核

数据规范

基本命名规范

  • 数仓分层模型 开头,如:dw_ 表示数据仓库层,ods_ 表示操作数据存储层,dm_ 表示数据集市层。
  • 后接 业务线,如:c_ 代表 C 端业务线,b_ 代表 B 端业务线。
  • 再后是 业务域,如:hr 代表人力资源相关,sales 代表销售相关,finance 代表财务相关。
  • 最后是 具体业务实体表,如:interview 代表面试情况,order 代表订单数据,payment 代表支付数据。
  • 举例:dw_c_hr_interview,此表代表 dw 层的 C 端业务线、人力资源相关业务中的面试情况。

表使用规范

  • 表层级规范:不能跨层使用表。例如,app 层的表不能直接引用底层 ods 表的数据,应该引用加工过后的 dwdm 层数据。
  • 表复用与合理设计:尽可能复用表,避免重复计算和数据清洗。这个要求你在数据建模时,需要合理设计表结构、字段扩展,并确保表间关联清晰,避免冗余数据。
  • 数据集成与清洗规范:对于源数据要做好清洗和格式统一,确保在数据层的不同表中,数据源格式一致,并避免手动干预的错误。
  • 历史数据管理:在设计数据模型时,需要考虑数据的历史记录管理。例如使用拉链表(History Table)来保存数据的历史版本。

数据安全规范

  • 权限管理
    • 在查询或写入表数据前,必须校验权限,确保执行者有相关表的访问权限。定时任务会定期检查权限,确保任务调度执行前权限正确无误。
    • 强调 最小权限原则,确保用户仅访问其完成工作所需的最小数据集。
  • 修改审批
    • 表结构的修改需要经过严格审批流程,确保修改不会影响到下游的数据处理任务。如果修改影响下游,则需要提前通知并协调下游团队做好准备。
    • 变更时需要提供详细的 变更影响分析,包括对现有数据、任务调度的潜在影响评估。
  • 敏感数据处理
    • 针对包含个人信息和敏感数据的表,必须实施加密和脱敏措施。例如自动检测和处理个人身份信息(PII)字段,并对这些信息进行加密或脱敏处理。
    • 定期审计敏感数据访问日志,确保敏感数据的合规性和安全性。
  • 数据操作审计
    • 所有数据操作(如数据的导入、导出、查询等)都必须进行完整的审计日志管理。审计日志需要记录 操作人员、操作时间、操作内容 等信息,确保可追溯性。
    • 定期进行审计日志分析,识别潜在的违规操作和安全漏洞。

数据版本控制与回滚机制

  • 版本控制
    • 所有表和数据处理任务应实现 版本控制。表结构或数据处理任务修改时,需要记录版本号,并确保版本之间的兼容性。
    • 对于数据清洗或转换的步骤,确保记录清晰的版本信息,以便需要时进行回滚。
  • 回滚机制
    • 提供回滚机制,确保在数据处理错误时能够恢复到上一个稳定状态。特别是在进行数据更新时,避免因错误更新造成数据丢失或损坏。

数据稽核

  1. 梳理稽核规则,并在稽核系统中支持用户自助选择配置一些稽核规则,并且支持自定义稽核规则,比如允许用户根据业务需求上传自定义规则(如 SQL 查询或正则表达式)并应用于稽核任务
  2. 任务创建之后会自动配置稽核任务,涵盖一些基本规则,如 NULL 值检查、数据类型检查、唯一性检查等。同时做好任务与稽核任务关联,确保可以互相关联查询展示
  3. 任务执行完成后,稽核系统订阅任务完成消息,接收到消息后提交稽核任务,只有稽核通过后任务才能视为任务成功
  4. 任务前置稽核验证:在任务启动之前,增加一个检查机制,确保任务所依赖的数据已经通过了预定的稽核。如果稽核失败,系统会通过 通知机制,如邮件、Slack、短信等发送告警, 提醒相关人员修复数据问题
  5. 稽核日志:每次稽核执行时,记录详细的稽核日志,包括执行的稽核规则、处理的记录数、每个规则的成功与失败情况等

一些实际场景下的问题

1. 修改任务或者表结构会影响下游,虽然有时候通知到下游了,但是也可能出现下游业务复杂度高,改起来很难的情况。 解决方案:

  • 抽象数据服务层: 将数据加工任务封装成对外提供 API 接口服务形式,统一管理数据流转,隔离下游系统。
  • 并行执行与切换: 对于修改较大的任务,可以采取并行执行的方式,将新任务与旧任务同时运行,逐步转移流量,最终停用旧版本
  • 回滚机制: 在任务修改后,提供回滚机制,确保修改失败时能够快速恢复到原有状态,防止下游系统遭遇不可预测的影响。

2. 如何解决跨层依赖问题

  • 创建 sql 任务时,通过 sql 解析上游依赖的表,判断是否存在跨层依赖问题,有问题的情况下不允许提交保存任务
  • 非 sql 任务需要配置任务依赖,配置了依赖的表才会申请给予权限,没有权限的情况下任务会执行失败

3. 随着数据量的增加,如何管理历史数据,兼顾成本优化

  • 数据归档与清理策略: 根据数据的生命周期对数据进行归档或清理。将不再频繁访问的数据迁移到低成本的存储(如冷数据存储),以减轻热数据存储的负担。
  • 分区与分表管理: 使用 数据分区 和 分表 技术将大数据集拆分成多个小表,根据数据的时间、地域等维度分区存储,减少查询时的扫描量。对历史数据进行单独分区或单独表存储,定期清理不再使用的数据

参考