学习计划

85 阅读7分钟

数据治理涵盖采集到输出报告的整个流程,是实战经验,数据质量评价标准,数据治理的目的是使用规范的方式减少埋坑,让后继者少踩坑。数据治理的核心是要将规范、组织和流程要落地形成文档,而且要清楚明了、能让人看懂认同,这样才方便一起去做。高大上不能落地,或者太抽象、难理解的东西也很推行。此外也要讲清楚这套东西落地后能给各方带来什么样的价值,可通过宣讲培训等方式去普及,相干方才有动力去做这件事。

概论

数据管理概论,结合具体的业务实际来讲

元数据

元数据管理是整个数据仓库中很关键的一环,尤其是埋点管理和血缘关系的获取(牛逼的算法)。数据可分为数据和元数据,其中数据就是一条条的记录,而元数据是描述数据的数据。可以分为以下三类(此处参考:数据资产管理白皮书3.0)。

元数据分类:

  • 业务元数据

    业务数据、指标定义、统计口径等

  • 技术元数据

    对象和数据结构的定义(若有抽象数据)、数据计算过程、调度依赖等

  • 管理元数据

    主要包括人员、权限职责和管理流程

元数据管理的主要内容:

  • 上游是什么
  • 下游是什么
  • 历史长什么样子
  • 是怎样定义的
  • 父节点是谁
  • 子节点是谁

元数据管理的职责:

  • 数据采集

    • 数据实体(系统、库、表、字段、负责人、数据量的描述)
    • 数据实体加工处理过程中的逻辑
  • 数据展示

    • 将采集到的元数据分类存储之后,提供分类检索和展示功能
    • 展示数据实体间的组合、流转关系
  • 数据应用

    • 主要是数据字典和数据血缘图

埋点管理

元数据管理的基础的基础是埋点管理,因为埋点数据是最原始的上报的,要求埋点管理详细记录每个埋点和开始和结束时间(若下线)、属性键的更新、属性值的增删改情况(严格杜绝不同的场景用同样的属性值),最重要的是要详细标注事件的上报时机(尤其是曝光事件的上报时机)。

埋点管理可以细分为元素管理、事件管理和上报管理,不管哪种管理方式一定要做到做到可追溯,可在此基础追溯版本和修改历史。比如以下场景:

  • 某个元素(页面、控件)是什么时候(版本)出现的,什么时候(版本)下线的
  • 某个事件(属性)的增删改时间和版本
  • 基于元素和事件的上报逻辑是否调整过等,调整的时间和版本信息是什么
元素管理

元素管理主要指页面、控件的处理,主要体现在界面上的变动,对用户是显性可见的

事件管理

事件管理主要处理事件的增减、事件属性的增减和修改;

上报管理

上报管理处理的是上报时机(实时或延时)、上报环境(2/3/4g,wifi等),以及其它自定义的上报策略(路径上报、独立上报还是心跳上报等)

生命周期

生命周期管理主要是指存储治理,是在数据从生产、使用、归档和删除整个生命周期进行有效的管理。

归档和备份的目的主要是为了提高数据安全和数据操作性能,而配置的备份和恢复是为了规避迁移问题。即使在项目初期,存储也不该野蛮的增长,提前做好存储的规划布局,后面会受益良多。

归档销毁

归档的本质是为了压缩数据,或者减少存储、或者提高查询性能。一是要做好归档的策略,此外良好的数据仓库体系结构也能很大程度上减少数据冗余,减轻归档的压力。

仓库数据

要对数仓数据有整体的概况,包含以下几点:

  • 数仓表的访问次数(从job的角度统计)
  • 数仓表的最后更新时间
  • 数仓表的存储状况和数据量增长状况等的数据盘点,增量预估

治理措施:

  • ods/odl、dw/bdl、dm/sdl、da层的数据处理问题(这个地方几乎是空白的,全靠开发人与自身的素质)
  • mid中间表的清理
  • 临时表的清理
  • 很久不使用的表的清理

拉链表数据的清理策略(待确定):

  • 快照型的拉链表,可以选择保留部分,比如每个月最后一天的。
  • 历史链的拉链表,只保留最新的即可。
文件数据
  • HIVE计算落地中间导出的文件数据的清理

中间导出文件的命名规范化,脚本名_${date}.data,最后再删除的时候可以用正则匹配的方式删除

  • 同步过来的其它文件源数据
报表数据

牵涉到报表的mysql数据的存储问题,当数据量大的时候如何实现高效查询,处理冷热数据。此外还牵涉到报表数据的存储时限问题,核心数据永久保留,像分组数据、自定义查询数据等的保留时限并未做规定,应该是从日常的使用中总结出滚动删除的日期。此外报表数据的上下线也自动通知到相关的人员,这就要求在配置报表之初要配置相应的人员。

执行备份

在上一篇中介绍了数据的归档和销毁的管理,此外对数据的加工处理过程也是需要及时备份。这个处理过程牵涉到以下方面:

  • 结构(hive表、mysql表、kylin模型和Cube等)
  • 依赖关系(调度计划)
  • 代码(统计代码)
  • 运行环境(代码的执行环境)

备份的本质是一则是为了保证数据安全,主要体现在数据出问题的时候可以及时恢复、避免数据丢失等灾难;二则是为了提高数据吞吐性能,比如做主从备份、读写分离等。

任何单点的结构都是不可靠的。可能出问题的,最后一定会出现问题,要做好事前的预防,在可操作的基础上尽量减少问题出现的可能性,同时也要做好热备,一旦出现问题,要能快速的切换。

表结构

备份表的结构,有以下两种方式:

  • 定期从库中导出表的结构(mysql表结构容易导出,但是hive的表结构好像不能一次性直接导出)
  • 在建立数据仓库的同事维护mysql和hive两层表结构

在表结构存在之后,在脚本中操作相关的表时候,有以下两种方式:

  • 先判断表是否存在,如果不存在,则创建对应的表然后操作,这个功能可以做成一个全局控制的,来判断是否进行相应的检查
  • 表结构的定义单独存储,然后整体执行相关,这个可以做成自动化的程序。
运行环境

运行环境主要包括机器环境和计算脚本,机器环境包括以下:

  • HIVE的客户端(此处主要牵涉到授权)
  • MySQL服务器(版本、配置、函数和存储过程等),若牵涉到内存表则更加麻烦
  • Python等其它依赖程序,因为牵涉到流处理,牵涉到Python的版本和相应的依赖库
  • 计算脚本中的环境变量和全局设置依赖等

计算脚本则包括以下:

  • 全局配置global_var.sh和global_fun.sh的位置等(此处牵涉到环境变量)
  • 全局配置中指向的环境(此处主要指MySQL结果的存储机器及账号授权情况)

此处就体现出了脚本鲁壮性的作用了。