Hologres在阿里搜索推荐实时数据场景下即席多维分析的最佳实践

简介: 阿里巴巴搜索推荐作为淘系核心流量入口,数据量大,对接的业务场景繁多,且需求变化快,同时对数据的实时性和准确性要求都很高。本文旨在分享如何通过Hologres的性能优势实现数据输出的交互式、个性化、高扩展性和即席多维分析。

作者:兰乾 阿里巴巴搜索推荐高级开发工程师

一、业务背景

阿里巴巴搜索推荐作为淘系核心流量入口,数据量大,对接的业务场景繁多,且需求变化快,同时对数据的实时性和准确性要求都很高,尤其在各业务方大促KPI完成度监控,并支撑算法迭代即时效果监控加快迭代速度,同时也为算法在线模型提供实时训练样本,提升算法效果等方面有着迫切的需求,因此为了满足这些实时数据的需求,在搭建稳定的数据体系过程中,需要解决许多痛点:

1)数据量大,资源有限下,需做到数据生产基本无延迟,并且查询秒级内响应
2)查询维度繁多,且不固定,随时可能新增维度,需要丰富的明细数据支撑,且具备高扩展性和灵活性
3)原始日志信息有限,需动态补充满足个性化数据需求;
4)任务、场景多,数据输出格式需要统一化,降低维护和对接成本;
5)需求迭代快,Blink作业频繁变更启停,增加系统不稳定性,需要实现Blink作业变更配置化。

对于实时数据而言,实时性与正确性是最基本的要求,另外鉴于上面提到的痛点和需求,搜索推荐部门结合Blink、交互式查询引擎Hologres,不断优化数据研发架构,最终实现了集数据输出格式化、查询交互式/个性化、Blink任务模板化以及Blink作业变更配置化等功能为一体的大数据研发架构,如下图所示:
1.jpeg

二、实现原理

2.1 如何实现数据输出的交互式、个性化、高扩展性

数据输出的交互式、个性化、高扩展性,我们主要结合了Hologres 行存表列存表优势来实现。

要实现数据输出的交互式、个性化、高扩展性,依赖数据中丰富维度,比如商品、商家、用户的各种特征属性,或者某次用户行为下的特定场景属性等,这些维度(属性)有些是相对固定的基本属性,比如用户的城市、年龄、商品的类目等信息,但有些是有业务独立特征的个性化属性,比如特定的一批商品、特定的一些用户场景等,这些业务上个性化的属性,随时都在新增或删减,并且每个业务查询的维度是不同的,这样不仅需要搭建交互式的多维数据分析可视化输出,还需要能够灵活支持不同业务场景个性化的数据诉求。

个性化维度(属性)主要来源于两个地方,一个是数据采集阶段提取的动态化场景信息,如算法分桶信息等;另一个是原始日志中缺失的个性化信息,例如商品、商家、用户的个性化特征,这些个性化的动态特征最后都按不同的对象属性存储到Hologres列存表对应的多值字段中,例如商品、商家、用户、场景维度信息分别对应Hologres列存表中的多个多值字段:

1)原始日志动态化场景信息

随着不同业务的不同变化,每个业务服务端会将新增的业务信息(维度)下发移动客户端,上报日志中心, 数据研发工程师对应更改日志解析配置,搭配Blink作业变更配置化,就可以0代码发布实现新增维度的无痕提取与透出,对应的业务产品及算法即可在15分钟内查询到该新增维度下的实时数据,例如算法实验动态分桶效果分析等。

如下表1所示,将用户vs商品vs商家行为日志,如曝光、点击、成交、加购等明细日志分别存入各自Hologres列存表,几张Hologres列存表使用同一套schema,其中丰富的多值字段中存放一些从原始日志中提取的信息以及在Blink中关联商品(商家、用户)Hologres行存维表获取的补充信息,是支持交互式/个性化查询的核心字段,高可扩展性和灵活性即席多维分析核心字段。

按照 Who+What+When+ Where + How形式对表schema进行设计,其中How(何事,频次)按用户行为是曝光、点击还是成交加购拆分到不同的表中,行为发生频次则与Who+What+When+ Where 一同设计到表schema中,如下:
2.png

表1 用户vs商品vs商家行为日志->Hologres列存表

类型 字段 说明
基础信息字段 When(时间): second_timestamp
Who(人): user
What(货): item,seller
Where(场): channel
人货场以及事件发生的时间信息
指标字段 How: count,number,amount 人货在场上行为发生的次数(如成交次数
、商品浏览次数)、其他指标(如成交金额、浏览时长等)
多值(维度)扩展字段 item_tags,user_tags,bts_tags,algo_tags
,scene_tags,debug_tags
存放一些日志中提取的信息以及维表关联获取的补充信息,是支持交互式/个性化查询的核心字段,高可扩展性和灵活性即席多维分析核心字段

2)维表关联提取动态个性化信息

为了尽可能地支持更多维度、更个性化和可扩展的查询,若想保留越多的维度特征信息,数据聚合度越高,特征信息损失越多,因此,在Blink作业中将【用户的明细日志】关联上Hologres行存表中商品、商家、用户等对象多种可动态扩展属性后, 并将属性作为多值字段直接写入 Hologres列存表 中,实现任意交叉维度的数据输出。

使用Hologres行存表,存储商品、商家、用户等对象的特征维度信息,每个对象一张Hologres行存表,如下表格2所示为商品的Hologres行存表部分字段, 商家、用户表基本逻辑一致:

表2 商品属性特征->Hologres行存表

字段 说明
item_id 商品id,行存表主键
cate_id等 类目等信息
tags 维度核心字段,商品扩展属性信息,多值,固定分隔符拆分不同属性值,对应数据查询的扩展维度,在blink作业中该字段会合入用户行为Hologres列存表中对应的多值字段item_tags中,最终输出到数据报表中的可查询维度

将海量商品、用户的特征信息存入对应的Hologres行存表,并将业务输入的个性化动态属性定时写入Hologres行存表预留字段,几十亿商品的特征信息仅耗时5分钟完成数据切换,结合Blink partition join 缓存机制,缓存命中率高达97%,使得千万级join qps 实际请求Hologres行存表时仅有几十万qps,行存表中tags信息通过Blink作业关联加工后,最终输出到Hologres列存表,作为查询维度供交互式分析使用。

2.2 如何实现Blink作业变更配置化

面对层出不穷的需求变化,但考虑到日志中存在无效信息,并未将日志中全部信息提取作为可查询维度,需要根据需求变化变更Blink SQL提取,加上Blink作业频繁启停也会增加运维成本,增加业务迭代的人工和时间成本。因此使用MaxCompute(原odps)小表存储日志过滤和解析配置,仅需变更配置内容,将新提取的信息自动写入到Hologres中指定多值字段中,无需变更Blink作业和Hologres表结构,该新增信息就可作为维度任意查询和输出

由于Blink中需要通过发布及启停作业才能读取配置化的信息,继而完成对实时数据处理的变更,但是搜索推荐所有业务是共用一套Blink作业,且业务频繁变更,但如果因为个别业务频繁变动公共Blink作业,对实时数据体系影响较大,又考虑到搜索推荐实时数仓中选择使用明细数据,因此,在Blink作业中额外关联ODPS表(_存储数据解析及过滤配置,由于表极小,可全量缓存在Blink机器上_),其中数据解析与过滤配置与存储用户行为日志的Hologres列存表schema是一一对应的,获取到作业所需的解析及过滤配置后,并将上游数据和解析配置同时作为入参输入到通用的日志处理UDTF中,并按表格1中用户vs商品vs商家行为日志->Hologres列存表的schema格式输出数据。**这样仅需变动ODPS表中存储的解析配置信息,即可无痕将从日志中额外提取的信息输出到Hologres列存表中对应的多值字段作为维度可查了。

表3 Blink任务数据解析及过滤配置->ODPS表
3.png

2.3 小结

目前搜索推荐大部分作业通过Blink开发产出的是实时明细数据,也就是说并非聚合数据,这样搭配交互式查询引擎Hologres,可以自由维度查询,但对交互式查询引擎的要求较高; 若维度相对固定,可以做些轻度聚合后,数据输出到igraph,Hologres,Hbase等存储与查询引擎,可节省资源,但扩展性差,且新增维度需要修改Blink任务。

总的来说,基于__海量的明细用户日志__,__Hologres__高达几千万__QPS__的写入性能,以及灵活的__多值字段__设计,优秀的全局去重能力__,搭配动态维度无变更接入解决方案,使得__搜索推荐实时大数据在低开发成本、低运维、0沟通情况下,既保证了实时数据的实时性和准确性,又提升数据交互式即席分析的个性化、灵活性和高扩展性。

三、即席多维分析场景实战

接下来详细介绍如何通过Hologres和Blink实现1小时内无痕新增分析维度,接入即席多维分析实战场景中。
4.jpeg

 3.1 原始日志动态化场景信息

例如需要添加实验桶信息,搜索推荐由于场景复杂,采用的复杂的交叉分桶模式,一次用户行为对应多个实验分桶,每时每刻都会有新增的实验分桶,服务端只需将新增的分桶信息下发客户端,通过数据采集之后,自动转换成Hologres列存表特定多值字段如algo_tags的值,该分桶对应实时数据则可即发即查,加快算法迭代周期。

为减轻存储和计算压力,仅从原始日志中提取核心维度放入Hologres列存表多值字段,因此对于特定业务,新增的个性化场景信息,可以通过变更ODPS表中存放的数据解析配置,即可无痕将新增的个性化场景信息转换成维度添加到Hologres列存表对应多值字段中,例如在推荐中新增的红包业务,且需要将对应的红包信息转换成查询维度,在推荐仅维护一套Blink作业和Hologres表的情况下,基于统一的日志规范,无需任何变更,自动在推荐实时数仓中新增了红包场景数据,另外红包业务中携带的红包信息,则需要在ODPS表中解析配置里新加相应的提取逻辑,比如设置成将日志中红包唯一识别码的值放置到Hologres列存表的scene_tags字段中,则该红包识别码即可作为维度供业务查询分析使用,监控红包曝光等实时效果。

 3.2 维表关联提取动态个性化信息

面对海量的实时数据,如何快速精准地获取、监控我想要的数据呢?这就需要给数据带上所需的维度或特征信息,简单来说主要有以下几点:

1)原始数据日志在大部分情况下,缺失商品类目、行业,用户地域等基本属性;
2)除了使用通用的类目、行业等基本信息,还需要监控某些特定的商品、某些核心的商家、某些特殊的人群下的数据情况,是需要有对应的个性化属性的。
3)如果不关联上基本属性或个性化属性维度信息,就没办法直接过滤查询获取到对应维度下的数据,需要额外关联并二次加工才可获取,无法灵活查询,做不到任意个性化维度的交互式查询。

总结来说,不同业务场景对实时数据都会有不同的需求,需要监控或使用各种基本属性和个性化属性维度下实时数据,但如何满足各种各样个性化的实时数据需求呢?
如下图所示,搭建了维度特征管理平台Seahummer,支持商品、商家、用户等对象的标签特征管理,根据业务方配置的个性化属性,比如卖家分层、用户分层,以及各种自定义的业务属性等,关联到对应的商品/商家/用户上,最终产出对应MaxCompute(odps)维表,并导入Hologres行存表中,在Blink流作业里,关联对应Hologres行存表即可获取相应的基本属性和个性化属性,并标记到Hologres列存表实时数据上输出,这些属性最终以多值字段的形式存储在Hologres列存表中,作为查询维度呈现在可视化报表。

维度的增减,无需更改Blink作业,整体维度变更链路最慢小时内完成维表数据切换,目前业务方已能通过seahummer平台自助打标后,在通天塔数据门户(阿里巴巴内部的一款分析软件)中自助即席多维分析,涵盖1000+自定义维度信息,无需开发同学额外支持,解放人力,减少沟通成本。

1)对象——商品、商家、用户
2)标签数据来源——odps、excel
3)基本属性——商品/商家名称、类目、行业、BC类型,用户地域等
4)个性化属性——指定商品池、特殊人群、商家等
5)与Blink实时流作业打通——Blink流任务关联Hologres维表即可获取相应的基本属性和个性化属性

5.jpeg

例如算法新上线了分桶实验,需要对特定商品或人群采取特定的算法策略,只需要对这些商品或用户通过维度特征管理平台Seahummer录入,对应标签则自动流入到相应商品或用户的Hologres行存表中的tags字段,并转换成了用户行为Hologres列存表中的item_tags或user_tags多值字段中,最后以自定义、可扩展查询维度的形式透出在可视化报表中;上述红包业务例子中,需要对重点目标人群倾斜部分曝光流量,这时候同理将重点目标人群打上标识,即可监控目标与非目标人群曝光流量对比,适时调整算法策略,完成业务目标。

四、业务价值

4.1自定义交互式即席多维查询

依托Hologres强大的多维分析能力,以及高并发、无延迟实时写入和全局去重能力,其中全局去重能力解决了在Blink作业异常情况下数据去重问题,保障了数据一致性。在日常及大促期间,承接了搜索推荐海量流量数据,支持搜索推荐算法AB实验实时效果分析,除了有对应的实时数据多维交互式可视化报表以外,还提供了实时数据服务支持算法在线调用,自动调整算法策略,此外生产的实时数据流,还在Blink中用于算法实时模型训练,加快了算法迭代周期,达到任意查询维度结果秒级响应。

在支持算法AB实验即时查询分析的同时,还支持商家、商品、用户等对象各类属性及标签多维度下的自由查询,比如用户年龄、城市等级分层等,以及通过维表或流量日志接入的可扩展的自定义标签及维度,极大地扩展了不同算法、产品、运营、分析师角色即时分析的自由度和灵活性。

4.2某特定业务实时大屏

依托Hologres的多维分析能力,还可以针对某些特定独立业务搭建实时监控大屏,比如在该业务促销活动期间,监控对应的成交和KPI完成度,以及分析当前业务触达及消费的人群特征分布,用于即时调整运营策略,完成KPI。

相关实践学习
基于Hologres+PAI+计算巢,5分钟搭建企业级AI问答知识库
本场景采用阿里云人工智能平台PAI、Hologres向量计算和计算巢,搭建企业级AI问答知识库。通过本教程的操作,5分钟即可拉起大模型(PAI)、向量计算(Hologres)与WebUI资源,可直接进行对话问答。
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
使用CTAS 把mysql 表同步数据 到hologres ,Flink有什么参数可以使hologres 的字段都小写吗?
使用CTAS 把mysql 表同步数据 到hologres ,Flink有什么参数可以使hologres 的字段都小写吗?
281 0
|
2月前
|
存储 JSON BI
友盟+Hologres:千亿级多维分析平台建设实践
Hologres 在友盟+统计分析、营销等多个产品线使用,很好地满足了用户行为分析、人群圈选与洞察场景的多维度分析、灵活下钻、快速人群预估和圈选等分析需求,提供客户更流畅的数据查询和分析体验。
|
3月前
|
SQL 存储 分布式计算
Hologres实时湖仓能力增强,挑战5分钟加速分析OSS数据
5分钟快速使用Hologres实时湖仓能力,无需移动数据,直接加速读取存储于数据湖OSS上的Hudi、Delta、Paimon等格式类型的数据
|
3月前
|
存储 对象存储 SQL
【获奖名单公示】Hologres实时湖仓分析挑战赛
5分钟快速使用Hologres实时湖仓能力,无需移动数据,直接加速读取存储于数据湖OSS上的Hudi、Delta、Paimon等格式类型的数据
【获奖名单公示】Hologres实时湖仓分析挑战赛
|
4月前
|
SQL 存储 运维
带你读《Apache Doris 案例集》——08秒级数据写入,毫秒查询响应,天眼查基于 Apache Doris 构建统一实时数仓(1)
带你读《Apache Doris 案例集》——08秒级数据写入,毫秒查询响应,天眼查基于 Apache Doris 构建统一实时数仓(1)
270 0
|
4月前
|
存储 SQL 关系型数据库
带你读《Apache Doris 案例集》——08秒级数据写入,毫秒查询响应,天眼查基于 Apache Doris 构建统一实时数仓(2)
带你读《Apache Doris 案例集》——08秒级数据写入,毫秒查询响应,天眼查基于 Apache Doris 构建统一实时数仓(2)
318 0
|
4月前
|
存储 分布式计算 MaxCompute
Hologres RoaringBitmap实践:千亿级画像数据秒级分析
Hologres RoaringBitmap实践:千亿级画像数据秒级分析
407 1
|
4月前
|
安全
Hologres中,为了保障数据的安全性和稳定性
Hologres中,为了保障数据的安全性和稳定性
27 2
|
7月前
|
存储 JSON 自然语言处理
【ODPS新品发布第2期】实时数仓Hologres:推出计算组实例/支持JSON数据/向量计算+大模型等新能力
本期将重点介绍Hologres推出计算组实例,Hologres支持JSON数据 ,Hologres向量计算+大模型能力,Hologres数据同步新能力,Hologres数据分层存储
|
7月前
|
存储 分布式计算 MaxCompute
Hologres RoaringBitmap实践,千亿级画像数据秒级分析
本文将会分享Hologres RoaringBitmap 方案在画像分析的应用实践,实现更快更准的画像分析。

相关产品

  • 实时数仓 Hologres