阅读188 返回首页    go 微信


数据格式规范__数据规范_开发者指南_推荐引擎-阿里云

推荐引擎的基础数据模型如下:

basic_data_model

该数据模型总共包括了六张表,这些表有以下特点:

  1. 在MaxCompute(原来ODPS)中需要自己手工创建这些表;
  2. 表名没有固定要求,可以按照自己的习惯命名;
  3. 每张表的表结构必须符合推荐引擎的要求,列名、字段类型和分区格式需要和规范中保持一致(参考下面的表结构说明);
  4. 每张表中填充的数据,必须符合推荐引擎的要求;
  5. 每张表中是否都有记录取决于业务场景和业务数据现状,其中以下几张表中必须有数据:用户信息表、物品信息表、用户行为表;
  6. 对于业务数据中无法提供的字段可以填NULL;
  7. 每张表都必须是分区表,以’yyyyMMdd’格式的字符型字段ds作为分区字段;
  8. 除了行为表需要每日上传外,其他meta表如果不发生变化可以不导,推荐引擎会自动获取最近一个有数据的分区中的meta表数据进行算法计算。将数据导入不同分区时,请遵守下面的规则:

    • 用户表(user_meta):每天可全量导入在一个固定分区(insert OVERWRITE TABLE user_meta PARTITION (ds=’20160501’}));
    • 物品表(item_meta):每天可全量导入在一个固定分区(insert OVERWRITE TABLE item_meta PARTITION (ds=’20160501’}));
    • 可推荐物品表(rec_item_info):每天全量导入在一个固定分区(insert OVERWRITE TABLE rec_item_info PARTITION (ds=’20160501’}));
    • 行为表(user_behavior):每天增量导入在不同的分区(insert OVERWRITE TABLE user_behavior PARTITION (ds=yyyyMMdd’}));
  9. 推荐引擎在对数据进行离线计算时,会产生数据结果数据和中间数据。其中中间数据的数据量大小取决于所使用的离线流程中的算法复杂度。例如一个标准的协同过滤算法其中间表数据量可能是原始数据输入表数据量的5到10倍。推荐引擎默认对中间数据保留一天。

用户表(user_meta)

字段描述

列名 数据类型 注释 Nullable
user_id string 用户ID,可以是AID,device id,淘宝ID等各种唯一标识用户身份的ID。不能出现(01-03)特殊字符。以下user_id字段同此意
tags string 标签-标签值kv串。不同tag之间用02分隔,tag和value之间用03分隔(方括号不保存在数据库中,以下同)。[t103v102t203v2…]
比如用户有两个标签年龄和性别,tag可以取age,gender;value 取对应的值,如18、1
详见【注释1】

分区描述

分区名 数据类型 注释 Nullable
ds string 日期分区 格式 ‘yyyyMMdd’

ODPS DDL示例

  1. CREATE TABLE user_meta (
  2. user_id STRING,
  3. tags STRING
  4. )
  5. PARTITIONED BY (
  6. ds STRING
  7. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_meta PARTITION (ds='20160101')
  2. SELECT 'u1' AS user_id
  3. , concat('age', '03', '18') AS tags
  4. FROM dual;

用户属性维度表 (user_meta_config)

字段描述

列名 数据类型 注释 Nullable
config_name string config_name值为user_meta 表tags中的key,每个key一条记录
config_value string config_value取值为mv_enum,kv_num,sv_enum,sv_num,分别代表多值枚举型,KV数值型,单值枚举型,单值数值型四种标签取值类型。

ODPS DDL示例

  1. CREATE TABLE user_meta_config (
  2. config_name STRING,
  3. config_value STRING
  4. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_meta_config
  2. SELECT 'age' AS config_name
  3. , 'sv_enum' AS config_value
  4. FROM dual;

物品表(item_meta)

字段描述

列名 数据类型 注释 Nullable
item_id string 物品ID,唯一标识
category string 物品所属类目,最好以ID的形式给出
keywords string 关键词串。关键词可以有权重(需要归一化到0-1之间),也可以没有权重,没有权重时所有词的权重都是1。Keywords之间用02分隔,keyword和score之间用03分隔(如果score存在)[kw103s102kw203s202…] 是,不过category,keywords,properties,description,bizinfo五者不能都为空
description string 用于描述这个物品C的一段文本
properties string 属性-属性值kv串。不同key之间用02分隔,key和value之间用03分隔。不同property的key最好以ID的形式给出【注释1】[k103v102k203v2…]
比如电影作为item,那么properties中的key可以是演员、风格、制片人等
bizinfo string 物品的业务信息,KV格式。不同KV之间以02分隔,key和value之间以03分隔。可以留NULL。bizinfo和properties的区别在bizinfo不参与特征提取的计算

分区描述

分区名 数据类型 注释 Nullable
ds string 日期分区格式 ‘yyyyMMdd’

ODPS DDL示例

  1. CREATE TABLE item_meta (
  2. item_id STRING,
  3. category STRING,
  4. keywords STRING,
  5. description STRING,
  6. properties STRING,
  7. bizinfo STRING
  8. )
  9. PARTITIONED BY (
  10. ds STRING
  11. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE item_meta PARTITION (ds='20160101')
  2. SELECT 'i1' AS item_id
  3. , '16' AS category
  4. , concat('hello', '02', 'word') AS keywords
  5. , '' AS description
  6. , NULL AS properties
  7. , NULL AS bizinfo
  8. FROM dual

物品属性维度表 (item_meta_config)

字段描述

列名 数据类型 注释 Nullable
config_name string config_name值为item_meta表properties中的key,每个key一条记录
config_value string config_value取值为mv_enum,kv_num,sv_enum,sv_num,分别代表多值枚举型,KV数值型,单值枚举型,单值数值型四种标签取值类型。多值用04 隔开

ODPS DDL示例

  1. CREATE TABLE item_meta_config (
  2. config_name STRING,
  3. config_value STRING
  4. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE item_meta_config
  2. SELECT 'singer' AS config_name
  3. , 'sv_enum' AS config_value
  4. FROM dual;

行为表(user_behavior)

字段描述

列名 数据类型 注释 Nullable
user_id string 用户ID
item_id string 物品ID
bhv_type string 行为类型:
view:物品曝光
click:用户点击物品
collect:用户收藏了某个物品
uncollect:用户取消收藏某个物品
search_click:用户点击搜索结果中的物品
comment:用户对物品的评论
share: 分享
like:点赞
dislike:点衰
grade:评分
consume:消费
use:观看视频/听音乐/阅读
行为表记录的用户行为用于用户偏好建模
bhv_amt double 用户对物品的评分、消费、观看时长等。
bhv_cnt double 行为次数,默认为1,消费可以埋购买件数
bhv_datetime datetime 行为发生的时间,UTC格式。
content string 用户对物品的评价文本
media_type string 如果bhv_type=share,该字段记录分享到目标媒体。短信:sms,邮件:email,微博:sina_wb,微信好友:wechat_friend,微信朋友圈:wechat_circle,QQ空间:qq_zone,来往好友:laiwang_friend,来往动态:laiwang_circle
pos_type string 行为发生的位置类型,和下面position字段联合使用,有三种取值:
ll:经纬度格式的位置信息
gh:geohash格式的位置信息
poi:poi格式的位置信息
position string 行为发生的位置,根据pos_type有不同的取值格式:
如果pos_type=ll,position格式[longitude:latitude]
如果pos_type=gh,position格式[geohashcode]
如果pos_type=poi,position格式[poi_string]
env string JSON String
{
“IP”:””,
“network”:””,
“device”:””
}
IP: IP地址。行为发生时用户的IP地址。IPv4为点分十进制格式;IPv6为冒号分隔的标准6段格式(不使用IPv6嵌套IPv4的格式)
network: 网络制式。行为发生时用户所使用的接入网络,取值为solid,2G,3G,4G,WIFI。分别表示固网,2G,3G,4G和WIFI接入方式
device: 发生行为所使用的设备,包括mobile,pad,pc等,可添加
其他自定义环境变量也可以添加到JSON中
trace_id string 返回的推荐列表用于跟踪效果。如果对item_id 的行为不是来自推荐引导,则为NULL

分区描述

分区名 数据类型 注释 Nullable
ds string 日期分区

ODPS DDL示例

  1. CREATE TABLE user_behavior (
  2. user_id STRING,
  3. item_id STRING,
  4. bhv_type STRING,
  5. bhv_amt DOUBLE,
  6. bhv_cnt DOUBLE,
  7. bhv_datetime DATETIME,
  8. content STRING,
  9. media_type STRING,
  10. pos_type STRING,
  11. position STRING,
  12. env STRING,
  13. trace_id STRING
  14. )
  15. PARTITIONED BY (
  16. ds STRING
  17. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_behavior PARTITION (ds='20160101')
  2. SELECT 'u1' AS user_id
  3. , 'i1' AS item_id
  4. , 'click' AS bhv_type
  5. , 0 AS bhv_amt
  6. , 1 AS bhv_cnt
  7. , getdate() AS bhv_datetime
  8. , NULL AS content
  9. , NULL AS media_type
  10. , 'll' AS pos_type
  11. , concat('74', '02', '56') AS position
  12. , NULL AS env
  13. , NULL AS trace_id
  14. FROM dual;

可推荐物品表(rec_item_info)

字段描述

列名 数据类型 注释 Nullable
item_id string 物品ID,唯一标识。本表中的物品都是允许被推荐的物品
item_info string 如果业务方希望RecEng在返回推荐物品时同时返回物品的其他信息,保存在这里。RecEng不需要了解item_info的内部格式,原样返回给业务方。

分区描述

分区名 数据类型 注释 Nullable
ds string 日期分区

ODPS DDL示例

  1. CREATE TABLE rec_item_info (
  2. item_id STRING,
  3. item_info STRING
  4. )
  5. PARTITIONED BY (
  6. ds STRING
  7. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE rec_item_info PARTITION (ds='20160101')
  2. SELECT 'i1'
  3. , NULL
  4. FROM dual;

注释1

  1. 特征的数值类型分为mv_enum,kv_num,sv_enum,sv_num,分别代表多值枚举型,KV数值型,单值枚举型,单值数值型四种标签取值类型
  2. 举例:
  3. 单值数值型,如信用,只能取一个值,但这个值是不可枚举的
  4. 单值枚举型,如性别,只能取一个值,但这个值是可以枚举的(男,女)
  5. KV数值型,如用户的类目偏好,用户对某几个类目有偏好分,如3298:0.89,3456:0.98..这里3298和3456是类目id,0.89和0.98是偏好分
  6. 多值枚举型,如用户的标签,美包控、准妈妈等可以枚举,但是每个用户可以取多个
  7. 在特征串中,不同key之间用02分隔,key和value之间用03分隔,多值key的value之间用04连接。以上述4个例子为例,如果把它们串起来,则形式为
  8. 信用 03 98
  9. 02
  10. 性别 03 男
  11. 02
  12. 类目偏好 03 3298 04 0.89 03 3456 04 0.98
  13. 02
  14. 标签 03 美包控 03 准妈妈

注释2

  1. 文中提到 02 03 等指的是ASCII码为整型2,3的特殊字符,每种编程语言有不同的表示方法,ODPS SQL 及 JAVA可以直接使用 '02'

最后更新:2016-11-23 16:04:08

  上一篇:go 实时修正算法开发手册__算法规范_开发者指南_推荐引擎-阿里云
  下一篇:go 日志埋点规范__数据规范_开发者指南_推荐引擎-阿里云