Vol.14 说说我的数据仓库建设"最佳实践"

上周粗浅地聊了聊我对一个成熟数据仓库的设想,都是空谈理论,今天想记录一下一些可以实操的东西。同事经常提醒我,平时我时候容易抓不住重点,后续写东西尽量简介,能 50 个字说明白的东西,就不用 100 字。

开发规范

  1. 统一开发脚本,离线任务建议通过 sh 脚本封装提交,将公共参数跟执行函数封装好,在脚本开头统一 source 环境变量,并且脚本分段,比如分成:环境参数变量、SQL内容、执行提交、结果通知等等。公共参数比如日期、脚本路径、 jar 包路径等,封装函数比如 spark sumbit 提交命令、dataX 的 提交命令等,简而言之各个软件的命令。特别说明的是需要定义一个全程使用的任务成功变量,方便随时监控脚本执行情况。
  2. 数仓脚本名称、表名等有一套统一的规范,建议不同数仓分层放在不同的库,同一个指标使用同样的名称,不仅仅是字段名,也包括注释。
  3. 规范注释,脚本注释包括:脚本用途、修改记录等,SQL 逻辑当中也应该写清各个表的用途,特别的过滤条件等等,SQL 的换行也需要规范,大写也需要规范。
  4. 如果可以,统一查询平台、代码编辑器,个人推荐 VScode,将代码规范做成代码片段,方便管理,也支持开发插件。

埋点规范

  1. 统一埋点上报命名方式,建议加密埋点,通过码值跟代码映射,又埋点开发的同学维护字典表。
  2. 埋点应该开发自动化埋点上报,命名也可以通过系统自动化命名,埋点应该宁可多报不能少报。
  3. 埋点提供实时查询入口,方便实时校验。

ETL 流程

  1. 数据同步流程可视化,ETL 流程规范统一,应该可以通过表名能定位到 ETL 入口。
  2. 调度管理不同的时间隔离,不同时间段拉起的任务隔离,比如业务数据、报表数据、营销投放标签数据等单独隔离到一个时间段 DAG,单独拉起执行,模型算法、业务分析、特征开发等对时间精准没有那么高的任务单独在一个 DAG,方便运维管理。
  3. 离线任务跟实时任务分开管理

数据监控

  1. 脚本任务通过任务执行返回参数判断任务执行情况,同时也必须支持邮箱、电话、短信等通知
  2. 数仓分层支持简单的可以通过查询校验数据条目数、比例变化等监控,模型特征表使用 PSI 监控
  3. 模型算法链路单独管理,模型迭代更新监控,这样才能及时管理下线不再使用的模型链路
  4. 重要的报表跟标签,比如设计日报、营销投放等任务,应该在任务各个环节做好监控,比如启动时间、完成时间、数量级别等等,同时需要留出处理的时间。

数据全部入仓

  1. 埋点规范、埋点码值字典等等全部录入数据仓库,做成专门维度表
  2. 数据字典,数仓分层表的说明也建议全部入仓,做成维度表

Vol.14 说说我的数据仓库建设"最佳实践"
https://jface001.github.io/2023/03/12/vol14-说说我对数据仓库建设最佳实践/
作者
惊羽
发布于
2023年3月12日
许可协议