您的位置:首页 > 移动互联

滴滴 x StarRocks:极速多维分析创造更大的业务价值

发布时间:2022-07-27 13:36:43  来源:互联网     背景:

  滴滴集团作为生活服务领域的头部企业,正在全面测试和上线StarRocks。其中橙心优选经过一年多的数据体系建设,我们逐渐将一部分需要实时交互查询、即席查询的多维数据分析需求由ClickHouse迁移到了StarRocks中,StarRocks在稳定性、实时性方面也给了我们良好的体验,接下来以StarRocks实现的漏斗分析为例介绍StarRocks在橙心优选运营数据分析应用中的实践。

  作者:王鹏 滴滴橙心优选数据架构部资深数据架构开发工程师,负责橙心优选大数据基础服务和数据应用的开发与建设

  需求介绍

  当前我们数据门户上的漏斗分析看板分散,每个看板通常只能支持一个场景的漏斗分析,不利于用户统一看数或横向对比等,看板无法支持自选漏斗步骤、下钻拆解等灵活分析的功能。因此,我们需要一款能覆盖更全的流量数据,支持灵活筛选维度、灵活选择漏斗,提供多种分析视角的漏斗分析工具,并定位流失人群、转化人群,从而缩小问题范围,精准找到运营策略、产品设计优化点,实现精细化运营。

  技术选型

  电商场景的流量日志、行为日志一般会比传统场景下的数据量大很多,因此在这样的背景下做漏斗分析给我们带来了两大技术挑战:

  ·日增数据量大:日增千万级数据,支持灵活选择维度,如何快速地对亿级数据量进行多维分析

  ·对数据分析时效性要求高:如何快速地基于亿级数据量精确去重,获取符合条件的用户数量

  StarRocks与ClickHouse在橙心内部都有广泛的应用,我们也积累了丰富的经验,但StarRocks在易用性和可维护性上都比ClickHouse更胜一筹,下面这张表格是我们在使用过程中对两者功能的一个简单对比:

  经过不断地对比和压测,我们最终决定使用StarRocks来存储需要进行漏斗分析的数据,因为StarRocks在SQL监控、运维方面相比ClickHouse的优势明显,而且我们可以为了满足不同的查询场景,基于漏斗分析明细表创建各种各样的物化视图,提高多维数据分析的速度。

  系统架构

滴滴 x StarRocks:极速多维分析创造更大的业务价值

系统各层职责说明如下:

  1、数据源:主要是web端、客户端的埋点日志,这些埋点日志源源不断地上传给我们的数据接入层

  2、数据接入层:

  (1)数据接入总线:提供多种数据源的接入接口,接收并校验数据,对应用层屏蔽复杂的数据格式,对埋点日志进行校验和简单地清洗、转换后,将日志数据推送到Kafka集群

  (2)Kafka集群:数据接入总线与数据计算集群的中间层。数据接入总线的对应接口将数据接收并校验完成后,将数据统一推送给Kafka集群。Kafka集群解耦了数据接入总线和数据计算集群,利用Kafka自身的能力,实现流量控制,释放高峰时日志数据量过大对下游计算集群、存储系统造成的压力

  3、数据计算与存储层:

  (1)数据计算集群:数据存入Kafka集群后,根据不同的业务需求,使用Flink或者Spark对数据进行实时和离线ETL,并批量保存到StarRocks数据仓库

  (2)StarRocks数据仓库:Spark+Flink通过流式数据处理方式将数据存入StarRocks,我们可以根据不同的业务场景在StarRocks里创建明细表、聚合表和更新表以及物化视图,满足业务方多样的数据使用要求

lg经济研究院 北京

  4、数据服务层:内部统一指标定义模型、指标计算逻辑,为各个应用方提供统一的离线查询接口和实时查询接口

  5、漏斗分析系统:支持灵活创建和编辑漏斗,支持漏斗数据查看,漏斗明细数据导出

  6、数据中台:围绕大数据数据生产与使用场景,提供元数据管理、数据地图、作业调度等通用基础服务,提升数据生产与使用效率

  详细设计

  目前,基于StarRocks的bitmap类型只能接受整型值作为输入,由于我们原始表的user_id存在字母数字混合的情况,无法直接转换成整型,因此为了支持bitmap计算,需要将当前的user_id转换成全局唯一的数字ID。我们基于Spark+Hive的方式构建了原始用户ID与编码后的整型用户ID一一映射的全局字典,全局字典本身是一张Hive表,Hive表有两个列,一个是原始值,一个是编码的Int值。以下是全局字典的构建流程:

  1、将原始表的字典列去重生成临时表:

  临时表定义:

  create table 'temp_table'{

  'user_id' string COMMENT '原始表去重后的用户ID'

  }

  字典列去重生成临时表:

  insert overwrite table temp_table select user_id from fact_log_user_hive_table group by user_id

  2、临时表和全局字典进行left join,悬空的词典项为新value,对新value进行编码并插入全局字典:

  全局字典表定义:

  create table 'global_dict_by_userid_hive_table'{

  'user_id' string COMMENT '原始用户ID',

  'new_user_id' int COMMENT '对原始用户ID编码后的整型用户ID'

  }

  将临时表和全局字典表进行关联,未匹配中的即为新增用户,需要分配新的全局ID,并追加到全局字典表中。全局ID的生成方式,是用历史表中当前的最大的用户ID加上新增用户的行号:

  --4 更新Hive字典表

  insert overwrite global_dict_by_userid_hive_table

  select user_id, new_user_id from global_dict_by_userid_hive_table

  --3 与历史的字段数据求并集

  union all select t1.user_id,

  --2 生成全局ID:用全局字典表中当前的最大用户ID加上新增用户的行号

  (row_number() over(order by t1.user_id) + t2.max_id) as new_user_id

  --1 获得新增的去重值集合

  from

  (

  select user_id from temp_table

  where user_id is not null

  ) t1

  left join

  (

  select user_id, new_user_id, (max(new_user_id) over()) as max_id from

  global_dict_by_userid_hive_table

  ) t2

  on

  t1.user_id = t2.user_id

  where t2.newuser_id is null

  3、原始表和更新后的全局字典表进行left join,将新增用户的ID和编码后的整型用户ID插入到原始表中:

  insert overwrite fact_log_user_hive_table

  select

  a.user_id,

  b.new_user_id

  from

  fact_log_user_hive_table a left join global_dict_by_userid_hive_table b

  on a.user_id=b.user_id

  4、创建Spark离线同步任务完成Hive原始表到StarRocks明细表的数据同步:StarRocks表fact_log_user_doris_table定义(Hive表fact_log_user_hive_table与该表的结构一致):

  CREATE TABLE `fact_log_user_doris_table` (

  `new_user_id` bigint(20) NULL COMMENT "整型用户id",

  `user_id` varchar(65533) NULL COMMENT "用户id",

  `event_source` varchar(65533) NULL COMMENT "端(1:商城小程序 2:团长小程序 3:独立APP 4:主端)",

  `is_new` varchar(65533) NULL COMMENT "是否新用户",

科沃斯商用机器人清洁新品发布会

apple watch 发售

  `identity` varchar(65533) NULL COMMENT "用户身份(团长或者普通用户)",

  `biz_channel_name` varchar(65533) NULL COMMENT "当天首次落地页渠道名称",

windows和android哪个好

  `pro_id` varchar(65533) NULL COMMENT "省ID",

  `pro_name` varchar(65533) NULL COMMENT "省名称",

苹果手机竞争优势

微美全息股票

  `city_id` varchar(65533) NULL COMMENT "城市ID",

  `city_name` varchar(65533) NULL COMMENT "城市名称",

  `dt` date NULL COMMENT "分区",

  `period_type` varchar(65533) NULL DEFAULT "daily" COMMENT ""

  ) ENGINE=OLAP

  DUPLICATE KEY(`index_id`, `user_id`, `biz_channel_name`, `pro_id`, `city_id`)

  PARTITION BY RANGE(`dt`)(

  PARTITION p20210731 VALUES [('2021-07-31'), ('2021-08-01')),

华为VR峰会

  PARTITION p20210801 VALUES [('2021-08-01'), ('2021-08-02')),

  PARTITION p20210802 VALUES [('2021-08-02'), ('2021-08-03')),

  PARTITION p20210803 VALUES [('2021-08-03'), ('2021-08-04')),

  PARTITION p20210804 VALUES [('2021-08-04'), ('2021-08-05')),

  PARTITION p20210805 VALUES [('2021-08-05'), ('2021-08-06')),

  PARTITION p20210806 VALUES [('2021-08-06'), ('2021-08-07')),

  PARTITION p20210807 VALUES [('2021-08-07'), ('2021-08-08')),

  PARTITION p20210808 VALUES [('2021-08-08'), ('2021-08-09')))

  DISTRIBUTED BY HASH(`index_id`, `user_id`) BUCKETS 10

  PROPERTIES (

  "replication_num" = "3",

  "dynamic_partition.enable" = "true",

  "dynamic_partition.time_unit" = "DAY",

  "dynamic_partition.time_zone" = "Asia/Shanghai",

  "dynamic_partition.start" = "-2147483648",

  "dynamic_partition.end" = "1",

  "dynamic_partition.prefix" = "p",

  "dynamic_partition.replication_num" = "-1",

  "dynamic_partition.buckets" = "3",

  "in_memory" = "false",

  "storage_format" = "DEFAULT"

  );

  在这里我们使用了StarRocks的明细模型来建表,满足用户查询漏斗明细数据的使用场景,在明细表上根据不同的多维漏斗分析查询需求创建相应的物化视图,来满足用户选择不同维度查看漏斗模型每一步骤用户精确去重数量的使用场景。

  5、创建bitmap_union物化视图提升查询速度,实现count(distinct)精确去重:

  由于用户想要在漏斗模型上查看一些城市用户转化情况。

海尔专利金奖

  查询一般为:

  select city_id, count(distinct new_user_id) as countDistinctByID from fact_log_user_doris_table where `dt` >= '2021-08-01' AND `dt` <= '2021-08-07' AND `city_id` in (11, 12, 13) group by city_id

  针对这种根据城市求精确用户数量的场景,我们可以在明细表fact_log_user_doris_table上创建一个带 bitmap_union 的物化视图从而达到一个预先精确去重的效果,查询时StarRocks会自动将原始查询路由到物化视图表上,提升查询性能。针对这个case创建的根据城市分组,对user_id进行精确去重的物化视图如下:

  create materialized view city_user_count as select city_id,bitmap_union(to_bitmap(new_user_id)) from fact_log_user_doris_table group by city_id;

  在StarRocks中,count(distinct)聚合的结果和bitmap_union_count聚合的结果是完全一致的。而bitmap_union_count等于bitmap_union的结果求 count,所以如果查询中涉及到count(distinct) 则通过创建带bitmap_union聚合的物化视图方可加快查询。因为new_user_id本身是一个INT类型,所以在 StarRocks 中需要先将字段通过函数to_bitmap转换为bitmap类型然后才可以进行bitmap_union聚合。

  采用这种构建全局字典的方式,我们通过每日凌晨跑Spark离线同步任务实现全局字典的更新,以及对原始表中 Value 列的替换,同时对Spark任务配置基线和数据质量报警,保障任务的正常运行和数据的准确性,确保次日运营和市场同学能看到之前的运营活动对用户转化率产生的影响,以便他们及时调整运营策略,保证日常运营活动效果。

  最终效果及收益

  经过产品和研发同学的共同努力,我们从需要查询的城市数量、时间跨度、数据量三个维度对精确去重功能进行优化,亿级数据量下150个城市ID精确去重查询整体耗时3秒以内,以下是漏斗分析的最终效果:

滴滴 x StarRocks:极速多维分析创造更大的业务价值

未来规划

  1.完善StarRocks内部工具链的开发,同滴滴大数据调度平台和数据开发平台整合,实现MySQL、ES、Hive等数据表一键接入StarRocks。

  2.StarRocks流批一体建设,由于StarRocks提供了丰富的数据模型,我们可以基于更新模型和明细模型以及物化视图构建流批一体的数据计算与存储模型,目前正在方案落地阶段,完善后会推广到橙心各个方向的数据产品上。

  3.基于StarRocks On ElasticSearch的能力,实现异构数据源的统一OLAP查询,赋能不同场景的业务需求,加速数据价值产出。

  后续我们也会持续关注StarRocks,在内部不断的升级迭代。期待StarRocks能提供更丰富的功能,和更开放的生态。StarRocks后续也会作为OLAP平台的重要组件,实现OLAP层的统一存储,统一分析,统一管理。


返回网站首页

本文评论
三星手机销量连续几年第一_3倍于去年同比销售额 三星手机双十一开门红线上渠道全面爆发
  尽管刚刚进入十一月,但各个电商平台的战报便已纷纷火热出炉。在手机市场中,今年大热的折叠屏产品无疑是圈内外关注的焦点,特别是一直走在折叠屏手机行业与市场前沿的三星,更...
日期:07-26
撕开元宇宙入口,这家AR眼镜公司凭什么?_ar眼镜概念股
  2021年,元宇宙迅速蹿红,科技界和投资界的初始振动,引发了全社会的关注。thinkpad x1 carbon最新  什么是元宇宙?佳明潜水表mk1  元宇宙(Metaverse)是整合了多种新技术...
日期:07-25
沉浸式足球文化直播来了!海信电视带您“云游”马德里
  6月13日,一场别样的线上脱口秀在足球圣地马德里启幕。海信电视联合足球解说员王涛推出专场直播,作为世界杯特派探秘官,王涛在马德里通过边走边聊的方式深入伯纳乌球场、当...
日期:07-14
饿了么年报 分析报告_饿了么年度报告出炉,大数据有没有戳中你
  岁末年初,身为“打工人”都逃不掉写“年度报告”来总结并回顾过去一年的工作与发展。近几年各大与人们生活息息相关的App也开始生成“年度报告”——展示用户过去一年的...
日期:07-14
山东嘉磊传媒-贫困家庭、孤寡老人、残疾儿童慰问走访公益之行
  2021年9月16日,这对于山东嘉磊传媒来说,是非常有意义的一天。  为了响应国家关爱弱势群体的号召,在社区街道工作人员的陪同下,山东嘉磊传媒的领导和工作人员们,开始了全市3...
日期:07-27
BISSELL必胜洗地机Lite发售,史无前例的轻盈,让干净轻而易举「必胜洗地机 海淘」
  近日,百年地面清洁品牌BISSELL必胜旗下洗地机再添新成员——BISSELL必胜洗地机Lite,一款针对年轻消费群体推出的“轻量级”清洁设备。BISSELL必胜洗地机Lite被誉为BISSE...
日期:09-20
查博士聊二手车;二手车界天花板‘道具车’
  查博士聊二手车:二手车界的天花板“道具车”  二手车保值率一直是衡量二手车价值的关键指标,但也直接受新车价格稳定的影响。在新车交易中,保值率日渐成为消费者购车的决...
日期:03-22
爱企查显示高晓松、宋柯退出北京阿里音乐股东行列_宋柯高晓松创立的音乐公司
  据爱企查App显示,近日,北京阿里巴巴音乐科技有限公司发生工商变更,高晓松、宋柯退出股东行列,该公司现由杭州阿里创业投资有限公司持股100%;企业类型由其他有限责任公司变更...
日期:07-14
华为mate 50什么时候发售_华为Mate 50系列9月6日发布 京东0元预约还有机会赢新机
  近日,华为终端官方微博正式官宣将于9月6日召开华为Mate50系列及全场景新品秋季发布会,推出华为Mate50系列旗舰及全场景新品,并且微博展示了一个圆环从山峰上升起的画面,配文...
日期:09-04
点亮发布|两化融合管理体系升级版自助贯标系统在工信部主办的第二届两化融合暨数字化转型大会上正式发布
  为进一步以升级版贯标为抓手,全面提升数字化转型的能力和成效,10月15日上午,点亮智库&中信联在由工业和信息化部、中华全国工商业联合会和江苏省人民政府共同主办的第二届...
日期:07-27
当贝x3最佳投影尺寸_当贝X3成为双十一高端投影首选,当贝投影仪全产品预售额破亿!
  又到一年双十一,今年双十一在10月20号就开始预售,预售当天当贝目前的明星产品当贝X3就获得了当天销量第一的成绩,之后预售期间新品当贝投影NEW F3发布,也是让当贝投影在...
日期:07-26
如何在猿辅导上课_孩子学习没状态?猿辅导老师3个方法让学生迅速进入学习状态
  新学期来了,“神兽”归笼,不少家长感觉十分轻松,但开学第一个月,很多孩子还沉浸在假期的余味里,貌似在听课,其实思想早就飞到了九霄云外,上课走神的问题很普遍。  懒散,拖延,没...
日期:10-09
用数据为代言合作保驾护航,“广告代言人/品牌广告主风险评估服务”正式启动
  网红、直播、二次元、VR、虚拟偶像、元宇宙……这些或是时下获取年轻人流量的入口,或是被认为是下一个风口的概念,都慢慢成为品牌营销聚焦的热点领域。12月12日,在第28届中...
日期:07-25
华为DriveONE加持,打造“强动力”“超舒适”全新AITO_华为driveone三合一
  中国,深圳,2021年12月23日,全新高端智慧汽车品牌AITO正式发布。值得注意的是,AITO首款车型问界M5搭载华为DriveONE动力域解决方案,在高效率的前提下还能实现强动力和超舒适这...
日期:07-25
揭开微盟百万商家营销大战背后的数据库秘密「微盟营销云」
  又到了双十一、双十二、年终大促季,每年这个时候都是购物狂欢节,不仅促销产品多、种类全、覆盖面广,促销花样也在不断翻新,直播、砍价、优惠券、加价购等,令人眼花缭乱。当全...
日期:07-26
国庆不想去景区人挤人?用极米H3S宅家看剧!
  一年一度的十一假期又要来了,由于疫情的影响,大家都已经很久没有出游,连放7天。相信有很多朋友现在肯定都兴致勃勃地规划着自己的出游计划。问题来了,十一假期出行难免会人...
日期:07-27
Xperi Inc. 完成分拆,成为独立的上市公司
  2022 年 10 月 3 日(美国加州圣何塞)——Xperi Inc.(纽交所代码为 XPER,以下简称“公司”或“Xperi”)庆祝了其作为独立的公司在纽约证券交易所上市交易的第一天。...
日期:10-13
将铜互连扩展到 2nm-广州俱进电子有限公司
  晶体管微缩在 3nm 达到临界点,纳米片 FET 可能会取代 finFET 以满足性能、功率、面积和成本 (PPAC) 目标。对于 2nm 的铜互连,正在评估一项重大的架构变化,这一举措将重新...
日期:07-14
小度“未来的家”亮相百度世界大会,发布健康生活必备3大“黑科技”
  7月21日,由百度与央视新闻联合举办的2022百度世界大会在线上召开。作为百度“AI生活”重要板块,已走进超4000万家庭的小度,这一次将“未来的家”搬上央视舞台,并亮相三款围...
日期:07-25
百度一下海信激光电视打官司_赢了官司,更赢了市场,海信激光电视做对了什么?
  备受关注的TCL诋毁海信激光电视一案,迎来最高人民法院终槌。7月11日,《(2021)最高法民申6512号民事裁定书》显示,最高法依法裁定TCL在官方微博和抖音账号发布视频的行为构...
日期:07-25