查看原文
其他

企业如何做好数据仓库命名规范

level 半山里人 2024-05-31
数据仓库在企业中扮演着重要的角色,一个规范化、易于管理的数仓命名规范,对于保持数据仓库的数据开发、管理、使用和维护十分重要。笔者将从数仓命名规范的必要性、命名规范的内容以及命名规范的实施策略进行详细介绍。
一、数仓命名规范的必要性

1、保证数据仓库的管理效率
一个良好的命名规范可以大大提高数据仓库的管理效率,避免出现重复和混淆。

2、方便不同团队之间的协作与交流
不同的团队在数据仓库当中通常负责不同的功能和模块,一个规范的命名方案可以促进开发、维护和业务团队之间的协作与交流。

3、提高数据仓库的开发规范性和可维护性
规范的命名方案可以保证数据仓库的数据开发规范性和可维护性,降低维护成本和风险。

二、数仓命名规范的内容

1、数据分层

数据分层是为了将原始数据转化为有意义的信息,以满足企业的需求。具体包括以下四层:ODS层、DW层、APP层和维表层。

(1)ODS层(数据操作存储层)

ODS层是数据仓库中最接近数据源的一层,主要用于采集、处理和存储来自不同数据源的操作型数据。这一层的数据一般不做过多的清洗和整合。例如,银行的交易记录、网站的访问日志等。

(2)DW层(数据仓库层)

DW层是整个数据仓库的主体,负责存储数据仓库的核心数据。DW层包括DWD、DWM和DWS三层:

  • DWD层(数仓明细层):存储从ODS层中抽取的经过数据清洗和加工后的数据,通常为与业务相关的明细数据。

  • DWM层(数仓中间层):将DWD层数据进行聚合汇总,生成更高层次的数据集合。这层通常包括多个维度,如时间、地域、产品、客户等。

  • DWS层(数仓汇总层):根据用户需求提供多样化的数据服务,如报表、可视化分析等。

(3)app层(数据应用层)

APP层主要提供给数据产品和数据分析使用的数据,如BI系统、数据挖掘等。

(4)统一维表层

维表层包含高基数和低基数维度数据,是数据仓库中常常使用的维度数据表。例如,地域、时间、客户、产品等信息。

2、数据库命名规范

数据库是数据仓库的核心,其命名应该简洁明了、具有代表性,、见名知意,并且需唯一标识数据仓库。例如:

库命名

库描述

数仓层命名

命名备注

ods

数据操作存储层

ods

ods_开头

dwd

数据明细层

dwd

dwd_开头

dwm

数仓中间层

dwm

dwm_开头

dws

数据汇总层

dws

dws_开头

app

数据应用层

app

app_开头

dim

统一维表层

dim

dim_开头

temp

临时数据处理层

temp

temp_开头

 
3、表命名规范

(1)一些通用标准

表命名其实在很大程度上是对元数据描述的一种体现,表名应该能够让用户快速看出表的含义和作用,提升数据仓库的可维护性和易用性,以下是表命名规范的一些通用标准:

  • 采用小写字母和下划线的命名方式,禁止使用特殊字符和空格。

  • 表名应该简洁明了、有意义,并真实反映表所存储的内容和业务领域;表名应该为名词或名词短语,禁止使用动词,避免出现英文单词和汉语拼音混用的局面。

  • 尽量缩短表名,但是不应该过于简略,最好不要超过32个字符。

  • 对于包含多个单词的表名,可以使用下划线"_"进行分隔,例如:order_item。

  • 在数仓中,通常会存在多种类型的表,如事实表、维度表、临时表、中间表等,建议在表名中包含类别前缀,如temp_order,dim_product等,以便对不同表进行分类管理。

  • 避免使用缩写,因为缩写可能会产生歧义或混淆。

  • 数据域、主题域命名统一管理缩略词请统一参考【字典库】。

虽然表命名规范上有了明确的规定,但在实际使用过程中,也需要特别关注业务需求的变化,及时进行调整和优化。

(2)ODS层表命名规范

表名规范:ods_来源类型[业务|系统]_业务表名_装载策略_装载周期表名示例:ods.ods_db_logs_gold_logs_i_d规范说明: - 存储库名:ods - 来源类型:区分不同来源及系统,含结构化、半结构及非结构化数据。 -- 类型分类:DataBase(db)、Http(api)、Rsync Log(rsync)、MQ(topicName)、hive(layerName)。 - 项目编码:参考业务对应的编码对照库,注:一般指业务系统简称编码 - 业务表名:与数据来源系统一致,以避免造成其二义性。有分表则去除分表规则,目标添加source_table字段区分来源表名。 - 装载策略:增量(i)、全量(f)、快照(s)、 拉链(h)、 - 装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
3DWD层表命名规范
表名规范:dwd_一级数据域_二级数据域[_业务过程]_业务描述_装载策略_装载周期表名示例:dwd.dwd_log_app_click_info_i_d规范说明: - 存储库名:dwd - 一级数据域:用户域、内容域、日志域、财务域、互动域、服务域等等 - 二级数据域:移动端、Web端、会员、金币等等,统一定义 - 业务过程:曝光、浏览、点击、注册、登录、注销等等,统一定义 - 业务描述:描述业务内容 - 装载策略:增量(i)、全量(f)、快照(s)、 拉链(h) - 装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
(4)DWS层表命名规范

表名规范:dws_一级数据域_二级数据域_数据粒度_业务描述_统计周期表名示例:dws.dws_log_mbr_event_info_1d规范说明:存储库名:dws一级数据域:用户域、内容域、日志域、财务域、互动域、服务域等等二级数据域:流量、渠道、会员、留存、事件等等数据粒度:描述业务数据粒度业务描述:描述业务内容统计周期:统计实际周期范围,缺省情况下,离线计算应该包括最近一天(_1[h|d|w|m|q|y]),最近N天(_n[h|d|w|m|q|y])和历史截至当天(_t[h|d|w|m|q|y])三个表。小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)。
5APP层表命名规范
表名规范:app_应用类型_业务主题_业务描述_统计周期_装载周期表名示例:app.app_rpt_channel_user_1d_d规范说明:存储库名:app应用类型:固定报表、分析报表、标签系统、用户画像、数据接口业务主题:看板、驾驶仓、ROI、渠道分析、漏斗分析、留存分析、活跃分析等等业务描述:描述业务内容统计周期:统计实际周期范围,缺省情况下,离线计算应该包括最近一天(_1[h|d|w|m|q|y]),最近N天(_n[h|d|w|m|q|y])和历史截至当天(_t[h|d|w|m|q|y])三个表。小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)。装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
6DIM层表命名规范
表名规范:dim_应用类型_业务主题_业务描述_[层级_装载策略_装载周期]表名示例:dim.dim_pub_city_lvl、dim_pub_chl_i_h规范说明: - 存储库名:dim - 应用类型:公共、自定义 - 业务主题:渠道、版本、产品、城市等等 - 业务描述:描述业务内容 - 层级 :层级(lvl) - 装载策略:增量(i)、全量(f)、快照(s)、 拉链(h) - 装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
7TEMP层表命名规范
表名规范:temp_目标表名_((数据日期[_数据小时])|(开始日期_结束日期))表名示例:temp.temp_dwd_log_app_click_info_i_d_20210311(会话表)、temp.temp_username_test_20210311_20210321 (临时表)规范说明: - 存储库名:temp - 目标表名: 会话表:目标表名临时表:业务描述 - 数据日期:ETL跑批日期 、ETL数据处理日期 - 数据小时:ETL跑批小时 、ETL数据处理小时 - 开始日期:临时表有效开始日期 - 结束日期:临时表有效结束日期
8)表命名规范流程示例
通过以下流程图的方式来展示表命名规范流程,其余各层的表命名与此类似:

先判断表的用途,比如是业务数据/日志接入数据、中间表还是业务输出数据,如果是中间表,那么判断该表是否需要分组操作,如果不需要就导入DWD层,若需要就要判断表是否是多个行为表的汇总表。最后加上事业群、部门、业务线、自定义名称和更新频率等信息即可。
4、指标字段命名规范

指标命名规范同样重要,它能够提高数据仓库的可读性和易维护性,方便用户进行数据查询和分析。以下是数仓中指标字段命名规范的一些通用做法:
  • 命名全部采用小写、字母和数字构成,且只能以字母开头,并且尽量避免使用数字;不允许使用除数字、字母、下划线之外的特殊字符。
  • 命名应采用能够准确反映其中文含义的英文单词或英文单词缩写构成,避免出现英文单词和汉语拼音混用的局面,尽量达到见字知意效果。

  • 命名长度尽量控制在32个字符以内,特殊字段除外。

  • 名称的各部分之间以下划线"_"连接。

  • 实体名称作为前缀。

  • 字段属性的名称尽量保留实体的名称作为前缀,比如"channel_id/渠道编号"。

  • 对于数字类型的字段,应该使用合适的精度和小数位数进行定义,并在字段名中加上相应的单位名称,例如 amount_usd、quantity_kg。

  • 对于表中常用字段,如创建时间、更新时间等,建议采用标准的字段名,例如 created_at、updated_at。
5、指标口径规范

指标口径规范是定义和描述指标测量的方式和方法的文档或标准,是为了保证主题域内指标口径一致,无歧义。例如,存款利率的计算方式可能因银行不同而有差异,因此在明确口径规范后才能准确地计算和比较各个银行之间的存款利率。

以下是一些常见的指标口径规范:

  • 定义度量标准:定义每个指标的计算方法和公式,以保证所有人对指标的解释和计算方式达成一致。例如,销售额=销售数量*销售单价。

  • 确定数据源:明确每个指标的数据来源,并对数据的准确性进行验证和验证过程进行说明。例如,销售数量来自订单表,销售单价来自价格表。

  • 设定计算周期:确定每个指标计算的时间点和时间范围,以保证指标的时效性和可比性。例如,月度销售额需要在每月末算出。

  • 选择计算精度:根据业务需求和数据特点,确定指标计算的精度和取舍原则。例如,保留两位小数或者四舍五入取整。

  • 标准化指标名称:使用简洁明了、具有意义的指标名称,并与业务术语相一致,以便于理解和识别。

  • 编写指标说明:编写指标说明文档,详细阐述每个指标的含义、计算方法、数据来源、计算周期等信息,以方便用户查询和理解。
5、索引命名规范

索引是关系型数据库中提高查询性能的重要手段,而索引命名规范则可以方便开发人员对索引进行管理和维护。以下是一些常见的索引命名规范:

  • 使用简洁的名称:索引名称应该简单、易于理解、与索引所涉及的列相关,并且具有描述性,可以从名称中快速获得该索引执行的目的和过程。

  • 加上前缀:在命名索引时,可以通过添加前缀对其进行分类或归类。例如,可以使用“idx_”前缀表示索引,“uniq_”前缀表示唯一索引,“fk_”前缀表示外键等,以便于快速区分和查找。

  • 包含列名和表名:索引名称通常应包含所涉及的列名和表名,以便于开发人员快速识别该索引所属的表和所涉及的列。例如,idx_employee_id。

  • 使用驼峰命名法:推荐使用驼峰命名法来命名索引。例如,idx_employee_id。

  • 避免使用特殊字符和空格:建议尽量避免使用特殊字符和空格,因为这些可能会导致问题,例如对SQL语句的解析产生影响。
6、ETL作业命名规范

ETL(抽取、转换和加载)是将源系统数据转换成规范化的数据仓库数据的重要步骤,其命名应该体现其作用和功能,方便管理和维护。以下是一些常见的ETL作业命名规范:

  • 使用简洁明了、具有意义的名称:ETL作业名称应该简短、具有描述性,可以从名称中快速获得该作业执行的目的和过程。

  • 加上前缀:在命名ETL作业时,可以通过添加前缀对其进行分类或归类。例如,可以使用“load_”前缀表示加载作业,“extract_”前缀表示抽取作业,“transform_”前缀表示转换作业等,以便于快速区分和查找。

  • 按层次结构命名:数据仓库通常采用星型或雪花型模式来组织数据。建议按照模式的层次结构来对ETL作业进行命名,以便于理解和识别。

  • 加上时间戳:为了避免出现不同版本的作业混淆或者错误覆盖,可以在作业名称末尾加上时间戳。这样可以追踪每个作业的时间和版本,方便问题追溯和审计。

  • 避免使用特殊字符和空格:命名ETL作业时应尽量避免使用特殊字符和空格,因为这些可能会导致一些问题,例如文件系统不支持特殊字符、SQL语句错误等。
三、数仓命名规范的实施策略

1、制定数仓命名规范
企业可以根据自身的需求和实际情况定义符合自身特点的命名规范,建立上述基本原则和方法。

2、培训和推广
一旦命名规范确定,需要对所有参与数据仓库建设和维护的人员进行培训和推广,确保大家都能遵守命名规范,做出高效有效的数据管理工作。

3、管理和审查
企业应当有专门的管理机构或者人员来负责命名规范的审查、管理和更新,并定期对命名规范进行修改、完善和优化,随时满足企业的需求。
四、写在最后

数仓命名规范能够提高数据仓库的管理效率和数据开发效率,方便不同团队之间的协作与交流,同时也能提高数据仓库的可维护性。企业需要结合实际情况制定合适的命名规范,并进行实施,让其成为数据仓库建设中不可或缺的一部分。

扩展阅读:

讲述企业架构与业务架构、应用架构、数据架构、技术架构之间的关系

企业开展数据治理需要做哪些工作

数字化时代下,如何提升数据资产质量

企业数据治理之做好元数据管理

企业数据治理之如何开展数据分类

如何评估企业数据治理成果

企业数据治理之主数据管理


点击左下角“阅读原文”获取更多文章,如果您想及时收到推送,麻烦右下角点个在看或者把本号置顶

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存