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资源,可直接进行对话问答。
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
使用CTAS 把mysql 表同步数据 到hologres ,Flink有什么参数可以使hologres 的字段都小写吗?
使用CTAS 把mysql 表同步数据 到hologres ,Flink有什么参数可以使hologres 的字段都小写吗?
327 0
|
8天前
|
分布式计算 DataWorks 关系型数据库
实时数仓 Hologres产品使用合集之如何将MySQL数据初始化到分区表中
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
8天前
|
分布式计算 关系型数据库 数据挖掘
实时数仓 Hologres产品使用合集之误删Hologres一张表的数据,可以支持闪回功能吗
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
1天前
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8天前
|
存储 分布式计算 关系型数据库
实时数仓 Hologres产品使用合集之是否提供相应的功能接口和指令,可以将数据从OSS存储同步到Hologres中进行分析
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
25天前
|
关系型数据库 MySQL Java
实时计算 Flink版产品使用合集之同步MySQL数据到Hologres时,配置线程池的大小该考虑哪些
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
25天前
|
分布式计算 数据处理 MaxCompute
实时计算 Flink版产品使用合集之进行实时处理时,是否需要将所有数据导入到Hologres
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
30天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之用CTAS从mysql同步数据到hologres,改了字段长度,报错提示需要全部重新同步如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
65 8
|
1月前
|
关系型数据库 MySQL Java
实时数仓 Hologres产品使用合集之查询数据的入库时间该怎么操作
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
1月前
|
DataWorks NoSQL Java
DataWorks操作报错合集之在 DataWorks 中运行了一个 Hologres 表的任务并完成了执行,但是在 Hologres 表中没有看到数据,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
37 0

热门文章

最新文章

相关产品

  • 实时数仓 Hologres