大数据团队规范准则
2021-07-08 14:25:30 1 举报
AI智能生成
大数据团队规范准则,包括管理理念,开发规范,数据设计规范,报表开发规范,常用指标梳理等
作者其他创作
大纲/内容
不要怕麻烦<br>
可以慢,但不能漏
不急不噪一步一步最省事<br>
目的:使人人都熟悉业务
公共规范
git使用规范
常用命令<br>
git add<br>
git commit -m ""<br>
git pull<br>
git push<br>
git branch<br>
git status<br>
git diff<br>
git reset<br>
git tag<br>
git checkout<br>
常用分支<br>
master
dev
release<br>
使用原则<br>
master永远是稳定的上线代码分支<br>
dev是能稳定运行的,包含所有最新功能的代码分支
每人开发功能时都要从dev,checkout一份分支,并对这个新分支根据tb的story命名,开发完毕且验证无误后合并至dev<br>
当整个项目开发完毕后从dev合并至release进行整体验证<br>
如果验证有问题,责任人再从dev分支checkout下代码修复
当release验证完毕后合并至master分支
此时基于master分支打tag标记相关版本然后依据此tag上线
打点规范
埋点流程<br>
需求确认
埋点规划
埋点确认
拉会确认,ios,android,h5,产品
前端埋点及自测
通过中台, 每个点的状态<br>
自测通过<br>
大数据验证
问题点位提醒各端修正
自动备份
字段拆解
page页面的命名<br>
英文以下划线_分割<br>
尽量短,但不要简写缩写
如果是活动要以act_开头<br>
event页面的命名
英文以下划线_分割
尽量短,但不要简写缩写
通用按钮以button_click命名<br>
APP版本打点param公共参数
uid
tz
app_version
活动打点param公共参数
code
platform
cms_id
activity_id
规划点的时间,2081221_活动英文<br>
uid
page_share
tz
resource
param里的type类型取值书写规则: key1=value1;key2=value2<br>
数据流向
子主题
敏捷开发<br>
什么是完成
完成
是指可上线状态。编码完成,测试完成都不能算是完成,只有经过验收,达到可上线状态才算完成
谁来整理任务
自己(包括团队)的任务自己来整理,根据工作进展改变状态,不是靠leader,如果自己搞不定,主动找人帮忙。
关于说“是”
说“是”意味着承诺,口头上说,心里认真,付诸行动。言必行,行必果。
承诺意味着按时交付高质量的产品,不能打任何折扣,不能省略任何工作环节,比如:Code Review等。
如果开发过程中,有特殊情况使得承诺不能兑现,尽快通知到相关同学,越快越好。
我们的底线
遵守编码规范
做Code Review
做单元测试(视项目紧急程度决定是否执行)
做接口测试
做压力测试
做模块测试
做集成测试(测试环境、gamma环境、生产环境)
做回归测试
数据验证
产品验收
Sprint流程
Sprint流程为:待处理—开发中—模块测试—集成测试—待发布—云测—灰度测试—完成。“云测”和“灰度测试”是可选项,根据实际情况来定。
各阶段定义:
待处理:还没开发的story。
开发中:正在开发的story
模块测试: 模块测试是由开发工程师交付给测试工程师后进行,模块测试之前,开发工程师要完成自测,要将代码从feature分支经过Code Review,进入dev分支。模块测试由测试工程师进行。
集成测试:完成“模块测试”(针对Story或任务的测试),等待“集成测试”的Story。
待发布:完成接口测试、性能测试,测试环境和gamma环境测试的测试,等待上线的story。
云测:云测在生产环境进行,包括:兼容测试、探索测试,云测不是必选,每个版本根据实际情况可选择进行那种测试。
灰度测试:灰度发布测试。
完成:完成上线工作。
Story/任务
每个story是完整的最小可独立开发、测试、运行的单元
Product Backlog(需求池)里大的story(epic),在sprint开发时可以拆分成几个小的story。如:凯叔任务集成到APP,是一个大的story(epic), 在Sprint开发时,分解成3个story
StoryID:Story都有自己的ID,如:“APP_60”
Branch:每个Story 都有自己的branch。
Git:git每次代码的提交时,comments 描述要以StoryID为前缀,如:“APP_60:xxx”,这样从git里,可以清晰的看到每次提交对应的是哪个story。
测试用例:Story的测试用例,要增加StoryID的标记,根据测试用例能查到本用例是关于哪个Story的。
Bug:Jira提交bug时,Story相关的,标题要以StoryID为前缀,如:“APP_60:xxx”。
Story子任务:
Story的功能,各端以子任务的方式列在story里,主要有三种:开发,测试,数据,验收。
开发:各端为独立的子任务,“Android”,“iOS”,“H5”,“后端”单独列自己的子任务,子 任 务 名 称 以 各 端 的 简 写+“:”为前缀,比如:“Android:”,“ 后 端 :”。
测试:测试用例编写,功能测试(测试环境、gamma环境、生产环境的测试)、接口测试、压力测试,测试子任务名称以“测试:”为前缀。
数据:对于数据需求的验证,对数据结构(表结构)变更的确认。
验收:产品参与,要review测试用例执行情况。
执行人,开始时间& 结束时间
对进行中的每个Story、任务、子任务都需要填写执行人,“开始时间”和“结束时间”。Story的结束时间,完成所有子任务的时间。
开发子任务
技术评审
每个开发子任务需要经过技术评审,技术评审需要团队Manager、架构师参加,完成后由manager或架构师进行勾选完成。技术评审根据实际情况,可以在迭代开发之前统一做,也可以每个story单独来做。技术评审阶段,要对工作量进行评估。
单元测试
Code Review
未经过Code Review的代码不能进入dev分支,dev分支为某一次版本迭代的分支,与dev分支对应的是story分支,或feature分支。
故事点(StoryPoints)
工作量估算:敏捷估算不是以时间为单位,而是以故事点为单位,是个数字,没有单位。现阶段:1个故事点=团队1天的工作量来定义。
计算:StoryPoints:Story Points的计算包括Story内从任务开始到完成“模块测试”所需要的点数。
迭代:每个迭代所有story的story point加起来就是每个迭代的总故事点。
故事点写在Teambition的任务卡片上的“Story Points”
谁来写?Story的团队成员一起商量来写,Master统筹
团队速度:固定时间完成的故事点数
每日站会
为什么要开站立会
个体交互重于过程和工具
面对面的沟通:微信邮件不如当面沟通。
过程透明:了解真实情况,然后进行检查和调整。
三个问题
我完成了什么?
我打算做什么?
我遇到的障碍或者困难是什么?如果没有障碍可以说改进和提升的方法。
规则
站着开:精力集中,不懒散。
时间不超过15分钟
同一时间,同一地点。
只管挖坑不管埋:master记录问题,会后组织相关同学专题讨论解决。
不是汇报工作:面向团队成员发言。
回顾会
团队在迭代结束后,开回顾会。
总结经验教训,不断完善提高
环境定义
开发dev环境:用来进行开发、自测、联调,完成后交付给测试。
测试test环境:测试同学用来做模块测试和集成测试,
Gamma环境:上线前的最终验证,不做测试,由运维操作。
生产环境: 线上运行
谁来负责质量
质量是由开发工程师来负责的,开发工程师是第一责任人,不是测试工程师,也不是运维,开发工程师可以调动/协调测试、运维工程师等资源来保证代码质量
开发工程师要加强“测试用例review”环节,在测试工程师的协助下,保证测试用例的覆盖率。
工程师为自己代码质量负责,开发小组的master为本小组的任务质量负责。
开发工程师要加强自测,在交付测试之前,要按照测试用例完成自测,不能等着测试工程师提bug,再解bug,开发工程师最了解代码,要站在排除bug的第一线。
所有的开发任务需要在Teambition里创建Story或任务
所有开发任务需要有story,有了story,测试才会跟进,测试用例才会覆盖到,否则会被漏测。
不能在一个story里修改和story不相干的代码,因为测试用例有可能覆盖不到,会导致漏测的情况。如果需要修改其他模块的代码,需要另建story。
分析常用指标<br>
PV
UV
DAU
MAU
留存<br>
转化率
ROI
ARPU
ARPPU
渠道评估方法
预测方法和模型<br>
用户流失率
用户生命周期
用户使用时长
付费计算方法
新用户定义
算法与挖掘
报表开发
仪表盘开发规范
仪表盘每个指标都要有备注内容
制作背景,统计指标的目的,比如谁提的需求
制作人
制作时间<br>
适用场景,比如指标只适用于活跃用户大于>30天的<br>
各个指标的算子说明,用户数: count(distinct uid)<br>
答疑:即使描述清楚了也有人有各种疑问,把问题记录在此。<br>
工作表
命名
表性质_实际业务需求_开发者
表性质
长期需求:ks
临时需求:tmp
默认两周,两周后删除
测试表:test
实际业务需求: 业务_限制条件_指标
业务
播放
留存
会员<br>
活跃
转化
地域<br>
画像<br>
限制条件
最近N天活跃
仅会员<br>
付费在N元内<br>
参与过某活动<br>
打开过某页面
购买过某商品
指标
PV
UV
最大值
最小值
平均值
付费金额
N日留存
周留存<br>
月留存
日活
周活<br>
月活
明细
用户ID, 故事ID<br>
完听率
复听率
开发者, 开发同事:xxx(首字母) 如: zyz, lmz
工作表制作流程<br>
需求确认
报表制作
报表验证
需求方验证数据
发布仪表盘<br>
内容增加备注<br>
需求提出人,需求目的,需求内容
制作人,制作日期
修改时标记,修改日期,修改人,修改内容
高级设置
更新设置原则
不建议设置自动更新<br>
老板看的表或者新功能和活动__重要程度: 高__时间3~5点
常规功能点__重要程度: 中__时间7点~13点
过时的活动或者临时表或者关注度没那么高的表__重要程度: 低__一般设置在14点后,或者暂停更新
关联策略
依赖更新的表如果有多个尽量设置成一个
增加知识<br>
数据开发
数据开发流程
需求调研<br>
需求评审<br>
接口文档<br>
设计表结构
程序开发
java开发规范
数据仓库<br>
上线流程
sql文件提交git<br>
sql文件导入中台
sql文件发布到oss
配置工作流<br>
验证sql脚本是否正常
仓库层次划分
SRC (Source):数据缓冲层;原始数据直接同步过来;保留的是所有的数据,理论上粒度和源系统保持一致,同时不丢数据,业务数据库基本上是直接同步过来,日志数据主要从OSS中取出阿里日志服务归档的打点数据。这一层数据保证我们在需要的时候能找到任何原始数据,是仓库数据完整性的一个保证。
ODS (Operational Data Store):数据明细层;将SRC的数据经过规范化、标准化、解析后,存放到ODS表中
DW (Data Warehouse):数据仓库层;将ODS层表,根据业务主题梳理建设,记录细粒度的数据,如打点日志跨表、订单宽表等。
MID:数据关联层,根据分析主题梳理建设,记录细粒度数据,如新增用户的订单数据。
APP:数据应用层,这一层面向具体的业务分析需求,主要为报表展示和数据提取,提供数据支持。
DIM (Dimension):维度表,记录维度信息,参照参考内容的术语维表。
TMP (Temporary):临时层,用来临时使用的表。
设计原则<br>
公共处理逻辑和模型下沉原则:越是底层公用的处理逻辑更应该在数据调度依赖的底层实现。
成本与性能平衡:适当的数据冗余换取查询和刷新性能。
数据可回滚:处理逻辑不变,在不同时间运行数据结果确定不变。
一致性:相同的字段在不同表字段名相同,尤其是重要字段例如应用类型。
命名:表命名规范需清晰、一致,表名需易于下游理解和使用。
仓库命名规范
分区字段:p_date
分区表的表名必须要有特殊字符来进行标识
按天分区:_d
按周分区:_w
按月分区:_m
按季分区:_q
按半年分区:_hy
按年分区:_y
按小时分区:_h
非分区的关系数据库表,在SRC和ODS层表中 统一增加一个表更新字段(tab_update_time),用于标识表的更新时间
表名命名规范
命名格式
APP层:app_主题域_维度1_[维度2]...[维度n]..._调度周期,维度比较多的取主要和常用维度即可,不超过3个。
MID层:mid_主体主题域_XX_调度周期,例如以订单表关联其它表则主体主题域为订单order。
DW层(仓库层):dw_主题域_XX_调度周期,例如以订单表关联其它表则主体主题域为订单order。
ODS层(明细层):ods_来源库名_表名;若表名中已包含来源库信息,可不加;若来源库名较长,可缩写;因在不同数据库中,存在表名相同的表,需要用来源库名区分。
SRC层(缓冲层):src_来源库类型_来源库名_表名;若表名中已包含来源库信息,可不加;来源库类型m表示mysql,o表示oracle、mg表示mongodb、kf表示kafka、mq代表mq;若来源库名较长,可缩写
拼写规范:只能使用小写英文单词及其缩写、下划线('_')、和阿拉伯数字,字段只能英文字母开头。
分隔规范:采用下划线命名法,所有的独立单词都必须要用下划线('_')分隔。
表意要求:表名应该尽量能望文生义,反映表本身的含义,禁止使用类似于a,b,c这样无意义的表名。
字段命名规范
字段名组织:字段命名尽量与依赖的底表的相应字段相同,不要创造新的列名。
长度规范:建议整个字段的字符长度不超过64;每个单词长度不超过10个字符。
拼写规范:只能使用小写英文单词及其缩写、下划线('_')、和阿拉伯数字,尽量不用阿拉伯数字,不能使用拼音或者拼音的简写。
分隔规范:采用下划线命名法,所有的独立单词都必须要用下划线('_')分隔。
冲突限制:不能使用与Hive或者Mysql关键字、函数名相同的命名,不能使用'_'和数字开头。
表意要求:字段名应该尽量能望文生义,反映字段本身的含义,禁止使用类似于a,b,c这样无意义的字段名,也不推荐使用类似'id'这样短而泛的命名。
区分要求:同一个表内有性质比较相近的字段时,需要明确区别,比如下单时间和支付时间,不能使用time1和time2这样。
Wiki维护规范
增加新表、修改表后,及时更新Wiki文档,包括表名列表和建表语句等。
仓库表和抽数脚本维护规范
仅仓库人员可以创建、修改SRC、ODS、KSDW三层的表和抽数脚本,其余人员可以创建、修改MID、APP、DIM、TMP四层的表和抽数脚本。
修改仓库表结构和抽数脚本前,需要先通知组内人员,包括ODS层、DW层、MID层;
抽数脚本开发规范
抽数脚本(.sql文件)要加上注释:创建人、创建时间、表名、表描述、修改时间、修改内容,需要在每个抽数脚本上方添加
建表规范
底层用外部表,上层用内部表。
分隔符
COLLECTION _,<br>
FIELDS _\001
MAP_:
LINES_\n
仓库开发
常用的窗口函数<br>
sql转化为mapreduce、spark过程
处理数据倾斜的基本方式<br>
udf、udaf、udtf的继承类分别是<br>
0 条评论
下一页
为你推荐
查看更多