数据注册与字段配置

数据注册

数据注册需要您已经开通MaxCompute、绑定项目,再注册MaxCompute,该注册表是效果统计的中间表(实验报表来源表),即以user_id、exp_id、维度指标作为联合主键统计的数据表。表示某个用户在某个实验下的曝光、点击等指标,也可以增加国家维度作为“user_id+国家+exp_id”下的中间统计表。后面配置单维指标和衍生指标都依赖这个中间表。在具体讲实验报表来源表之前,我们回顾一下实验的整体架构,如下图:

image.png

PAI-Rec 引擎是我们的推荐服务,里面集成了配置中心的 SDK,实验信息从配置中心获取到。在推荐服务返回接口中,会记录实验id(exp_id), 以及请求的标识(reqid)等。

当用户在App上操作产生行为时,行为日志会通过App上的前端埋点回流到 ODPS(即MaxCompute) 中。在“SQL统计”环节,产出“实验报表来源表”。在配置中心配置了若干个指标后,我们会动态组装 SQL, 然后对“实验报表来源表”进行计算、统计,并把结果存到 Hologres 中。在实验报表页面,可以查询到指标数据。

一、离线实验报表

生成离线“实验报表来源表”的代码

CREATE TABLE IF NOT EXISTS experiment_report (
	user_id STRING COMMENT '用户ID',
        exp_id STRING COMMENT '实验ID',
	exposure_count BIGINT COMMENT '曝光次数',
	click_count BIGINT COMMENT '点击次数',
	like_comment_collect_count BIGINT COMMENT '点赞次数'
)
PARTITIONED  by (dt STRING COMMENT '日期')
STORED AS ALIORC;
INSERT OVERWRITE TABLE experiment_report PARTITION (dt = '${bdp.system.bizdate}')
SELECT  user_id
        ,exp_id
        ,SUM(IF(event == 'expose',1,0))
        ,SUM(IF(event == 'click',1,0))
        ,SUM(IF(event IN ('like','comment','collect'),1,0))
FROM    rec_sln_demo_behavior_table_v1
WHERE   ds = '${bdp.system.bizdate}'
GROUP BY user_id
         ,exp_id

离线“实验报表来源表”的格式

字段名称

字段含义

是否必填

说明

user_id

用户ID

用户标识,可以是用户的 uid, 也可以是设备 devcie_id, imei 等

exp_id

实验ID

ab 服务返回的实验id, 通过埋点回流。如果是用户的自己的推荐服务,设置自定义的标识即可。exp_id:ER1_L1#EG1#E1_L2#EG2#E2

维度字段

用于更细粒度的统计效果报表

可以根据此维度字段统计、展示对应的指标。

例如设置一个省(province)字段,按照不同的省来统计,分析产品在不同省的效果。

最多设置两个字段如provincecity,当设置第三个字段的时候组合太多,导致计算非常慢。

常见的维度字段还可以是召回ID(recall_id),即分析不同的召回源的效果。需要先设置PAI-Rec引擎的后端日志,参考其他配置中的pairec_debug_log。

计算字段

计算字段可以是多个,

如曝光次数:show_count;

点击次数:click_count

计算字段是用户填写的数值类型,比如曝光数,点击数,观看时长等

dt

日期分区

格式:yyyyMMdd

hh

小时分区

24小时制, 00 ~ 23

mm

分钟分区

00 ~ 59

来源表可以离线按天产出,也可以小时级报表产出(例如DataWorks中每小时调度一次,统计前一个小时的曝光、点击、购买日志数据),主要看客户的业务需求。如果是离线产出, user_id, exp_id, dt 是必须的。 如果是小时级报表,user_id,exp_id,dt,hh 是必须的,mm 分区不是必须的。

指标分为离线和实时(对应小时级报表)。如果是实时产出的数据源,离线、实时指标可以共用一个数据源。如果是离线产出的数据源,只能创建离线指标,无法创建实时指标。

上面的维度字段也不是必需的,加上维度字段可以对指标进行维度分析。比如常见的维度字段有性别、操作系统(IOS, 安卓)等。这样报表的数据可以分 男女,ios 和 安卓进行查看。

二、实时实验报表来源表

生成“实验报表来源表”的代码

CREATE TABLE IF NOT EXISTS experiment_report_real (
	user_id STRING COMMENT '用户ID',
        exp_id STRING COMMENT '实验ID',
	exposure_count BIGINT COMMENT '曝光次数',
	click_count BIGINT COMMENT '点击次数',
	like_comment_collect_count BIGINT COMMENT '点赞次数'
)
PARTITIONED  by (
    dt string
    ,hh string
)
STORED AS ALIORC;
INSERT OVERWRITE TABLE experiment_report_real PARTITION (dt = '${bdp.system.bizdate}',hh = '${hour}')
SELECT  user_id
        ,exp_id
        ,SUM(IF(event == 'expose',1,0))
        ,SUM(IF(event == 'click',1,0))
        ,SUM(IF(event IN ('like','comment','collect'),1,0))
FROM    rec_sln_demo_behavior_table_v1
WHERE   ds = '${bdp.system.bizdate}'
AND hh = hour(now()) -1
GROUP BY user_id
         ,exp_id;

实时“实验报表来源表”的格式

字段名称

字段含义

是否必填

说明

user_id

用户id

用户标识,可以是用户的 uid, 也可以是设备 devcie_id, imei 等

exp_id

实验id

ab 服务返回的实验id, 通过埋点回流。如果是用户的自己的推荐服务,设置自定义的标识即可。exp_id:ER1_L1#EG1#E1_L2#EG2#E2

维度字段

比如操作系统 os

可以根据此维度字段过滤对应的指标

计算字段

计算字段可以是多个,

如曝光:show_count;点击:click_count

计算字段是用户填写的数值类型,比如曝光数,点击数,观看时长等

dt

日期分区

格式:yyyyMMdd

hh

小时分区

24小时制, 00 ~ 23

mm

分钟分区

00 ~ 59

结果表字段基本都是固定的,只有维度字段是可变的。维度字段的定义与来源表中的定义保持一致即可。

离线指标和实时指标不能混用一个结果表。离线指标结果表只需要有 dt 日期字段即可。实时指标至少要有 hh 小时字段 。

有了“实验报表来源表”之后打开控制台“指标管理-数据注册”页面,即可选择新增MaxCompute数据表。

建议用户直接使用系统默认的Hologres表(不占用用户资源)用于指标计算结果的回写,系统会自动为您建表、存储相关指标数据。当然客户也可以使用自己的Hologres实例表,而不用默认的Hologres表。

三、新增注册MaxCompute

单击新增数据表,需要选择绑定好的MaxCompute项目空间,并选择要新增的MaxCompute当中的数据表,并自定义一个名称,点击开始导入即可导入表中数据。

说明

若您注册的数据表字段结构发生变化,请及时执行重新导入的操作,否则系统可能无法识别到字段变更。

image.png

字段配置

注册好的数据表会自动出现在列表中,您可以点击查看字段按钮查看数据表中的字段,对字段和相关信息进行核对或编辑。其中user_id 、exp_id 、dt字段是必须要有的字段,表示某个用户(user_id)在某天(dt)在一组实验(exp_id)中的曝光、点击、点赞等行为的次数总和。自定义指标就是基于这个表来定义和计算。

image

维度字段

在上面的表中可以增加12个维度字段,例如设置一个city字段作为维度,则在实验报表中可以查看不同city维度下的实验对比效果。如果设置citygender两个维度字段,则是这两个字段组合的实验对比结果。