本文字数:4105;估计阅读时间:11 分钟
作者:Mihir Gokhale
本文在公众号【ClickHouseInc】首发
一年前,我的同事 Dmitry Pavlov 介绍了我们如何在 ClickHouse Cloud 上构建了公司内部的数据仓库,简称 “DWH”。该数据仓库负责收集各种系统的数据,经过模型处理后,用于 ClickHouse 内部的业务分析和报告。文章详细讨论了 DWH 的一些关键点,包括非规范化的数据集市、安全功能的实施以及基础设施的管理等。
随着 ClickHouse 的不断壮大,这个基于 ClickHouse Cloud 的 DWH 也随之扩展。这篇文章将分享在过去一年中,DWH 如何升级以支持更多元的用户、数据源和访问方式。特别值得一提的是,ClickHouse 和 dbt 这两个核心组件的结合,使得 DWH 实现了更多实时数据处理,并将其转化为定期批量报告——这是传统数据仓库所不具备的优势。这让我们能够从数据中做出更及时、更明智的决策。
什么是数据仓库?
数据仓库是一个集中存储系统,用于整合组织内不同来源的数据,帮助支持业务决策。以下是我们 DWH 架构的概览。
目前,我们已配置了 19 个原始数据源,每小时或每天都会进行数据插入。每天约有 60 亿行、50 TB 的未压缩数据写入 DWH。ClickHouse 会对这些数据进行压缩,目前我们存储了过去两年内收集的 470 TB(压缩后)数据,过去 30 天内增长了 23%。每周大约有 70 个不同用户生成至少一次 SELECT 查询。
DWH 是我们组织中至关重要的系统,多个业务部门都依赖于 DWH 提供的数据,包括领导层、产品、工程、市场、销售和财务。此外,DWH 的预生产环境还被用作测试开源 ClickHouse 版本的金丝雀环境,以便在 ClickHouse Cloud 进行更广泛的升级之前进行测试。
批量报的设置
最初,我们的 DWH 是用于从少量业务系统中导入相对较小的数据量。导入原始数据后,我们会进行处理,生成如“试用次数”和“转化率”这类批量报告,这是数据仓库的核心。最早的批量报告主要依赖于 Airflow,我们当时并未使用 dbt。但随着数据源的不断增加、业务指标的复杂化以及服务的内部需求增长,这种方法已经无法适应新的需求。dbt 是一个开源工具,供数据工程师和分析师使用,它允许团队编写并迭代模块化 SQL 代码,构建数据管道。将 dbt 引入我们的技术架构后,有助于将批量报告的转换逻辑集中管理。
例如,在增加新的数据源时,dbt 允许我们通过时间函数轻松合并不同时间导入的数据,并在数据准备好后触发后续流程。比如,不同来源的数据可能分别在晚上 7:26 和 10:01 插入,而用于 JOIN 操作的逻辑时间戳是 7:00 这样的每小时增量。这样的逻辑可以高度自定义,并能根据业务需求灵活调整。借助 dbt 工具,我们能够更轻松地处理来自 19 个数据源的依赖关系,并自动生成数据血缘图表作为文档。
同时,随着指标的复杂性增加,原先简单的 count() 和 sum() 操作逐渐被更复杂的窗口函数和数据差异化处理所取代,这些操作还会基于外部表中的条件进行过滤。dbt 与 ClickHouse 的 SQL 方言相结合,成为应对日益复杂的业务逻辑的关键工具,也为我们构建了一个更具可扩展性的批量报告系统。
实时数据的集成
在批量报告流程中,构建复杂的业务指标是企业数据仓库的核心能力。ClickHouse 以其在处理 PB 级别数据时的高性能而闻名,可以轻松应对我们输入的数据。但 DWH 的真正优势在于处理新型、独特的实时数据格式,这些数据并不遵循固定的模式或关系(且对这类数据的支持还在持续增强)。这些数据源通常还伴随更大的数据量。
例如,我们的 DWH 中每天向某张表中插入约 40 亿行数据,而整个表的行数已接近一万亿。再比如,我们从 Google Analytics 导入的事件数据,将事件参数存储为嵌套的数组结构,代表 clickhouse.com 上的网页活动。同样,来自 NoSQL 控制平面数据库的数据卸载,则类似于带有灵活模式的嵌套 JSON 结构。
在基础的批量报告系统搭建完成后,我们逐渐将更多的实时数据源纳入报告体系。用户反映,尽管这些实时数据的结构较为松散,查询时需要进行轻量处理(例如,从 JSON 列中提取字段),但这些数据直观易用,且极具价值。我们的营销团队可以更清楚地了解哪些网页访问量最大,支持工程师通过分析客户最近的云端活动日志,能够更快速地诊断出查询问题。与此同时,产品团队也能通过自定义逻辑,更精准地跟踪用户转化事件。
在 DWH 中,我们不仅提供这些实时数据的原始格式,还提供其转换后的聚合状态,例如实时事件的聚合结果。ClickHouse 丰富的函数库和广泛的数据格式支持,使得探索原始实时数据变得简单,用户可以直接通过 SQL 客户端进行临时分析,无需依赖数据工程师。同时,我们利用 dbt 定义了实时数据聚合逻辑,当数据进入 DWH 时,自动生成并存储在独立的表中。我们之所以选择 dbt,是因为它已在我们的其他数据处理流程中使用,这样可以集中管理。然而,这些聚合在 ClickHouse 中也可以通过物化视图等功能进行本地配置。这些实时聚合数据与现有的批量报告结合,用于跟踪“客户查询失败数量”等关键指标。
这种架构使我们能够为实时数据配置类似批量处理的报告管道,同时保留原始记录,以便深入分析。在 ClickHouse Cloud 和 dbt 的协同作用下,用户可以同时利用批量处理报告和实时数据流,进行更加综合的分析。
配置其他访问途径
在 DWH 的初版中,我们选择了 Apache Superset 作为用户访问数据的 BI 工具。Superset 提供了仪表板、SQL 客户端、告警、用户管理等多项核心功能,且开源,方便维护团队统一部署。然而,Superset 也存在局限,特别是它的 SQL 客户端存在一些问题,严重影响了用户体验。
为了解决这一问题,我们启用了 ClickHouse Cloud 的原生 SQL 控制台,作为 DWH 的另一访问方式。SQL 控制台在编写临时 SQL 查询和浏览数据库表与视图方面,表现更优。我们还利用 ClickHouse Cloud API 来管理敏感数据的用户权限,并通过 Google Groups 分配用户角色。许多用户表示,使用 SQL 控制台的体验比 Superset 的原生 SQL 客户端好得多。
针对更专业的使用场景,我们还配置了与 Growthbook 的连接,以便使用 DWH 中的数据进行 A/B 测试。设置 Growthbook 与 ClickHouse Cloud 的连接只需几分钟,并且可以开箱即用,用于分析 A/B 测试结果(即 DWH 中的 SELECT 查询)。Growthbook 能直接查询 DWH 的 ClickHouse Cloud 服务,因此基于日志级别的原始数据进行实验变得非常简单。
此外,我们还设置了从 ClickHouse Cloud 向 Salesforce 导出数据的任务,使销售团队可以在 Salesforce(我们的 CRM 系统)中直接使用 DWH 的数据。由于我们的 Salesforce 实例不支持从静态 IP 地址进行查询,增加了设置难度,并降低了安全性。最终,我们通过将 DWH 数据推送到 S3 存储桶,再让 Salesforce 查询这个存储桶,解决了这一问题。
我们未来对 DWH 的展望
展望未来,我们将继续扩展 DWH,计划通过配置更多的数据源和接纳更多用户来实现。为确保 DWH 能随业务增长而扩展,我们打算将工作负载拆分成可独立扩展的计算组,以实现性能优化和成本节约。
在 DWH 刚建立时,我们只有一个“每小时加载 DAG”任务,这个 ETL 作业通过 Airflow 调度,负责导入所有新数据。当时我们只有少量的数据源和简单的模型架构。然而,随着数据源和模型的增加,单一任务变得不再可扩展:作业执行时间过长,且不同数据模型之间的依赖关系导致任何错误都会影响所有数据的插入。引入 dbt 后,我们将这一任务拆分成了九个进程,服务可靠性也显著提高。这些作业大多仍然是每小时运行一次,因此我们的 ClickHouse Cloud 服务需要全天候运行以处理数据的插入。
即将推出的 ClickHouse Cloud 新功能——计算资源分离——让我们感到非常期待。这将允许我们将 DWH 的计算资源拆分成多个服务,每个服务都可以独立扩展或缩减。比如,我们可以为 BI 工具配置只读服务,关键 ETL 作业使用 24x7 读写服务,而非关键作业则只需要每天更新一次的数据刷新服务。后者在闲置时可以缩减规模,从而大幅节省成本。通过这种方式,我们可以让不同的计算资源独立工作,实现更灵活的扩展。
在 AI 时代,我也非常期待将 AI 融入 DWH。ClickHouse Cloud 已支持 AI 查询构建器,帮助用户编写简单的 SQL 查询。展望未来,我期待能有 AI 商业分析师为那些不熟悉 SQL 的用户提供帮助。此外,许多用户目前需要手动编写每周、每月或每季度的报告,我希望未来能借助 AI 自动生成这些报告,进一步简化流程。
总结思考
在 ClickHouse,我们每周都会通过管理层会议来审视和讨论公司最关键的指标,其中很多直接来自 DWH。随着组织的扩展和 DWH 的发展,我逐渐意识到数据仓库的作用远不止展示仪表板和生成报告。它是一个复杂而强大的系统,通过提供唯一的数据源,促进跨团队的沟通和决策。无论是工程师、营销人员、销售团队、产品经理,还是公司高层,都能依赖相同的信息来做出明智的决定。对于我们的数据仓库,ClickHouse 的强大之处在于,它能轻松将实时数据与批处理报告结合,从而扩展了可查询的数据范围。
征稿启示
面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com
联系我们
手机号:13910395701
邮箱:Tracy.Wang@clickhouse.com
满足您所有的在线分析列式数据库管理需求