生而为人

程序员的自我修养

0%

字段规范

a、命名规范

1、使用有意义英文词汇;使用约定俗成的词汇;禁止中文拼音或拼音缩写

2、字段名由字母、下划线组成,禁止滥用阿拉伯数字,不同词汇之间用下划线分隔;字符长度不超过30位

3、为了意思清晰,加少混淆,并易于理解,应当使用 表名 + id/name/type…的形式。例如,poi表里字段应该为poi_id、poi_type、 poi_name(不应该直接使用:id/name/type)

4、基础字段命名:用num, amt, cnt, id, type等简写做后缀,如”order_cnt”表示订单数量,“product_id”标示产品ID

5、聚集指标字段命名,用sum, avg, max, min等简写做后缀加在指标字段后,“consume_amt_sum“表示消费总额。

6、表示是否的字段,用is_含义, 例如,deal是否可预订,is_apt、is_prepay等。

  • 业务含义是动词时,尽量不用使用其分词命名,如is_paid,应为is_pay
  • 定义:是(1)非(0)或 肯(1)否(0)

7、列里面存的是多值,可以用复数命名,例如 markland_ids, hotel_types

8、DW内部:相同含义的字段名称、数据类型在正常情况下须保持一致,减少使用过程中的混淆,避免造成数据流转时不能被抽取或数据截断情况

b、命名建议

原则:字段名尽量详细,易于理解

命名规则

字段名:[is]_[修饰词]+字段描述词+[后缀/度量]+[时间周期词],强烈建议保留后缀

中文名:[时间周期词]+[修饰词]+字段描述词+[度量]

  • 字段描述词(名词、动词)

  • 修饰词(名词、动词、形容词、topN)

  • 名词修饰示例:dp_shop_id、mt_deal_id、business_area_name、province_location_id、hotel_star_name

  • 动词修饰示例:pay_order_cnt、refund_apply_cnt、locate_city_name、checkout_city_id

  • 形容词修饰示例:new_user_id、last_modify_operator_name、poi_first_cate_name

  • topN修饰(top\d)示例:top10_click_uv

  • 多个修饰词存在时,按主-谓-宾顺序、动作发生时间前后的顺序排列,例如:

主谓宾示例:biz_checkin_coupon_value(商家入住代金券补贴)

多动作示例:auto_pass_update_cnt(自动通过更新量)、response_add_time(回应添加时间)

  • 后缀(度量)

    常用基础后缀

    后缀 含义 备注
    id 唯一标示
    key 代理键
    cnt 数量
    no 批次、顺序号、编号
    code 代码
    type 类型
    name 名称
    amt 金额
    desc 描述
    effect_end_date 关链时间
    effect_begin_date 开链时间
    value
    pct 百分比
    score 得分
    level 等级
    comment 备注、说明
    status 状态
    time 时间
    date 日期
    datekey 日期键
    identifier 标识
    tag 标签
    goal 目标
    item 条目
    uv 访客数
    pv 浏览量
    platform 平台
    source 来源

    复合后缀:在基础后缀后使用

    后缀 含义 备注
    sum 汇总值
    avg 平均值 后可接by_[均分维度],如人均、日均;缺省默认为按表的聚合粒度取均值
    max 最大值
    min 最小值
    var 方差
    covar 协方差
    stddev 标准差
    (\d)pctl 百分位数 \d为相应百分比
    interval 间隔 示例:[a]to[b]_time_interval
    [\d时间周期]diff 差异 示例:[a]to[b]_amt_diff与自身对比时:diff后加时间周期pay_order_cnt_diff_14days(与前14天的支付订单数差异),如果需要时间周期修饰,仍可以在字段后加时间周期词:pay_order_cnt_diff_14days_7days(当前日期前7天的支付订单数与前14天的差异)
  • 时间周期词(day、week、quarter、year、tenday、quarter、halfyear、period)

    时间周期词 含义 备注
    (\d)days 近n日 当前日期之前
    (\d)day 第n日 当前日期之前
    f(\d)days 未来n日内
    f(\d)day 未来第n日
    ……

c、设计原则

1、各列必须有明确注释

2、维度表:

  • 维度主键须在第一列,其余外键按重要性、相关性由高到低依次排列。
  • 维度表扁平化或设计层次维度表时,如需添加其他维度属性,应将其他维度主键和属性写到一块,方便浏览。如city维表中的province_id,province_name

3、事实表:

  • 如有标示唯一动作的ID时,应置为第一列,如订单表的order_id,评价表的review_id
  • 无唯一ID时,日期时间字段放在前列,相关的维度信息按重要性、相关性由高到低依次排列。如deal浏览日志:time,deal_id……

4、代理键设置:

模型涉及多系统整合时,需要添加代理键字段标示唯一主键,命名后缀为_key,代理键码值维护在1.4、公共代码空间

目前产品、交易主题需要设置代理键,因为这部分数据主要来自酒旅平台内部业务系统,我们作为数据的供给方是有权力制定码值的规范;

商户、用户主题的数据不建议整合,因为数据供给方在平台,我们制定代理键规则的话,会影响与平台和其他BG的数据互通

d、字段设计

1、新增字段应参照已定义的字段标准

2、字段类型严格遵循以下规范

数据类别 Hive类型 Mysql类型 长度 精度 词根 说明
日期类型 字符日期类 string varchar 10 date YYYY-MM-DD
整数日期类 int int 8 datekey YYYYMMDD
月类 int int 6 month YYYYMM
季类 int int 5 quarter YYYYQ
年类 int int 4 year YYYY
日期时间 string datetime time YYYY-MM-DD HH:MM:SS
数值类型 数量类 bigint bigint 10 0 cnt 间夜、券数等
金额类 Decimal Decimal 20 4 amt
浮点类 Double Decimal 20 4 avg 月均/年均等
指示器类 tinyint tinyint 1 is 值域个数为2。例如:(0,1)
级次类 int int 3 level 1.2..N
字符类型 文本类 String varchar type/name等
代码类 String varchar code 各维度表代码
键值类 String varchar id 非整形主键或唯一ID
复合类型 JSON类 String varchar json
MAP类 map varchar map
ARRAY类 array varchar array 类似[a,b,c,d]结构

e、主题关联键

现有字段名 字段中文名 字段类型 主题 规范字段名 规范字段类型
order_id 订单id bigint 交易、营销主题 order_id bigint
order_code 订单编码 string 交易、营销主题 order_code string
purchase_no 采购单号 string 采购主题 purchase_code string
id 退货单id bigint 交易主题 return_id bigint
return_code 退货单编码 string 交易主题 return_code string
after_sales_order_code 售后订单编号 string 交易主题
service_id 客服id bigint 客服主题 service_id bigint
creator_id 创建人id bigint
order_payment_id 支付id bigint 交易主题 payment_id bigint
csu_id 售卖单元id bigint 商品主题 csu_id bigint
sku_id 商品最小粒度id bigint 商品主题 sku_id bigint
spu_code spu编码 string 商品主题 spu_code string
spu_id spu_id bigint 商品主题 spu_id bigint
bd_id bdid bigint 营销管理主题 bd_id bigint
customer_id 商户id bigint 商户主题 customer_id bigint
poi_id 门店id bigint 商户主题 poi_id bigint
buyer_id 商家id? string 商户主题 customer_id bigint
warehouse_id 仓库 bigint 仓储主题 wh_id bigint
inbound_no 入库单 string 仓储主题
brand_id 品牌id bigint 商品主题 brand_id bigint
sku_brand sku品牌 bigint 商品主题 brand_name bigint
supplier_id 供应商id bigint 采购主题 supplier_id bigint
supplier_code 供应商编码 string 采购主题 supplier_code string
channel_id 渠道id bigint 采购主题 channel_id bigint
cat1_id 一级品类id int 商品主题 cat1_id bigint
cat2_id 二级品类id int 商品主题 cat2_id bigint
cat3_id 三级品类id int 商品主题 cat3_id bigint
ba_cat1_id 商分一级品类id int 商品主题 ba_cat1_id bigint
ba_cat2_id 商分二级品类id int 商品主题 ba_cat2_id bigint
ba_cat3_id 商分三级品类id int 商品主题 ba_cat3_id bigint
receiving_bill_no 收货操作单号 string 仓储主题
putaway_bill_no 上架操作单号 string 仓储主题
allot_bill_no 调拨单号 string 仓储主题
creator_id 采购人mis_id bigint 采购主题
dealer_id 经销商id bigint 采购主题 dealer_id bigint
biz_unique_no 结算单号 string 采购主题
poi_address_id 配送地址id? bigint 履约主题 poi_address_id bigint
service_provider_id 服务商id bigint 履约主题
route_id 路由id bigint 履约主题 route_id bigint
line_id 线路id bigint 履约主题 line_id bigint
creator_id 代下单人下单id bingint 营销管理主题
bd_misid、mis_name BD账号 string 销售管理 mis_name string
bu_id 事业部ID bigint 销售管理 bu_id bigint
city_id 城市ID bigint 销售管理 city_id bigint
bd_info_id、employee_id BD员工ID bigint 销售管理 employee_id bigint
org_id 销售组ID bigint 销售管理 org_id bigint

f、MAP类型key值

  1. key设计规则:

    1.1 时间key值

    today 当日

    (N)day 第N日之前

    (N)days 近N日

    f(N)day 未来第N日

    f(N)days 未来N日/次N天

    toweek 当周

    (N)week 第N周之前

    f(N)week 未来第N周/次N周

    tomonth 当月

    (N)month 第N月之前

    f(N)month 未来第N月/次N月

  1. key值枚举(只会新增、不会删减

    key 含义 备注 应用场景
    today 当天 dt=’20190328’,代表20190328当天的数据 客户宽表、客户分群
    1day 1天前 dt=’20190328’,代表20190327的数据 客户宽表、客户分群
    7day 7天前(上周同期) dt=’20190328’,代表20190321的数据 客户宽表、客户分群
    1month 1月前(上月同期) dt=’20190328’,代表20190228的数据 客户宽表、客户分群
    7days 近7天 dt=’20190328’,代表20190322-20190328的数据 客户宽表、客户分群
    30days 近30天 dt=’20190328’,代表20190227-20190328的数据 客户宽表、客户分群
    total 历史累计 dt=’20190328’,代表截止到20190328的数据 客户宽表、客户分群
    2days 近2天 dt=’20190328’,代表20190327-20190328的数据 客户宽表、客户分群
    3days 近3天 以此类推 客户宽表、客户分群
    4days 近4天 客户宽表、客户分群
    5days 近5天 客户宽表、客户分群
    6days 近6天 客户宽表、客户分群
    7days 近7天 客户宽表、客户分群
    14days 近14天 客户宽表、客户分群
    21days 近21天 客户宽表、客户分群
    28days 近28天 客户宽表、客户分群
    29days 近29天 客户宽表、客户分群
    35days 近35天 客户宽表、客户分群
    60days 近60天 客户宽表、客户分群
    f1~30day 未来第1~30天/次1~30天 客户cohort分析
    toweek 当周(自然周) 客户cohort分析
    f1~12week 未来第1~12周/次1~12周 客户cohort分析
    tomonth 当月(自然月) 客户cohort分析
    f1~12month 未来第1~12月/次1~12月 客户cohort分析
    mtd 本月(截止到统计日期) 客户宽表、商品宽表
    待增

g. 多种日期维度字典值

日期含义 命名规则 应用场景
当天 例如:20191105 星辰
自然周 周一到周日,例如 20191028-20191103 星辰
汇报周(周三~周二) 周一到周日,例如20201104-20201110 星辰-自定义看板(品类运营看板)
自然月 月份:201911 星辰
周WTD W-1、W-2 星辰
汇报周WTD(周三~周二) W-1-WT、W-2-WT(WT的意思是Wednesday、Tuesday) 星辰-自定义看板(品类运营看板)
月MTD(只计算还没过完的当前月份的月MTD,该MTD只是截止到当日) M-1、M-2 星辰
滚动七天 7D- 和当前日期 组合 7D-20191105 星辰-经营结果
月MTD(每个日期的月度累计时间) MTD-20191028 星辰-经营结果