本文档介绍为流量调控做数据准备、数据注册的过程
数据准备
1. 实时行为数据
在DataHub准备一个实时行为Topic,至少需要包括用户ID、物品ID、实验ID和事件类型(如点击、购买、播放等)。用来统计生产环境下调控任务的实时流量。
2. 用户表
在MaxCompute 上准备一张用户表,并在特征平台(FeatureStore)上注册为FeatureView,包含的字段至少包含用户ID和圈选用到的特征字段。如:您想只对一线城市的用户进行流量调控,那至少要有一个城市等级字段。
用来圈选流量调控对哪些用户生效,如果不需要对用户圈选,可以准备一张空表。
3. 物品表
在MaxCompute 上准备一张物品表,并在特征平台(FeatureStore)上注册FeatureView,用来圈选调控池,即哪些物品参与调控,和用户表一样,至少要包含物品ID字段和特征字段。此处不能为空表。
数据注册
1. 行为表
在数据注册页面,选择表类型为行为表,数据源类型选择DataHub,数据表名称为自定义名称,选择Datahub项目名称和实时行为数据Topic ,选择完之后会自动导入Topic的Schema。
然后分别指定 user_id、item_id、event_type、event_time、event_time_format和实验ID字段分别是Schema中的哪个字段。
在行为设置(行为枚举值)中,主要设置event_type有哪些值以及中文的行为名称,一般情况下,有 expose、click、like等,那可以设置为 expose:曝光、click:点击,like:喜欢。
2. 物品表
在数据注册页面,选择表类型为物品表,数据表名称为自定义名称,选择 FeatureStore项目,选择特征实体(item侧的),选择目标的特征视图。
在选品特征中,配置字段包括物品ID(STRING 类型)和选品特征字段,需要哪些选品特征字段就配置哪些。
3. 用户表
在数据注册页面,选择表类型为用户表,数据表名称为自定义名称,选择 FeatureStore项目,选择特征实体(user侧的),选择特征视图。和物品表一样,需要哪些圈人特征,就选择并配置哪些。
进阶用法
在正常召回路径,按量或者按照次数调控的物品可能不能被完全召回出来,需要单独做一张召回表和一路召回。为了提高召回效率,已经达成调控目标的物品就不再召回,需要每半小时更新一次召回表是否完成调控目标字段is_complated。
1. 同步实时行为数据
将datahub的实时行为数据rec_sln_demo_behavior_table_v1,pairec_debug_log_prepub落到MaxCompute rec_sln_demo_behavior_table_json_online_v1,pairec_debug_log_prepub上。
登录 DataHub ,进入行为表的topic列表。
点击同步,新建MaxCompute connector。
填入信息后,点击创建。
2. 更新召回表
计算曝光次数,更新是否完成调控目标字段is_complated,在DataWorks内新建odps sql 节点内容如下,配置ODPS SQL 定时调度任务,以 30 分钟为周期增量更新曝光数据。
INSERT OVERWRITE TABLE item_table PARTITION (ds = '${bdp.system.bizdate}') WITH tmp_a AS ( SELECT item_id FROM item_table WHERE ds = '${bdp.system.bizdate}' ) ,tmp_b AS ( SELECT * FROM ( SELECT item_id ,COUNT(*) cnt FROM ( SELECT CAST(GET_JSON_OBJECT(content,'$.item_id') AS BIGINT) item_id ,GET_JSON_OBJECT(content,'$.exp_id') exp_id ,GET_JSON_OBJECT(content,'$.request_id') request_id FROM rec_sln_demo_behavior_table_json_online_v1 WHERE ds = TO_CHAR(DATEADD(TO_DATE('${bdp.system.bizdate}','yyyymmdd'),+1,'dd'),'yyyymmdd') AND GET_JSON_OBJECT(content,'$.request_id') != '' ) GROUP BY item_id ) WHERE cnt > 30 )SELECT a.item_id ,CASE WHEN b.item_id IS NOT NULL THEN 0 ELSE 1 END AS is_complated FROM tmp_a a LEFT JOIN tmp_b b ON a.item_id = b.item_id ; INSERT OVERWRITE TABLE item_table_prepub PARTITION (ds = '${bdp.system.bizdate}') WITH tmp_a AS ( SELECT item_id FROM item_table_prepub WHERE ds = '${bdp.system.bizdate}' ) ,tmp_b AS ( SELECT * FROM ( SELECT item_id ,COUNT(*) cnt FROM ( SELECT `request_id` ,SPLIT_PART(col1_new,':',1) AS item_id ,exp_id FROM pairec_debug_log_prepub LATERAL VIEW EXPLODE(SPLIT(`items`,'},')) adTable AS col1_new WHERE `module` = 'recommend' AND ds = TO_CHAR(DATEADD(TO_DATE('${bdp.system.bizdate}','yyyymmdd'),+1,'dd'),'yyyymmdd') ) GROUP BY item_id ) WHERE cnt > 30 )SELECT a.item_id ,CASE WHEN b.item_id IS NOT NULL THEN 0 ELSE 1 END AS is_complated FROM tmp_a a LEFT JOIN tmp_b b ON a.item_id = b.item_id ;同步item_table 到featureDB用于召回。点击FeatureStore的数据同步,粘贴同步代码,依旧部署半小时粒度的 ODPS SQL 定时调度任务。
在 FeatureStore 特征视图列表中,找到目标特征视图(如 home_feed_new_item_1500_v2),单击右侧的数据同步。
进入 DataWorks 数据同步任务配置页面,选择运行方式为集群或独享资源组,在代码编辑区域粘贴 FeatureStore 提供的同步代码,完成后部署任务。