数据规范很重要,尤其对那些下游链路使用到的主题表。规范主要包含:
1、字段类型最小化
什么样的数据使用什么样的类型存储,这一点看似细节,其实很重要。字段类型是字段最重要属性,是除字段名称外,最能提现字段含义。在懒得写 comment 的前提下,字段类型就显得尤为重要。一些做数据的新手,接数时看着上游字段名,稀里糊涂就定义的字段类型,或者和上游类型保持一致(上游也不一定规范),这都是不负责任的做法。接数前,要对数据有个大概的了解,字段类型就是最重要的一环。
比如:click 使用 double 类型,其他使用者就会疑惑,点击难道还有小数位?而且下游如果将 click 定义为 bigint 还需要使用 ROUND()函数转型。
MySQL多使用 decimal(20,4) 来规定数据长度与小数位,或者 double(20,4)。数字也要根据范围定义为合理的 tinyint、int、bigint 等等
2、过滤无效数据行
根据维度进行GROUP BY 以合并指标,这已经是不需要说的数据建设规范。因为从上游接入的字段减少时,不做GROUP BY 合并指标,则会产生很多维度相同的行(指标指报表中可求和的列,维度指不可求和的列)。除了上述减少数据量的办法,还有一种往往被忽视,就是过滤无效数据。这种过滤并不改变口径,而是过滤所有指标都为 0 的空行。或者其他清洗无效的数据。
另外,数据库范式,当然最好遵守。不过,像笔者所从事的数据报表,很难做到第三范式,即不存在数据的局部依赖。比如:用户信息在各个链路中会被多次重复使用,这放在链路建设时详解。
网友评论