全部产品

数据格式规范 V3.0

更新时间:2017-07-31 21:59:58   分享:   

数据格式规范 V3.0

数据格式规范 V3.0 适用于推荐引擎新版控制台,如果使用旧版控制台,请参考数据格式规范 V2.0

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

dsp

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

  1. 在MaxCompute(原来ODPS)中需要自己手工创建这些表;
  2. 表名没有固定要求,可以按照自己的习惯命名;
  3. 每张表的表结构必须符合推荐引擎的要求,列名、字段类型和分区格式需要和规范中保持一致(参考下面的表结构说明);
  4. 每张表中填充的数据,必须符合推荐引擎的要求;
  5. 每张表中是否都有记录取决于业务场景和业务数据现状,其中以下几张表中必须有数据:用户信息表、物品信息表、用户行为表;
  6. 对于业务数据中无法提供的字段可以填NULL;
  7. 每张表都必须是分区表,以’yyyyMMdd’格式的字符型字段ds作为分区字段;
  8. 除了行为表需要每日上传外,其他meta表如果不发生变化可以不导,推荐引擎会自动获取最近一个有数据的分区中的meta表数据进行算法计算。
  9. 如果未传可推荐物品表,则将物品表全量作为可推荐物品表,继承item_info 字段;
  10. 推荐引擎在对数据进行离线计算时,会产生数据结果数据和中间数据。其中中间数据的数据量大小取决于所使用的离线流程中的算法复杂度。例如一个标准的协同过滤算法其中间表数据量可能是原始数据输入表数据量的5到10倍。推荐引擎默认对中间数据保留一天。

用户表(USER_META)

字段描述

列名 数据类型 注释 Nullable
user_id string 用户ID,可以是AID,device id,淘宝ID等各种唯一标识用户身份的ID。不能出现(\001-\003)特殊字符。以下user_id字段同此意
tags string 标签-标签值kv串。不同tag之间用\002分隔,tag和value之间用\003分隔
基本格式:t1\003v1\002t2\003v2…
例子:比如用户有两个标签年龄和性别,tag可以取age,gender;value取对应的值,如18、1,这条记录可编码为age\00318\002gender\0031
tags字段每个KV组中value的取值类型信息由user_meta_config给出
更多信息参见【注释1】
plates string 板块区分字段,多个板块code用逗号分隔【注释3】

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区都是全量数据,使用时取ds值最大的分区

ODPS DDL示例

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

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_meta PARTITION (ds='20160101')
  2. SELECT 'u1' AS user_id
  3. , concat('age', '\003', '18') AS tags
  4. , null
  5. 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数值型,单值枚举型,单值数值型四种标签取值类型。

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区都是全量数据,使用时取ds值最大的分区

ODPS DDL示例

  1. CREATE TABLE user_meta_config (
  2. config_name STRING,
  3. config_value STRING
  4. )
  5. PARTITIONED BY (
  6. ds STRING
  7. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_meta_config PARTITION (ds='20160101')
  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的形式给出。只支持单类目。如果要表示多分类,在properties中描述
keywords string 关键词串。关键词可以有权重(需要归一化到0-1之间),也可以没有权重,没有权重时所有词的权重都是1。Keywords之间用\002分隔,keyword和score之间用\003分隔(如果score存在)
基本格式:kw1\003s1\002kw2\003\s2\002…
是,不过category,keywords,properties,description,item_info五者不能都为空
description string 用于描述这个物品的一段文本
properties string 属性-属性值kv串。不同key之间用\002分隔,key和value之间用\003分隔。不同property的key最好以ID的形式给出。
基本格式:k1\003v1\002k2\003v2…]
例子:比如电影作为item,properties中的key包括演员、风格,取值分别为巩俐、爱情剧,这条记录的properties字段可以编码为
actor\003Gong Li\002style\003Love
更多信息参见【注释1】
item_info string 物品的业务信息,KV格式。不同KV之间以\002分隔,key和value之间以\003分隔。可以留NULL。item_info和properties的区别在item_info不参与特征提取的计算
update_datetime datetime 物品更新时间
plates string 板块区分字段,多个板块code用逗号分隔【注释3】

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区都是全量数据,使用时取ds值最大的分区

ODPS DDL示例

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

ODPS SQL示例

  1. INSERT OVERWRITE TABLE item_meta PARTITION (ds='20160101')
  2. SELECT 'i1' AS item_id
  3. , '16' AS category
  4. , concat('hello', '\002', 'word') AS keywords
  5. , '' AS description
  6. , NULL AS properties
  7. , NULL AS item_info
  8. , getdate() AS update_datetime
  9. , NULL as plates
  10. 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数值型,单值枚举型,单值数值型四种标签取值类型。多值用\004 隔开

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区都是全量数据,使用时取ds值最大的分区

ODPS DDL示例

  1. CREATE TABLE item_meta_config (
  2. config_name STRING,
  3. config_value STRING
  4. )
  5. PARTITIONED BY (
  6. ds STRING
  7. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE item_meta_config partition (ds='20160601')
  2. SELECT 'singer' AS config_name
  3. , 'sv_enum' AS config_value
  4. FROM dual;

行为表(USER_BEHAVIOR)

字段描述

列名 数据类型 注释 Nullable
user_id string 用户ID
act_obj string 行为对象,行为作用对象的标识,如果有ID,就用ID,如帖子的作者;如果没有ID,直接记录,如搜索关键词
obj_type string 行为作用对象的类型,取值为
item:行为对象就是物品,这时act_obj就是item_id
category:行为对象是物品的类型,这时act_obj一般都是category id
property:行为对象是物品的属性,这时要说明具体属性在properties字段中的key。这种情况下本字段格式为properties:key
keyword:行为对象是关键词,
默认为‘item’
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 行为的具体内容。
comment:记录评论
search_click:记录搜索关键字
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
plates string 板块区分字段,多个板块code用逗号分隔【注释3】

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区只记录当日数据,推荐引擎会保留一段时间的历史分区

ODPS DDL示例

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

ODPS SQL示例

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

可推荐物品表(REC_ITEM_INFO)

字段描述

列名 数据类型 注释 Nullable
item_id string 物品ID,唯一标识。本表中的物品都是允许被推荐的物品
item_info string 如果业务方希望RecEng在返回推荐物品时同时返回物品的其他信息,保存在这里。RecEng不需要了解item_info的内部格式,原样返回给业务方。
class string 分组信息,用于多分类推荐
plates string 板块区分字段,多个板块code用逗号分隔【注释3】

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区都是全量数据,使用时取ds值最大的分区

ODPS DDL示例

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

ODPS SQL示例

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

朋友关系表(USER_RELATIONSHIP)

字段描述

列名 数据类型 注释 Nullable
user_id string 用户ID
follow string 用户-亲密度KV串。KV串中每个key为当前用户关注的某个用户的user_id,value为亲密度的评分。KV组之间以\002分隔,key和value之间以\003分隔
followby string 用户-亲密度KV串。KV串中每个key为当前用户关注的某个用户的user_id,value为亲密度的评分。KV组之间以\002分隔,key和value之间以\003分隔 是。follow和followby二者不能同时为空
plates string 板块区分字段,多个板块code用逗号分隔【注释3】

分区描述

分区名 数据类型 注释 Nullable
ds string 分区字段,按日分区,格式yyyyMMdd。每个分区都是全量数据,使用时取ds值最大的分区

ODPS DDL示例

  1. CREATE TABLE user_relationship (
  2. user_id STRING,
  3. follow STRING,
  4. followby STRING,
  5. plates STRING
  6. )
  7. PARTITIONED BY (
  8. ds STRING
  9. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_relationship PARTITION (ds='20160101')
  2. SELECT 'i1'
  3. , 'i2\0031.0\002i3\0030.5\002i4\0030.3'
  4. , NULL
  5. , NULL
  6. FROM dual;

注释1

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

注释2

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

注释3

  1. 当存在不同的推荐场景中需要用不同的用户关系数据做推荐时,利用本字段进行标识。客户需要定义一组plate,为每个推荐场景分配一个plate,在本字段中记录用户可以被推荐使用的所有场景的plate id,中间以逗号分隔。
  2. 如客户定义了两个plateID分别为12。现有用户ABC,其中A只能用在plate1B只能用在plate2C可用在plate12,这时Aplates字段为1Bplates字段为2Cplate字段为1,2
本文导读目录
本文导读目录
以上内容是否对您有帮助?