本文来源:http://www.bo884.com/www_ishowx_com/申博太阳城亚洲微信支付充值, 项目夭折,也给陈天桥带来了数亿美元的损失。活动时间:2016年11月29日活动地址:点击试试手气即可获得随机折扣,最低可达一折哦!活动介绍:1.点击进入活动界面,每位玩家在神秘商店都有1次抽折扣购买道具的机会。当前位置:正文《最终幻想15》图文全流程攻略战斗系统解析+武器研究+水晶收集+BOSS战细节【游侠攻略组】2016-11-2913:36:18 角色扮演RPG 人气值:第1页:CHAPTER01.启程CHAPTER01.启程CHAPTER01.启程:为生活费烦恼的王子CHAPTER01.启程:协寻奖金猎人CHAPTER01.启程:血腥双角兽CHAPTER01.启程:首次搭车旅行CHAPTER01.启程:首次搭车旅行CHAPTER01.启程:秘密的代价CHAPTER01.启程:秘密的代价CHAPTER01.启程:令人忧心的消息CHAPTER02.再出发:父亲的遗言CHAPTER02.再出发:父亲的遗言CHAPTER02.再出发:历代诸王之力CHAPTER02.再出发:历代诸王之力CHAPTER02.再出发:宣战告示CHAPTER02.再出发:宣战告示BOSS战洛基CHAPTER03.辽阔的世界陆行鸟任务CHAPTER03.辽阔的世界陆行鸟任务CHAPTER03.辽阔的世界二人的散步CHAPTER03.辽阔的世界瀑布洞窟CHAPTER03.辽阔的世界瀑布洞窟CHAPTER04.神话再现前往卡帝斯的圆盘CHAPTER04.神话再现泰坦巨神的力量CHAPTER04.神话再现泰坦巨神的力量CHAPTER05.乌云雷神的启示CHAPTER05.乌云雷神的启示CHAPTER05.乌云夺回雷格里亚CHAPTER05.乌云夺回雷格里亚CHAPTER05.乌云夺回雷格里亚CHAPTER06.奋起CHAPTER06.奋起CHAPTER06.奋起CHAPTER06.奋起格拉迪欧兰斯离队CHAPTER07.三人行CHAPTER07.三人行CHAPTER08.出航发电厂危机CHAPTER08.出航前往欧尔提谢CHAPTER09.各自的使命首相的来访CHAPTER09.各自的使命首相的来访CHAPTER09.各自的使命博弈CHAPTER09.各自的使命露娜的觉悟CHAPTER09.各自的使命露娜的觉悟CHAPTER09.各自的使命水神CHAPTER10.为王者应如是前往矿山CHAPTER10.为王者应如是前往矿山CHAPTER10.为王者应如是伊格尼斯的坚持CHAPTER11.圈套CHAPTER11.圈套列车防卫战CHAPTER12.危在旦夕的世界CHAPTER12.危在旦夕的世界CHAPTER13.夺回进入要塞CHAPTER13.夺回进入要塞CHAPTER13.夺回进入要塞CHAPTER13.夺回进入要塞CHAPTER13.夺回进入要塞CHAPTER13.夺回再集合CHAPTER13.夺回使骸瑞布斯CHAPTER13.夺回王的宿命CHAPTER14.返乡锤头鲨再聚首CHAPTER14.返乡火神伊弗利特CHAPTER14.返乡火神伊弗利特CHAPTER14.返乡火神伊弗利特CHAPTER14.返乡真实之王与虚假之王CHAPTER14.返乡真实之王与虚假之王CHAPTER14.返乡王的牺牲 【CHAPTER01.启程】 主角诺克提斯·路希斯·切拉姆,为了出席在邻国举办的自身的婚礼,而准备与三位好友驾着父亲的爱车雷格里亚启程。 通知自2017年5月1日起施行。
这样平均水平的玩家会发现他们更难维持疯入膏肓效果,顶级玩家和普通玩家的差距可能会更大。 其次,品牌效应间接影响游戏用户量,但不等于游戏用户量。魅族:你等等在上我,我给你要钱呢!高通:好...来自湖南省长沙市的匿名人士对新闻:的评论佛祖精通C#、Java、PHP、Python等各大主流语言来自山东省青岛市的匿名人士对新闻:的评论跑了50KM结果发现玻璃外,两边和顶上都坐满了人来自上海市的匿名人士对新闻:的评论我都知道原因,微波炉呗来自广东省的匿名人士对新闻:的评论联想也有同样的毛病,都被惯成全球性的大公司了!来自河南省平顶山市的匿名人士对新闻:的评论邮寄爆炸物判几年谁来科普下[s:笑]来自山东省淄博市的匿名人士对新闻:的评论质监部门和监管部门要到315才上班来自广东省的匿名人士对新闻:的评论用外部加热诋毁抹黑中国这事一定要跟寒锅人算账。获得翅膀并通过煅造属性诞生后,翅膀为玩家带来炫酷造型的同时,也将会为玩家的属性带来质的飞跃提升。
4.在法律允许的范围内,腾讯公司拥有对此活动的解释权。作为期待了这么多年的韩游超大作,游戏整体素质还是不错的,具体可以看我们新游频道在昨天发的《天堂永恒》韩服详细评测。的冯提莫,萌萌哒的美女主播,直播唱歌吸引很多粉丝,相信大家都是被萌萌的长相吸引的,然后才被她的歌声吸引的吧,可以说,冯提莫的歌唱实力不输给专业歌手啊,什么风格的都能驾驭,什么样的语言都会唱,也是觉了,怎么不去参加选秀,咳咳,不过选秀成功了估计都没现在赚的零头多。2011年收入1500万以上,2012年收入3000万以上,预计五年实现企业上市,成为东北地区首个互联网上市企业。
本系列将持续更新数仓建模相关知识,将学习到的理论知识和工作实践结合起来,总结沉淀下来,积跬步成千里。
上一篇介绍了维度建模体系的搭建,这次来分享下搭建数据仓库涉及的各种规范。
?
分享我工作中遇到的一个小案例:
小A:我发现XXX这个历史累计指标既可以从服务端出,又可以从日志出,这2份数据源貌似有差异
小B:是的,服务端记录的是当前还存在的,日志会把删除的也记下来
小A:嗯,2份数据源会导致数据不一致的情况,我觉得我们应该从指标命名上区分开来
小B:嗯,我这边是这么记得:服务端的直接从后端表获取,我直接放在维表中,且不加_std
小A:啊?我不是这么写的呢,我是想在前面加个后缀呢
小B:。。。
小A:。。。
?
案例虽小,但折射出来的问题是:每个人都有自己的一套准则,一个数仓几套准则的话,业务怎么用?新人怎么了解?指标一致性怎么保证?所以需要建设数仓标准化规范,保持队形。
另外一方面,所谓"前人留坑、后人填坑",接盘侠一般会很痛苦,好的规范一定程度上可以降低接盘侠的痛苦。比如版本迭代规范,可以很好的追溯新指标上线情况、bug修复情况、数据回刷情况等。
数据规范是数仓体系建设的"语言",是数据使用的说明书和翻译官,同时也是数据质量的保驾护航者。采用标准化、系统化规范让用户"看得懂"、"找得到"、"放心用",保证指标的一致性、保证数据高质量生产。
一、模型层次调用规范
设计模型层次和制定调用规范的目的是:避免烟囱式建设,数据更多的共享,减小重复计算、保持数据一致性等。主要有以下几点:
- ods层一般只被dwd层调用,不建议跨层调用ods层
- ads层优先调用dwd和dws层数据,不建议直接抽ods层数据,优先调用dws层
- 应充分了解业务需求,尽量沉淀常用指标到dwd层、dws层、dim层
- dws层可先建轻度汇总层,避免指标直接从dwd明细层出
- dws层要尽量沉淀出常用指标,避免ads层过度调用dwd层数据
- dws层不宜过深,比如超过10层
二、命名规范
字段命名一般有以下通用规范:
- 命名一律采用小写
- 由字母、下划线、数字组成,不能以下划线和数字开头
- 尽量用英文简写,其次是英文
- 部分可以汉语拼音首字母标准缩写,如中国制造zgzz
- 命名不宜过长
1、数据域命名规范
确定好数据域后,需要对其命名,比如上一篇涉及到的
此外一些常用的命名,如:
- 用户域:par
- 日志域:log
- 关系域:sns
- 广告域:adv
- 位置域:loc
- ........
2、表命名规范
可以对表进行如下的约定:
1)临时表:tmp_名字全称_对应输出正式表名_自由发挥_yyyyMMdd
2)正式表:可以采用模型层次、数据域、表描述和分表规则结合的方式
[层次][一级主题域][二级主题域][产品或业务板块][内容描述][分表策略]
说明:
- ods层表:尽量保持与源系统相同的命名,不涉及主题域,在此基础上增加层次或分表策略
- 内容描述
- dim表内容描述一般是维度标识词
- dwd事实表,内容描述跟业务过程有关
- dws/ads可以增加统一关键词标识有聚合功能,比如aggr、tag等
- 层次:就是数仓的模型层次ods/dwd/dim/dws/ads
- 主题域:即指上面提到的数据域,根据业务情况确定是否有二级主题和产品或业务板块
- 分表策略:即为数据的生命周期,主要有下面几种:
分表策略 | 简称 | 说明 |
---|---|---|
小时全量 | dh | 每小时分区中保留的是历史至今的全量数据 |
小时增量 | hi | 每小时分区中保留的是当前小时的增量数据 |
日全量 | dd | 每天分区中保留的是历史至今的全量数据 |
日增量 | di | 每天分区中保留的是当日的增量数据,可以是汇总数据也可以是明细数据 |
周全量 | wd | 每周的分区中保留的是历史至今的全量数据 |
周增量 | wi | 每周的分区中保留的是对应周的增量数据,可以是汇总数据也可以是明细数据 |
月增量 | mi | 每月的分区中保留的是对应月份的整个月的增量数据,可以是汇总数据也可以是明细数据 |
月全量 | md | 每月的分区中保留的是历史至今的全量数据 |
无时间分区 | nd | 死表或者不定期更新的全量表 |
3)表的分区命名规范
即表更新周期,确定表数据按小时、天、周、月、年更新
分区名 | 分区字段 | 说明 |
---|---|---|
小时分区 | pt_d | HH |
天分区 | pt_d | yyyy-MM-dd |
周分区 | pt_w | yyyy-MM-dd,无特殊需求统一写所在周周一的日期 |
月分区 | pt_m | yyyy-MM |
年分区 | pt_y | yyyy |
3、指标命名规范
1)原子指标:原子指标就是度量,对某一业务事件进行度量,有明确的业务含义,比如支付金额等。
原子指标隶属于业务过程,一般在事实表中包含,所以创建原子指标时必须选择所属的业务过程。原子命名规范可由业务修饰词 + 词根组成:
2)衍生指标:对原子指标业务统计范围的确定。由一个原子指标+修饰词+时间周期组成。
衍生指标唯一归属一个原子指标,继承原子指标的数据域。
衍生指标可以分为三类:事务型指标、存量型指标和复合型指标。按照其特性不同,有些必须新建原子指标,有些可以在其他类型原子指标的基础上增加修饰词形成衍生指标。
-
事务型指标:是指对业务活动进行衡量的指标,如近N天支付金额。这类指标需维护原子指标及修饰词,在此基础上创建衍生指标。
- 存量型指标:是指对实体对象某些状态的统计,对应的时间周期一般为”历史截止当前某个时间“。这类指标需维护原子指标及修饰词,在此基础上创建衍生指标。
- 复合型指标:在事务型指标和存量型指标的基础上复合而成,有以下几种:
- 比率型:比如xxxCTR、xxx满意度。这种情况下需要创建原子指标,比如创建CTR、满意度等原子指标。
- 比例型:比如xxx百分比,xxx占比。这种情况下需要创建原子指标,比如创建播放歌曲人数占比。
- 变化量型:比如xxx指标相对上N天的变化量。这种情况下不不创建原子指标,增加统计方法相关的修饰词,然后在此基础上创建衍生指标,比如上N天变化量的修饰词。
- 变化率型:比如xxx指标相对上N天的变化率。这种情况需要创建xxx变化率原子指标。
- 统计型:比如人均、次均,xxx分位数等。这种情况下不创建原子指标,增加统计方法相关的修饰词,在此基础上创建衍生指标。
- 排名型:一般为TOP_xxx_xxx。这种情况下创建原子指标,比如top_n_支付金额,在此基础上创建衍生指标。
3)修饰词的规范
为了规范指标的命名,我们可以对词根、时间周期等修饰词进行约定,比如:
①常用的【词根】可以做如下约定
词根 | 命名规范 | 类型 | 说明 |
---|---|---|---|
用户数量 | unt | bigint | ? |
次数 | cnt | bigint | ? |
数量 | num | bigint | ? |
金额 | amt | Decimal | ? |
首次 | fst | ? | 类型根据具体度量确定 |
末次 | lst | ? | 类型根据具体度量确定 |
平均 | avg | ? | 类型根据具体度量确定 |
常用 | com | ? | 类型根据具体度量确定 |
比率 | ratio | Decimal | ? |
时间戳 | timestamp | bigint | ? |
时间 | time | string | yyyy-MM-dd HH:mm:ss |
日期 | date | string | yyyy-MM-dd |
加密 | encry | string | ? |
描述 | desc | string | ? |
人民币 | RMB | Decimal | ? |
美元 | USD | Decimal | ? |
前N | topN | ? | 类型根据具体度量确定 |
升序 | asc | ? | 类型根据具体度量确定 |
降序 | desc | ? | 类型根据具体度量确定 |
时长 | duration | Decimal | ? |
活跃 | active | string | ? |
新/老 | new/old | string | ? |
版本 | ver | string | ? |
②常用的【时间周期】可以做如下约定
时间周期 | 简称 | 说明 |
---|---|---|
最近1天 | _1d | d:day |
最近3天 | _3d | |
最近N天 | _Nd | |
最近7天 | _1w | w:week |
最近14天 | _2w | |
最近30天 | _1m | m:30天 b:before y:year |
最近60天 | _2m | |
最近90天 | _3m | |
最近180天 | _6m | |
最近一年 | _1y | |
180天以前 | _b6m | |
未来7天 | _p1w | p:predict;w:week |
未来4周 | _p1m | p:predict;m:month |
自然周 | _cw | c:calendar w:week; q:quarter; y:year;fy:fiance year;hfy:half fiance year |
自然月 | _cm | |
自然季度 | _cq | |
自然年 | _cy | |
财年 | _fy | |
半财年 | _hfy | |
历史截至当日 | _std | std:start to day |
自然年初截至当日 | _ytd | ytd:year to day |
自然季度初截至当日 | _qtd | qtd:quarter to day? |
自然月初截至当日 | _mtd | mtd:month to day |
自然周初截至当日 | _wtd | week to day |
财年年初截至当日 | _ftd | fiance(year)to day |
最近1小时 | _1h | h:hour |
0点截至当前小时 | _dth | day to hour |
0点截至当前 | _dtr | dtr:day to realtime htr:hour to realtime mtr:minute to realtime |
小时截至当前 | _htr | |
分钟截至当前 | _mtr | |
活动开始截至当日 | _atd | Activity start to day |
活动开始截至当前 | _atr | Activity start to realtime |
4)公共字段规范
根据部门业务特色,我们可以沉淀一些共有的字段命名,比如维表中的一些字段、专有词语等
字段描述 | 缩写 | 字段类型 |
---|---|---|
年龄 | age | string |
性别 | gender | string |
城市 | city | string |
省份 | province | string |
国家 | country | string |
用户id | user_id | string |
出生日期 | birth_date | string |
地址 | addr | string |
邮箱 | | string |
星座 | constellation | string |
昵称 | nick_name | string |
收入 | income | Decimal |
设备id | dev_id | string |
操作系统 | os | string |
操作系统版本 | os_ver | string |
app版本 | app_ver | string |
三、开发规范
数据开发工程师在开发模型的时候,也尽量保持一致的规范,方便统一管理和运维。具体规范根据部门使用的数据平台有关,比如网易使用的是网易易数开发平台,那我们一般会有如下的约定:
1)建表规范
- 临时表采用内部表;正式表采用外部表
- 采用分库形式,按照模型层次建立对应的库名,保持库名、表层级的一致性
- 建表时增加表属性:开启impala快速查询功能、添加表创建人POPO账号
- 建表必须要有comment,说明表使用场景等
- 表字段必须要有详细的描述说明,枚举值必须要有数据字典
- 临时表后缀要添加创建日期,便于表生命周期管理
- 表的存储也有严格的规定
- 临时表统一放在临时库对应的临时目录下,比如:公共路径/临时库/tmp/账号/表名
- 正式表按模型层级存在统一的目录下,比如:公共路径/库名/层次/表名
- 表数据存储格式通常采用parquet的格式
- 表一般会采用snappy压缩
- 建表一般都有分区
2)作业流规范
根据网易易数开发平台的特点:数仓以作业流的形式开发。为了便于管理开发作业,我们做了如下规定:
- 一个作业流只输出一张结果表,通过配置跨流依赖来保持顺序持续任务,表之间的依赖关系通过血缘可以快速查看。
- 作业流的名称以产出表名命名
- 作业流按模型层次分组,保持模型、表、作业流一致性,比如dim表只放在dim组下。
- 非实时作业流一般采用T+1的方式调度,即今天更新作业的数据。
3)数据格式规范
我们对数据格式也做了一些约定,比如
- 时长统一到秒,时间戳统一到毫秒
- 时间和日期格式统一采用yyyy-MM-dd HH:mm:ss和yyyy-MM-dd
这里根据具体部门的业务需求来统一约定。
4)数据字典规范
开发过程中会涉及到各种枚举值,为了方便管理,也可以统一码值,建立标准化码表。
5)维度规范
维度是维度建模的基础和灵魂,维度的作用是:查询约束、分类汇总、以及排序等。所以对维度统一规范非常重要,比如
- 共享公共维度
- 维度采用一张主维表+多张次维表的形式。
- 维度主键唯一
- 维度属性的枚举值要统一
- 维度属性命名要统一
- 维度属性值格式要规范
- 维度数值型单位要统一
6)指标来源规范
- 为了保持数据一致性,同一业务含义指标的源头尽量保持同一张表,比如所有相关评论指标应该能追溯到同一个数据表。
- 同一业务指标需要涉及多个源数据时,比如日志和服务端的数据。建议尽量加以区分,比如命名上区分
7)指标一致性建设规范
在开发指标过程中,做到需求描述、计算口径、指标口径保持一致性,同时做到指标可追溯可管理。可依托于工具来完成指标的管理。
8)迭代规范
模型上线后期会出现补数据、bug修复、增加指标等情况,为了做到版本迭代可追溯,需要在代码中增加版本迭代备注,比如:版本迭代时间、开发人员、迭代内容、版本上线时间、是否补数据、补数据的分区范围等。
四、交付标准规范
kimball指出,对数仓的基本要求是:对业务用户发布高质量、相关的、可访问的信息和分析 。
那么,数据开发完成后,并不是直接上线交付,还需要重要的一步是保证交付标准,保证数据质量和产出的及时性。实现的手段是数据质量测试、质量监控、调度监控。基本原则主要有以下:
- 准确性:准确性是指数据中记录的信息和数据是否准确,是否存在异常或错误的信息。
- 完整性:指数据的记录和信息是否完整,是否存在缺失的情况。数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都造成统计结果不准确,所以说完整性是数据质量最基础的保障。
- 一致性:一致性一般体现在跨度很大的数据仓库体系中,比如云音乐数据仓库,内部有很多业务线数据仓库分支,对于同一份数据,必须保证一致性。例如用户id,必须保证所有业务线的用户id数据类型、长度等一致。
- 唯一性:对于需要保证主键唯一的产出表,必须保证主键的唯一性,比如维表、实体聚集表。
- 及时性:在确保数据的完整性、准确性和一致性等后,接下来就要保障数据能够及时产出,这样才能体现数据的价值。
实现这五大标准,可以采用事前质量测试、时候质量&调度监控相结合的方式。比如易数有专门的数据质量中心,支持表和字段级别。任务上线后,尽量配置下质量监控。
五、数据资产管理
好的规范需要有专业的工具来管理,单靠文档和人工肯定会出错的。比如我们使用的是网易内部数据中台产品:【指标管理系统】和【模型设计平台】。实现整个数据资产管理,它的功能如下:
?
-
统一词根、修饰词、公共字段管理,保证原子指标和衍生指标的一致性
-
统一指标管理,保证需求描述、计算口径、指标业务口径数据来源的一致性。
-
统一维度管理,保证了维度定义、维度值的一致性。
-
统一模型层次、维表、事实表的关联,保证模型设计的一致性
-
统一数据域、业务过程管理,保证数仓体系的一致性
?
下一篇将着重介绍数仓模型设计相关内容。
参考
1.《数据仓库工具箱—维度建模权威指南》
2.《大数据之路:阿里巴巴大数据实践》
作者简介
吴珍,网易数帆高级数据开发工程师,长期从事大数据开发、数仓体系建设和模型设计、数据规范、数据应用和服务等相关工作。目前主要负责网易云音乐数仓升级项目,依托网易易数及系列数据产品,协助云音乐优化数仓体系架构和数据模型、完善数仓规范、提升数据服务等工作。