余志鹏-蚂蚁集团-⾼级技术专家 DataFunSummit#2023 ⾃我介绍 2013 ~ 2018年,阿⾥速卖通(Aliexpress),主要负责营销平台、卡券平台、积分平台的建设2018 ~ Now,蚂蚁⼤数据DeepInsight性能负责⼈ ⽬录CONTENT 01为什么需要通过ADM来解决OLAP场景下⼤表性能问题02通过Cube解决OLAP场景下报表性能问题03通过采样解决OLAP场景下分析性能问题04我们的团队 01 通过ADM解决OLAP场景下的报表性能问题 DataFunSummit#2023 为了⽅便理解后续的内容,数据分析中的⼀些基本概念需要提前理解 数据驱动决策链路中,制作报表和分析的效率就决定了数据驱动决策效率 第⼀步:制作业务看板,核⼼耗时在研发ADM 当业务出现下跌,需要找到原因是什么? 建⽴假设树,不断在各个空间上进⾏探索,找到贡献度最⼤的原因 实现前⾯假设树分析的流程:写SQL,等运⾏,查质量 探索式分析流程:写SQL,等运⾏,查质量 等SQL运⾏结果【得到正确结果5⼩时(单个SQL耗时1-2⼩时,跑2-3次),时间占⽐80%】 出错概率⼤,纠错代价⾼。每⼀步都需要去check⾃⼰算的数据是否正确,写SQL稍微不注意就出错。错了过后,重新跑需要消耗时间太⻓。 在ODPS上的等待时间还是⽐较⻓的,基本都要⼏⼗分钟乃⾄数⼩时在新引擎上的等待时间还未可知,由于data-exploration有很⼤的随机性,所以提前做物化收效⼀般⼀般都是多种技术⼿段配合,⽽且需要智能调优,才能⾃动的根据场景来进⾏性能优化 除了效率外,随着需求的增⻓,ADM快速增⻓,治理成本⾼,计存成本⾼ 数据研发⼈数中,技术占⽐xx%以上,数据需求吞吐量不⾜,供给侧靠⼤量的技术同学补位 数据需求不但增加,报表数量和ADM的数量持续增⻓ 存储量两年增⻓xx%,成本不断增加 数仓研发员⼯数量 ADM的存储量 报表和ADM的数量 •2019年研发⼈数从xx⼈增加到xx⼈,增⻓xx%•2020年研发⼈数增加到xx⼈,增⻓xx%,两年增⻓xx% •2019年ADM存储从xxPB增加到xxPB,增⻓xx%•2020年ADM存储增加到xxPB,增⻓xx%,两年增⻓xx% •2019年ADM数量从xxx万增加到xxx万,增⻓xx%;报表数量从xx万增加到xx万,增⻓xx%•2020年ADM数量增加到xx万,增⻓xx%,两年增⻓xx%;报表数量从xx万增加到xx万,增⻓xx%,两年增⻓xx% 那么,为什么需要ADM来解决这些问题呢? 原因分析:①⼤表的分析性能问题;②解决分析中复杂度量定义的问题 在数据驱动决策的过程上,制作报表和分析的效率会决定了公司最终的决策效率。 接下来主要讲如何通过⼤表性能优化来解决ADM带来的性能问题 度量和维度不确定,⽤户探索的空间⾮常⼤ 度量和维度确定,⽤户在⼀个固定的空间内看数 通过「Cube预聚合」减少查询时数据量,本质上是⾃动化ADM 通过「采样的⽅式」减少即时分析时的数据量 02 通过Cube解决报表的性能问题 DataFunSummit#2023 我们举⼀个实际的例⼦来说明Cube是如何解决性能问题 基于Cube的查询 Cube的构建SQL CREATETABLEcube_xxxxasSELECT'{biz_date}'asdt,seller_name,seller_main_category,short_code,business_typeSUM(gmt_usd) sum_gmt_usd,SUM(ipv),SUM(orders)FROMcbcn_jk_seller_trdWHEREfulfillment_crete_date>='{biz_date}-7'ANDfulfillment_crete_date<='{biz_date}'ANDindustry_name='xxx'ANDseller_name='xxx'GROUPBYseller_name,serller_main_category,short_code,business_type SELECT seller_name,seller_main_category,short_code,business_typesum_gmt_usd,sum_ipv,sum_ordersFROMcube_xxxxwheredt='2023-05-30'andbusiness_type='all' 查询数据量从10亿级别到百万级别,性能提升⾮常明显 把Cube转化为数学问题,Cube的核⼼指标 提升Cube的能⼒,覆盖更多的图表 举例:能⼒满⾜,但是有可能没有构建,导致命中率低 举例:构建了,但是没有使⽤,成本⾼ 提升Cube覆盖率的关键是如何精准定义Cube 基于SQL定义Cube,由于⽆法知道SQL背后的查询意图,难度⼤(逆向⼯程)基于报表特征定义Cube,相当于带着图纸做技术⽅案,难度⼩(正向⼯程) 定义Cube的实现⽅案:通过提取报表特征来实现精准定义Cube 如何提升Cube的命中率 Cost=Cost存储+Cost计算 最终完整的Cube技术架构 增量构建 03 通过采样解决探索式分析的性能问题 DataFunSummit#2023 探索式分析的特点:①度量灵活;②维度灵活 分析的过程往往是在找规律,不需要数据的绝对精准,所以对于数据的准确性有⼀定的容忍度那么,基于这个特点,我们就可以通过「采样」来减少表的数据量,从⽽提升查询性能 采样的基本理论⽀撑:统计学,对应的原⼦计算及适⽤算法 问题⼀:随机采样计算COUNTD会导致较⼤误差 通过采样表计算计算出的⽤户数,计算错误 Case1(全国的⽤户数):SELECTCOUNT(DISTINCTuser_id) *2FROMt_sample; Count Distinct的本质是先做Distinct再做Count,⽽随机采样并⾮基于Distinct的结果进⾏采样,导致结果⽆法进⾏还原 解决这个问题需要先把COUNTD转化成COUNT 原始表T 把所有的user_id映射到⼀个分桶序列上 在新采样⽅法下,将countd转化为count,从⼀个⾮充分统计量转换为充分统计量 问题⼆:下钻的问题如何解决呢? 举例:我们按照1%的采样⽐例对订单数据进⾏采样,然后计算整体和各城市的GMV 统⼀的采样⽐例⽆法满⾜下钻维度⼩样本的场景,需要设计新的⽅案 为了解决前⾯的问题,通过加权采样来实现各维值下 根据采样⽐例选择具体的分桶,按照上⾯三个分桶,如果是33%则选择⼀个分桶,如果是100%则需要选择三个分桶。 通过采样表计算结果(通过采样表进⾏还原): 最终完整的采样技术架构 04我们的团队 DeepInsight团队的使命和愿景 愿景 使命 成为全国,甚⾄全世界最⽜逼的数据决策产品和团队 数据驱动决策,提升公司商业决策⼒ DeepInsight团队的努⼒和给公司带来的价值,持续被看⻅和认可 蚂蚁技术产品普查组委会综合评估 2019阿⾥X办公神器:数据产品类TOP1 2019阿⾥季度红草莓最佳体验 2018阿⾥数据开放⽇:数据产品类TOP1 感谢观看