有序漏斗分析-Druid实践

基于Druid的实时OLAP数据摄入与维度探索:Python大数据分析实战指南 在大数据实时分析领域,Apache Druid作为高性能OLAP引擎,凭借其卓越的亚秒级查询响应和强大的实时数据摄入能力,已成为众多企业构建数据洞察平台的首选。本文将从零开始,系统讲解如何使用Python生态工具对接Druid,实现实时数据流的摄入、存储优化与多维度探索分析。文章包含完整的代码示例、性能调优参数、常见问题解决方案,以及一个基于电商订单数据的端到端实战项目,帮助读者快速掌握Druid与Python结合的大数据分析技能。目录摘要1. 引言:实时OLAP的挑战与Druid的定位。 阅读详情

有序漏斗分析

一、背景

漏斗分析是常见数据分析的一种,通过分析用户在网站的行为,帮助运营人员分析一个多步骤过程中每一步的转化与流失情况。比如定义一次电商活动(指定时间范围比如最长30天)中用户行为:访问网站 -> 到达商品推荐页 → 查看商品 → 生成订单,统计用户从访问网站到下订单完成转化的数据就自然地形成了一个漏斗。

通过上述描述得出几个关键词:

  • 用户行为有序分析
  • 有转化时间范围(30天)
  • 用户访问数(会话数)和用户数(去重后的用户基数)

同时作为分析产品的话,挑战点就是如何能够基于用户自定义先后访问顺序的情况下秒级分析出各层漏斗的情况。

本文提出一种基于Druid来实现的方案,该方案具有满足需求的前提下实现成本小的优点。

二、技术方案

有序漏斗分析问题,本质上为了解决在海量数据上根据自定义条件做搜索匹配的问题,那么思路的方向如何设计合理的数据存储结构和更有的匹配查询方式。

做OLAP数据分析思路有两类

  1. 基于明细统计查询的方案:满足查询灵活性,但是大数据量下聚合统计分析类查询性能不佳。
  2. 预聚合方案:满足查询性能要求,但是查询不灵活、业务需要开发聚合数据逻辑,方案复杂(ETL层较重)。

基于Druid的方案:

  • 兼顾查询灵活性与性能、较少的开发成本,维度(查询时组合) + 聚合指标(提前指定)。
  • 分布式架构(高可用、伸缩性),自动rollup预聚合(业务开发简单、只需导入原始记录)+ 高压缩比 + bitmap倒排索引。

分析用户的行为,首先是需要把同一个用户(user_id)的所有行为整理在一起,并且考虑到有访问量的指标,那么还需要基于网页session会话(session_id)做数据聚合。

第一步:数据清洗(ETL)

根据会话ID按访问时间把所有网页数据聚合在一起,数据表如下:

hostpath_listsession_timesession_iduser_id
www.123.com/1 /2 /31525243296session_id_xxx1user_id_xx1
www.abc.com/a /b /c /d1525244296session_id_xxx2user_id_xx2

其中的关键是把所有页面的path拼接在一起用空格分割,目的是为了做漏斗匹配。这里可能大家会有疑问假如量很大怎么办?这里有两个处理:1. 相邻的两个路径若是相同则合并比如用户同一个页面刷新上报了两次/1 /1那么在ETL的时候这里合并为一个/1;2. 一个session的时长是30分钟,若是极端情况下一个用户每秒都是访问合1800秒,按平均一个路径100byte来算也才180kb左右的大小。

第二步:清洗后的数据入Druid供查询

原始入druid的数据就是上述一行session数据,其中session_time作为时间维度供筛选,host、path_list作为普通维度供查询过滤,session_id和user_id当做metrc算统计值,session_id因为在ETL的时候已经去重了,所以用longSum统计指标即可,而user_id则考虑用hyperUnique(Hyperloglog算法)求基数。

数据schema设计

{
  "type" : "index_hadoop",
  "spec" : {
    "ioConfig" : {
      "type" : "hadoop",
      "inputSpec" : {
        "type" : "static",
        "paths" : ""
      }
    },
    "dataSchema" : {
      "dataSource" : "",
      "granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : {"type":"period","period":"P1D","timeZone":"Asia/Shanghai"},
        "queryGranularity" : {"type":"period","period":"P1D","timeZone":"Asia/Shanghai"},
        "intervals" : []
      },
      "parser" : {
        "type" : "string",
        "parseSpec" : {
          "format" : "json",
          "dimensionsSpec" : {
            "dimensions": [
              "host",
              "path"
            ]
          },
          "timestampSpec" : {
            "format" : "auto",
            "column" : "time"
          }
        }
      },
      "metricsSpec": [
        {
          "name": "count",
          "type": "count"
        },
        { 
          "type" : "hyperUnique",
          "name" : "qidianid",
          "fieldName" : "qidianid",
          "round" : true
        }
      ]
    },
    "tuningConfig" : {
      "type" : "hadoop",
      "partitionsSpec" : {
        "type" : "hashed",
        "targetPartitionSize" : 5000000
      },
      "indexSpec" : {
        "bitmap" : { "type" : "roaring"},
        "dimensionCompression":"LZ4",
        "metricCompression" : "LZ4",
        "longEncoding" : "auto"
      }
    }
  }
}

三、具体实践

查询语句示例

{
  "queryType": "timeseries",
  "dataSource": {
    "type": "table",
    "name": "web_funnel"
  },
  "intervals": {
    "type": "intervals",
    "intervals": ["2018-03-19T00:00:00+08:00/2018-04-19T00:00:00+08:00"]
  },
  "filter": {
    "type": "selector",
    "dimension": "host",
    "value": "qidian.qq.com"
  },
  "granularity": {"type": "all"},
  "aggregations": [
    {
      "type" : "filtered",
      "filter" : {
        "type" : "like",
        "dimension" : "path",
        "pattern": "/%",
        "escape": null,
        "extractionFn": null
      },
      "aggregator" : {"type": "longSum", "name": "1", "fieldName": "count"}
    },
    {
      "type" : "filtered",
      "filter" : {
        "type" : "like",
        "dimension" : "path",
        "pattern": "/ %/index.html%",
        "escape": null,
        "extractionFn": null
      },
      "aggregator" : {"type": "longSum", "name": "2", "fieldName": "count"}
    },
    {
      "type" : "filtered",
      "filter" : {
        "type" : "like",
        "dimension" : "path",
        "pattern": "/ %/index.html %/download.html%",
        "escape": null,
        "extractionFn": null
      },
      "aggregator" : {"type": "longSum", "name": "3", "fieldName": "count"}
    }
  ],
  "context": {"skipEmptyBuckets": true}
}

返回结果

[{
  "timestamp" : "2018-03-18T16:00:00.000Z",
  "result" : {
    "1" : 434483,
    "2" : 21084,
    "3" : 1479
  }
}]

四、实践效果

测试环境:

单机:cpu 24 core + 内存64gb

查询延迟:0.5s ~ 2.1s

30天总量(查询的最长时间范围,其实时间范围任选)

原始数据量:10,960,000 (千万级别)

Druid中rollup后数据量:1,560,000 (百万级别)

path基数:1,059,460 (百万级别)

这里写图片描述

1天总量(一个segment,查询的最小粒度)

原始数据量:324,850 (十万级别)

Druid中rollup后数据量:56,760 (万级别)

path基数:55,064 (万级别)

五、总结分析

利用druid做有序漏斗的思路为什么是可行的?为什么其他的存储引擎不行呢,比如ES?

熟悉了整套方案后,大家可能会有这方面的疑问,那么这里从数据分布上来回答这个问题。通常,做搜索匹配可能很容易想到像用ES这样的搜索架构来解决问题,但是这里有几个特殊点ES不适合

  1. 同一个session下的path做了合并,而ES快是快在分词后建立对应的索引,而该方案是需要把path拼接在一起做全匹配,这里没有用的ES的优势而且ES一个string字段最长大小限制是32kb。
  2. 在若是用ES来匹配的话,是需要基于全量数据做扫描的,所以这里性能不行。而Druid因为会将原始数据相同的维度的行做roll up合并,那么实际在druid中存储的是聚合合并后的数据。通过观察数据分布,很多用户其实只访问了官网首页后就离开了,相比其他路径会有数据级的差距,这里也是发挥Druid数据压缩的优势。同时,Druid只需要在字典里面查询出满足条件的bitmap索引后,即可快速扫描统计出满足条件的指标数。

几点总结:

  1. 技术方案无绝对,适合即可。
  2. 关注数据分布。
  3. 把控方案成本。
6、Druid的Roll up详细介绍及示例 Apache Druid可以通过roll-up在数据摄取阶段对原始数据进行汇总。Roll-up是对选定列集的一级聚合操作,它可以减小存储数据的大小。本文将讨论在一个示例数据集上进行roll-up的结果。Druid通过一个roll-up的处理,将原始数据在注入的时候就进行汇总处理roll-up可以压缩我们需要保存的数据量Druid会把选定的相同维度的数据进行聚合操作,可减少存储的大小Druid可以通过 queryGranularity 来控制注入数据的粒度。 阅读详情

相关推荐

2017易观OLAP大赛-如何实现秒级有序漏斗.pdf

选择一个合适的计算引擎 不同的计算引擎适合的业务场景可能是不一样的,我们这里选择的是 ClickHouse 。 它是由俄罗斯的Yandex公司开源的一款性能非常 强劲的列式数据库,并且已经在非常庞大的集群以及超海量数据集上验证过,可以做到真正的实时在线分析。 以下是它的一些简介和性能对比:

Apache Druid的Rollup功能

目录1. 加载示例数据2. 查询数据源数据 1. 加载示例数据 将quickstart/tutorial/rollup-data.json读取数据,创建一个名称为rollup-tutorial的数据源 rollup-data.json的数据是一个网络流相关的数据,数据内容如下 [root@bigdata001 quickstart]# cd .. [root@bigdata001 apache-druid-0.22.1]# cat quickstart/tutorial/rollup-data.json

Bulut0907 479

漏斗分析分析和使用

数据分析的文档,适合一切用户使用,非常简单容易上手。

Hive漏斗分析(计算转换率)

Hive漏斗分析(计算转换率)

Mogeko1的博客 600

Druid 一个实时分析数据仓库

Druid 是一个为大型(设计为 PB 级别)数据集上实时探索查询而设计的开源数 据分析和存储系统,提供极具成本效益并且永远在线(24x7x365x10)的实时数据摄 取和任意数据处理,并且在面对代码部署、机器故障以及其他意外情况时能保证 系统集群正常运行。 Druid 自发布以来,Github 上代码的活跃度一直很高,已经有很多组织和个 人参与到该项目的开发中来。因此 Druid 在过去的一年多时间里一直保持着很高 的版本发布频次。截至本文译本完成时, Druid 已经释放出 0.8.0 的稳定版本,该 版本在集群的稳定性和查询性能上已经有了相当的提升,同时也提供了“简单的” 界面支持。 本文是 Druid 官方提供的论文(WhitePaper)的中文译版,主要介绍 Druid 的核 心概念和架构设计原理。 由于目前 Druid 相关的文字资料相当稀少,除了其官方提供的一些指导文档, 本文也是最珍贵的文字资料之一。

LLM之RAG实战(五十四)| 复杂文档处理RAG框架:Ragflow

RAGFlow 是一种结合了检索增强(Retrieval-Augmented Generation,RAG)与流程控制(Flow)的人工智能技术架构。它通过检索外部知识库中的信息,结合自然语言生成技术,为用户提供更准确、更丰富的回答。同时,它还引入了流程控制机制,能够根据任务需求动态调整信息检索和生成的流程,从而更好地完成复杂的任务。RAGFlow 的核心优势在于将检索和生成相结合,打破了传统生成模型仅依赖内部参数进行文本生成的局限。

wshzd的博客 1067

Hive基于SQL创建漏斗模型

总结为了突出重点,总结就写在最前面了。从拿到需求开始,我们经历了以下步骤来完成工作: 需求分析 设计测试数据集及测试用例 数据清洗 需要实现 测试 其中数据清洗主要是做了两个工作: 去掉用户每一次访问中重复的页面记录,只保留每个页面的最后一次访问记录。 将用户访问记录进行合并,将所有访问过的页面和访问时间整合到1行当中。 实现的判断依据如下: 乱序漏斗:访问的页面数小于4,或者页面顺序不对。 顺序漏

墨染百城 6094

从农田到城市:如何利用NDVI和缨帽变换提升遥感图像分类精度?

本文深入探讨了如何利用NDVI(归一化差值植被指数)和缨帽变换(Tasseled Cap Transformation)两大关键技术,有效提升从农田到城市等复杂场景的遥感图像分类精度。文章通过剖析地物光谱特征,对比了原始波段与衍生特征的优劣,并提供了在ENVI、ArcGIS及Python环境中的具体操作指南与实战策略,旨在帮助从业者构建更鲁棒的特征工程流程,从而解决地物混淆、边界模糊等常见分类难题。

redis7keeper的博客 867

大数据—电商数仓项目

一、课程简介随着技术的飞速发展,经过多年的数据积累,各互联网公司已保存了海量的原始数据和各种业务数据,所以数据仓库技术是各大公司目前都需要着重发展投入的技术领域。数据仓库是面向分析的集成化数据环境,为企业所有决策制定过程,提供系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。二、课程内容本次精心打造的数仓项目的课程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。三、课程目标本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。四、课程亮点本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题。

安卓直链APK安装拦截全解析:从Play Protect到厂商管控的应对指南

在移动应用分发领域,APK(Android Package)安装是开发者与用户交互的关键环节。其核心原理涉及安卓系统的安全沙箱机制与权限管理体系,旨在保护用户设备免受恶意软件侵害。这一机制的技术价值在于平衡了应用生态的开放性与安全性,但也在应用推广、企业内部分发等场景中带来了挑战。尤其在通过官网、广告等直链渠道分发APK时,常会遇到安装转化率骤降的问题。这背后主要受到Google Play Protect云端扫描、安卓系统安装权限模型演进(如Android 8.0+的安装源授权)以及设备制造商附加安全层(如

weixin_33894640的博客 469

零样本缺陷检测新体验:用AnomalyGPT大模型快速搭建智能质检系统(附Win10适配指南)

本文详细介绍了如何利用AnomalyGPT大模型在Windows 10系统上快速搭建零样本工业缺陷检测系统。通过实战指南,涵盖从环境部署、模型准备到工程化落地的全过程,包括将模型封装为API服务、接入工业相机以及开发可视化监控看板,为制造业智能质检提供了一套高效、低门槛的本地部署解决方案。

weixin_29094775的博客 310

漏斗分析

用户行为分析之漏斗分析模型是企业实现精细化运营、进行用户行为分析的重要数据分析模型,其精细化程度影响着营销管理的成败,以及用户行为分析的精准度。 现代营销观念认为:“营销管理重在过程,控制了过程就控制了结果。”用户行为分析之漏斗分析模型是企业实现精细化运营、进行用户行为分析的重要数据分析模型,其精细化程度影响着营销管理的成败,以及用户行为分析的精准度。粗陋的漏斗分析模型因为过程管理不透明...

OYY_90的博客 1703

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1656

OLAP引擎选型——ClickHouse、Druid、Trino的查询模型与适配场景

OLAP引擎选型是业务需求技术特性与团队能力的精密平衡艺术。ClickHouse、Druid和Trino分别代表了极致性能实时聚合和统一查询三种技术路线,各有其适用的理想场景。核心选型原则性能匹配:根据延迟要求选择合适引擎,避免过度设计成本可控:综合考虑存储、计算和运维成本演进可行:选择有活跃社区和明确roadmap的技术架构灵活:为未来业务变化预留扩展空间成功实施关键渐进式采纳:从特定场景开始验证,逐步扩大应用范围混合架构:根据工作负载特征采用多引擎协同可观测性建立完善的监控和告警体系。

刘珏的博客 1096

Could not create cache adapter cache factory not found: factory for cache adapter ““ was not regist

RROR: Could not create cache adapter error=cache factory not found: factory for cache adapter "" was not registered ERROR: Job failed (system failure): Error response from daemon: OCI runtime create failed: container_linux.go:349: starting co...

知无涯 4034

10、贝叶斯曲线拟合与预测分布详解

本文详细介绍了贝叶斯曲线拟合与预测分布的核心概念与计算方法。从最大似然估计出发,引入参数的先验分布,推导出后验分布与最大后验估计,并进一步展示如何通过积分获得完整的预测分布。文章解析了预测分布中均值与方差的构成,强调贝叶斯方法在量化不确定性方面的优势,涵盖金融、医疗、气象等实际应用场景。最后总结了操作步骤与未来研究方向,帮助读者系统掌握贝叶斯方法在回归问题中的应用。

android的专栏 104

SaaS Boilerplate实时分析:Druid与Pinot对比

作为基于Next.js + Tailwind CSS构建的SaaS应用开发者,你是否正面临这些数据挑战:用户行为分析延迟超过5分钟?多租户数据查询占用过多数据库资源?高峰期报表生成导致API超时?在SaaS-Boilerplate架构中,传统PostgreSQL数据库虽能满足基础CRUD需求,但在实时分析场景下暴露出明显短板。 本文将通过Druid与Pinot两大实时分析引擎的深度对比,帮助你构...

gitblog_00405的博客 977

osgEarth加载大疆数据

【代码】osgEarth加载大疆数据。

weixin_44769745的博客 308

AutoGPT与Apache Druid集成:实时数据分析流水线

本文介绍如何将AutoGPT与Apache Druid集成,构建实时数据分析流水线。通过语义理解与动态推理,AutoGPT可自主分析业务问题,结合Druid的亚秒级查询能力,实现从数据感知到洞察生成的闭环,适用于电商、广告等高时效场景。

weixin_34581040的博客 752

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

客户关系管理系统(CRM):基于Spring Boot、MyBatis、Druid、PageHelper与Vue.js的技术实践

客户档案管理客户基本信息录入(姓名、联系方式、地址、公司名称等)客户分类(按行业、规模、价值等分类)客户标签管理(自定义标签,如“高价值客户”“潜在客户”等)客户档案更新与维护(支持批量更新和单个更新)客户数据整合从多渠道(如网站、社交媒体、线下活动等)收集客户数据并自动整合数据清洗与去重功能数据导入导出功能(支持Excel、CSV等格式)

973

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

十分钟了解 Apache Druid

十分钟了解 Apache Druid 导读:Apache Druid 是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。本文将带你简单了解 Druid 的特性,使用场景,技术特点和架构。这将有助于你选型数据存储方案,深入了解 Druid 存储,深入了解时间序列存储等。 关注公众号 MageByte,设置星标获取最新干货。公众号后台回复 “加群” 进入技术...

码哥字节 8023

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大数据实时多维OLAP分析数据库Apache Druid入门分享-上

Apache Druid是⼀款针对海量数据进⾏⾼性能实时分析OLAP引擎的实时分析型数据库,本篇了解其特征和适用场景,并与其他框架横向对比;最后部署一个单机版演示本地文件摄取入库,并演示基于Json API本地查询和SQL两种查询方式。

itxiaoshen博客 1255

Apache 首次亚洲虚拟技术峰会:大数据专场预告第2波

...

ucanuup_的博客 2290

​十分钟了解 Apache Druid

十分钟了解 Apache Druid微信搜索 MageByte 关注公众号,一个坚持原创分享技术干货的技术团队,设置星标获取最新干货。公众号后台回复 “加群” 进入技术交流群获更多成长。...

码哥字节 233
上一篇: 分布式系统唯一ID生成
下一篇: 访客路径分析-Druid实践
EricGogh
博客等级 码龄19年 24粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值