简单来讲,就是在标签、数据源等元数据管理的基础上,通过各种圈选条件生成SQL查询语句,执行具体查询,结果导出以应用的过程。
以圈人为例,知识点梳理思路
圈品流程类似
业务流程是什么?
对应的技术流程又是什么?
每个流程的技术难点有什么?
业务流程
人群分析的目的
- 通过对目标人群的分析,找到问题可能的原因,并进行运营投放、AB实验等,以达到提升用户活跃,提升留存,用户增长等目标
典型的使用场景
- 分析支付宝交易量在哪些用户群体下还可能有提升空间,这时要分析用户的画像分布。或者了解下待运营用户行为特征,画像特征,匹配适合的承接内容【单人群统计分析/最大特征分析】
- 支付宝交易笔数下降了,分析这段时间内交易用户 和 之前的交易用户的差异在哪里,针对于这部分差异用户再进一步分析为什么他们流失了【人群差异分析】
- 根据历史的流失用户群体,预测未来可能流失的用户,提前预防流失【业务流失预测】
人和品圈选的结合
电商的核心是人和品的匹配。圈人和圈品如何分隔来 体现不出来合力,做不到好的人货匹配。 在圈品的同时能够同时给出这些品该投什么人,这才能提升匹配效率。更进一步,运营只给定“主题”(目的),算法能力给出品和人的集合。
典型的人群分析流程
- 1、圈人
- 可以基于平台已有的权威标签来圈人(个人理解:平台标签应该只是标签,他们需要与业务数据进行join,标签+业务数据 得到全集后才能进行分析)
- 可以来源于BI的odps表
- 可以基于已有的人群,根据算法找到相似特征的人群,帮助发现潜在用户
- 2、分析
- 洞察分析(人群统计分析、单人群最大特征分析、多人群对比分析,业务流失预测)
- 漏斗分析:比如,当日新登用户,进入手淘后的行为漏洞是怎样的
- 留存分析:比如,当日新登用户,点击了淘金币签到(起始行为)后,后续15日内的手淘回访(留存行为)留存曲线是怎样的
- 其他分析手段
- 人群分桶:将一个人群一分为N(个人理解,可以做AB实验使用,对比实验人群和基准人群的差异)
技术流程
创建人群
方式
- 文件上传
- ODPS表引入
- 标签圈选
- 算法圈选(比如通过种子人群放大):如何放大的,如何管理和执行算法的
技术点
这里是不是要提前建立人群集元数据。背后需要先做什么?
这里就是huangjince做的事情,元数据管理。包括底层数据表的引入和管理等。这一步的作用是让后面圈选时知道往哪里查。
算法圈选中,人群放大算法是如何做的。工程上如何管理和执行算法?
人群计算
技术点
人群规模预估
交并差:如何做的?
SQL生成模块(重点)
- 在标签圈人场景下,通过前台的结构化的圈人条件(一般与业务场景强相关),转换为完整的SQL语句的过程
yuque-domain/ae-ba/rgblzg/qf3hkt
从顶层来看,每个SQL语句都可以从有这样的层级结构 TableScan(最基础的查询语句,select from table) Filter(where) Limit(limit) AGG(count) 每一层都是执行计划的一个步骤,每一层都会生成该层的sql,每一层都是一个完整的sql语句。 以”select from table where a=xx”为例,会生成如下的sql语句: select from (select from table) where a=xx 这样生成的语句是会冗余,但这是一个标准的逻辑执行计划,在底层引擎执行时实际还会先优化(简化)SQL,然后最终执行时,还会再反过来生成“冗余”形式的执行计划。
生成器分为哪几个模块呢?
- expression部分:in 、like、and这些都是Expression。每个Expression有自己的toSql定义
- relation部分:filter、limit、agg这些称之为relation,每个relation也有自己的to sql定义
一些核心类
- TableScan:代表最基础的查询语句部分
- TableSchema:代表不同的查询模式;比如单表查询,join查询等
原始查询逻辑JSON定义 -> TableSchema -> Table (转换为Relation定义)-> 根据Relation就可以拼sql了(Relation有各自的toSql定义)
人群是如何被使用的
技术点
圈人能力如何给业务系统用?
- 判定:
- 目的是什么?(个人理解:判定某个人是否属于某个群组,比如发红包)
- 方案是什么?为什么会有近端包的方式?
- 导出:
- 结果导出到某处(个人理解一般是这样:查询adb-> adb结果快照 -> odps离线存储 -> hbase等引擎实时查询;当然也可能有其他方式 ),然后业务用于投放等
- 查询
群组导出
- 一般会将圈选逻辑作为异步任务的形式运行,任务执行结果导出到某个存储;
- 客户端接受执行结果的消息通知,主动查询dump结果
yuque-domain/ae-ba/rgblzg/okpng3
yuque-domain/ae-ba/rgblzg/un414k
快照的含义?
- 可以理解为查询结果集。一般会有一个ID 来 标识某次查询结果,并以此ID查询结果
这里面的workflow机制是什么样的?
查询、导出等都定义为一个节点,执行过程抽象为一个workflow
以圈品为例,知识点梳理思路
核心服务能力有哪些
场景
- 商品投放:圈品投放到C端用户或搜索推荐
- 在线判定:下游系统调用服务判断某个商品是否在某个商品集里,常见场景:detail页面透标
技术能力
- 商品圈选:基本都是采用OLAP能力
- 在线化服务:一般是打平到itemId上,kv存储,快速查询
- 实时化服务:商品投放一般采用odps存储结果集,业务系统直接用odps的数据构建到自己的业务存储中再使用。 但大促场景 需要选品后 会场实时调控生效,不满足诉求的,所以需要实时链路。
核心技术难点
大数据量导出/同步
不管实时导出还是离线导出 都需要 支持 大数据量的高并行的导出
基本流程:
- T+1针对每个群组生成导出任务,从OLAP导出到odps
- 所有任务结果经过一致性处理(表示数据是否已经完备)得到最终结果数据给业务
这里面工程上有哪些优化点 ?待完善
可能的优化方向:并发
实时化能力
应对大促等实时调控场景
这里主要依赖和下游业务系统深度打通和联动。
- 业务系统触发圈选引擎 dump:olap-adb
- 导出完成后,通知业务系统可用
自定义编排能力
不同的业务场景深度合作时可能有不同的流程,比如商品集导出到odps后,需要和一些业务odps数据做一些合并处理后生成最终结果集。这种都属于业务特定逻辑,平台支持自定义编写组件 和 定义workflow
混合场景查询能力
既要明细查询,也要有实时 离线的混合指标分析(OLAP)
这里主要是引擎的选择
其他问题
群组导出 目前是从olap导出到odps,能否减少这一步的倒来倒去的成本,进一步提升实时性,直接将olap透出给业务