提效超220%,揭秘ClickHouse of DataKun对归因分析场景的优化实践
来源:奇点云 2024-01-15

「在100万用户、1亿事件量数据的性能测试中,效率提升超220%。」

DataKun是大数据集群管理系统,负责企业大数据底层存算及运维,对接并管理离线、实时、图、时序等不同引擎,确保数据能得到高效处理和分析。

 

因此,DataKun技术团队的日常工作除了不断打磨产品功能、提升产品性能,也持续关注各开源社区对存算引擎的更新迭代,并自主优化核心引擎,以降低上层数据应用对底层技术的使用难度,满足各种业务场景的进阶需要。

 

例如,对ClickHouse在用户行为的归因分析、漏斗分析、留存分析等场景表现,DataKun技术团队已完成诸多优化。

 

本文将聚焦归因分析场景,分享ClickHouse of DataKun的优化实践。

 

作者:DataKun技术团队

全文共2592字,阅读时间约7分钟

 

#1

“归因分析”对ClickHouse的三大挑战

简单理解归因分析:从用户“点击”到“提交订单/支付”,借助数据拆解各运营位的“贡献”,找到与购买行为关联度高的环节,以便及时调整投放及运营策略。在归因分析中,“点击”被称为“触点事件”,“提交订单/支付”被称为“目标事件”。

 

常见的归因分析模型包括“首次触点归因”、“末次触点归因”、“线性归因”、“位置归因”等等。

企业进行归因分析流程

以使用GrowingIO-增长分析(UBA)进行分析为例

 

伴随企业积累的用户数据增长、归因分析日益精细,底层数据技术的实现也随之面临着更高难度挑战:

 

1. 海量数据处理的性能挑战

单个用户的行为数据是有时序的。在用户规模较大的情况下,随着回溯期和归因窗口期拉长,需要计算的数据量将呈指数级增长。

然而,使用SQL对大规模数据集进行分析,耗时过长;分析维度不固定,也就无法做预计算,不能减轻即席查询的压力。

 

2. 支持交互式分析的易用性挑战

归因分析常常需要从多维度进行分析,在分析过程中进行动态调整和探索,来深入研判不同因素对业务指标的影响。

而如果按照传统思路实现归因分析,假设触点事件和目标事件各有十几个维度,加上“直接转化”参与计算、维度对比等条件,归因分析的计算逻辑就已经复杂到无法用SQL实现

 

3. 归因模型的拓展性挑战

当要构建更灵活甚至定制化的归因模型,就需要使用更复杂的统计方法、机器学习模型或其他算法,超出了标准SQL的能力范围。

 

应对上述挑战,目前业内最适宜的引擎是ClickHouse(为支撑点击流数据分析而生),但“还不够”。日趋碎片化的用户行为、不断增长的数据规模、持续迭代的分析模型,要求ClickHouse具备:

更高性能——支持海量数据高效查询,架构高可用

易用性——支持动态组合任意维度、任意指标,呈现即席查询的分析结果;

扩展性——支持更灵活、简便地添加新影响因素,或调整算法

 

#2

编写Attribution函数,提效超220%

基于ClickHouse的UDF(User Defined Function,用户自定义函数)特性,DataKun团队编写了“Attribution函数”(直译为归因函数),高效实现复杂的归因计算。

 

Attribution函数的设计思路

1. 对触点事件和目标事件进行过滤和排序,形成每个用户的事件序列。

2. 扫描事件序列,对触点事件进行条件判定和标记。其中,目标事件归因窗口期内的触点事件,标记为有效触点事件;若归因窗口期内没有触点事件,则标记目标事件为直接转化。

3. 计算有效触点事件在归因模型下的贡献值。

 

  • attribution(attribution_model, window)
  • (event_time, event_key, cond_conv)
  • over (partition by gio_id, order by event_time)

Attribution函数定义(简化版)

Attribution函数定义(简化版图示)

 

以电商场景为例,当需要测算点击、评论等站内行为对用户成交的贡献度时,进行归因分析的SQL如下:

在SQL中引用Attribution函数,并传入Attribution函数需要的参数,即返回贡献度。

  • SELECT
  • touch_point AS `触点`,
  • round(sum(if(event_key != touch_point, weight_cnt, if(touch_point = '支付成功', 1, 0))), 2) AS `贡献度_线性`
  • FROM
  •   (
  •  SELECT
  •  event_key,
  •  arrayJoin(attr).1 AS touch_point,
  •  arrayJoin(attr).3 AS weight_cnt
  •  FROM
  •  (
  •  SELECT
  •  event_key,
  •  attribution('LINEAR', '0D', 0)(toDateTime64(event_time, 3), event_key, event_key = '支付成功') OVER (PARTITION BY user ORDER BY event_time ASC) AS attr
  •  FROM test_attribution
  •  WHERE (((event_time >= toDateTime('2023-10-19 00:00:00')) AND (event_time <= toDateTime('2023-10-24 23:59:59'))) AND (event_key IN ('点击', '评论'))) OR ((event_key = '支付成功') AND ((event_time >= toDateTime('2023-10-20 00:00:00')) AND (event_time <= toDateTime('2023-10-24 23:59:59'))))
  •  )
  • )
  • GROUP BY touch_point
  • ORDER BY touch_point ASC

 

基于Attribution函数方案的实践效果

DataKun技术团队构建了100万用户、1亿事件量的数据用于性能测试。使用ClickBench多次测试后,结果表明,归因分析场景下,基于Attribution函数的方案相较传统的标准SQL实现,提效超220%。

性能测试结果

 

相比ClickHouse提供的方案(调用Script来实现UDF),Attribution函数没有进程调用的开销,性能更为优秀

 

相比开发者手写SQL,必须分别实现不同模型(例如前文介绍的“首次触点归因”、“末次触点归因”、“线性归因”等等)的逻辑,Attribution函数只需要设置触点事件、目标事件,选择不同计算模型即可,易用性更强

 

此外,在ClickHouse UDF体系下,开发者还可以基于Attribution函数拓展更多自定义的归因模型,且函数输出结果统一,无需修改对接逻辑。

 

目前,GrowingIO增长分析(UBA,用户行为分析产品)就调用了ClickHouse of DataKun,基于性能更好、易用性和扩展性更强的Attribution函数,高效满足归因分析场景所需。

 

#3

更适合企业级规模化数据分析的

ClickHouse of DataKun

除了本文介绍针对归因分析场景编写的Attribution函数,DataKun技术团队还对流批一体、个性化分析等场景进行了优化,形成ClickHouse of DataKun。

 

具体实践包括但不限于:

1. 使用ClickHouse的MergeTree引擎,高效实现小文件合并,优化流批一体的处理场景,支持实时数据5秒内在各分析工具中可见

 

2. 编写漏斗分析、事件流分析等UDF,以优化多种个性化分析场景的技术实现,减少重复工作(拓展自定义UDF的原因与前文归因分析场景类似)。例如,基于事件流UDF,比基于ClickHouse标准SQL分析提效了500%

 

3. 通过Bitmap改写SQL,实现ClickHouse上的高效Join,让用户分析领域常见的“按人Join”效率更高

 

奇点云与国内分析云领军者GrowingIO并购重组,并完成数据云和分析云的技术融合后,GrowingIO分析云产品的海量数据场景和极限业务要求为DataKun提供了完美的“高压测试”机会,也敦促DataKun团队持续深入ClickHouse等引擎的研究和优化。

 

企业客户可以直接通过SimbaOS Kernel,使用DataKun调用及管理ClickHouse of DataKun等各类引擎,享受经过“千锤百炼”的增强能力;无需自行部署或升级社区版本,通过DataKun即可完成扩容、管理及维护配置参数。

 

此外,相较分别对接社区版引擎并逐一进行自维护,DataKun提供大数据集群智能运维能力,更满足企业级客户对安全稳定、自主可控、运维成本可控、系统可观测性等需要,告别传统人肉运维,护航规模化“数据生产—消费”。

 

#关于 DataKun

大数据集群管理系统DataKun,具备安全稳定、智能运维、云原生、自主可控等特性,支持对接离线、实时、图、时序等不同类型引擎,为企业大数据存算及运维管理降本增效。

 

热门搜索:数据中台数据云平台客户数据平台CDP数据智能数据应用鞋服地产美妆商超家装数据资产数据治理数据可视化

联系我们:
电话:400-080-0326     邮箱:business@startdt.com     时间:09:00 - 18:00(工作日) 杭州:浙江省杭州市余杭区良睦路 1399 号梦想小镇互联网村 15、17 幢(总部) 北京:北京市海淀区大钟寺东路 168 号中嘉大厦 402 室 上海:上海市徐汇区虹漕路 88 号 H88 越虹广场 B 栋 9 楼 B、C 单元 深圳:广东省深圳市南山区 高新南六路6号 迈科龙大厦 1402

2016 - 2022 StartDT.com 版权所有 ICP证: 浙ICP备17004958号 法律声明及隐私政策

浙公网安备 33011002015629号