在 2025 年 4 月的 Developer Week 期间,我们宣布推出 R2 Data Catalog 公开测试版——这是一个基于 Cloudflare R2 对象存储构建的全托管 Apache Iceberg 目录服务。今天,我们在此基础之上,正式推出三项全新功能:
Cloudflare Pipelines 接收通过 Workers 或 HTTP 发送的事件,使用 SQL 对其进行转换,并将它们提取到 Iceberg 中,或作为文件存储在 R2 上
R2 Data Catalog 管理 Iceberg 元数据,目前执行包括压缩在内的持续维护,以提升查询性能
R2 SQL 是我们自研的分布式 SQL 引擎,旨在对 R2 中的数据执行 PB 级查询
这些产品共同构成了 Cloudflare 数据平台,它是一个完整的解决方案,用于提取、存储和查询分析数据表。
与所有 Cloudflare 开发人员平台产品一样,它们在我们的全球计算基础架构上运行。它们基于开放标准和互操作性构建。这意味着您可以携带自己的 Iceberg 查询引擎(无论是 PyIceberg、DuckDB 还是 Spark)与 Databricks 和 Snowflake 等其他平台连接,并且无需支付输出费用即可访问您的数据。
对于现代公司而言,分析数据至关重要。它使您能够了解用户的行为、公司的业绩,并在出现问题时向您发出警报。但传统的数据基础设施成本高昂且难以运营,需要固定的云基础设施和内部专业知识。我们构建的 Cloudflare 数据平台简单易用,任何人都可以轻松使用,并且价格合理,并基于使用量进行定价。
如果您想立即开始实践,可以按照数据平台教程的逐步指导,创建一个用于处理事件并将其投递到 R2 Data Catalog 表的数据处理管道 (Pipeline)——该表支持通过 R2 SQL 进行查询。如果想深入了解我们的技术发展历程及整体实现原理,欢迎继续阅读。
我们于 2021 年推出了 R2 对象存储,并制定了颠覆性的定价策略:免除数据输出费用——也就是传统云服务商在数据调取时收取的带宽费用,这种收费模式相当于变相“绑架”用户数据。之所以能做到这一点,是因为我们早已构建起规模最大的全球网络之一,与全球数千家互联网服务提供商、云服务平台及其他企业实现了互联互通。
对象存储支撑着从媒体内容、静态资产到 AI 训练数据等多样化的应用场景。但随着时间的推移,我们看到越来越多的公司使用开放数据和表格格式在 R2 中存储其分析数据仓库。
实现这一能力的关键技术是 Apache Iceberg。作为一种表格式解决方案,Iceberg 能在对象存储的数据文件基础上,提供类数据库能力(包括更新、ACID 事务和架构演进)。换言之,它是一个元数据层,能明确告知客户端:哪些数据文件构成特定的逻辑表、有哪些架构,以及如何高效查询这些数据。
随着 Iceberg 在全行业的广泛采用,用户不再受限于单一的查询引擎。但跨区域和跨云查询数据时,数据传出费用仍会导致成本过高。而具备零成本输出特性的 R2 解决了这一难题——用户也无需再被单一云服务商绑定。他们可以将数据存储在不受供应商限制的中立位置,让团队根据自身数据特点和查询模式自由选择合适的查询引擎。
但用户仍然需要自行管理所有元数据和其他基础设施。我们意识到,我们有机会解决一个主要痛点,并减少在 R2 上存储数据湖的摩擦。这便诞生了 R2 Data Catalog,即我们托管的 Iceberg 目录。
虽然数据已存储在 R2 中且元数据得到了管理,但用户仍需自行解决一些遗留问题。
如何将数据导入 Iceberg 表?数据就位后,怎样优化查询性能?在不自建查询引擎或使用其他云平台的情况下,如何真正挖掘数据价值?
在本文后续内容中,我们将详细解析数据平台三大核心产品如何协同解决这些技术挑战。
分析型数据表由一系列事件构成,这些事件是特定时间点发生的具体事项。它们可能源自服务器日志、移动应用程序或 IoT 设备,并以 JSON、Avro 或 Protobuf 等数据格式进行编码。理想情况下,这些事件应遵循统一的字段标准(即具有明确的架构),但实际上,它们可能只是某个团队随意收集的各类数据。
但是,在使用 Iceberg 查询事件之前,需要先提取事件,根据模式进行结构化,然后写入对象存储。这就是 Cloudflare Pipelines 的作用。
Pipelines 基于我们今年早些时候收购的流处理引擎 Arroyo 构建,用于接收事件,使用 SQL 查询对其进行转换,并将其接收到 R2 和 R2 Data Catalog。
Pipelines 围绕三个核心对象构建:
Streams 是您将数据接入 Cloudflare 的通道。它们是持久化、带缓冲的队列,负责接收事件并存储起来以待后续处理。Streams 支持两种事件接入方式:通过 HTTP 端点接收,或从 Cloudflare Worker 绑定获取。
接收器定义数据的目的地。我们支持将原始文件提取到 R2 Data Catalog 中,以及以 JSON 或 Apache Parquet 格式写入 R2。接收器可以配置为频繁写入文件,优先处理低延迟数据;也可以配置为写入频率较低、容量较大的文件,以获得更佳的查询性能。无论哪种情况,数据提取都是恰好一次,这意味着我们绝不会重复或丢弃传输至 R2 的事件。
Pipelines 通过 SQL 转换连接数据流与接收器,这些转换可在将事件写入存储之前对其进行修改。借此,您能够实现“左移”,将验证、模式化和处理推送到您的提取层,从而使您的查询更加轻松、快速且准确。
例如,下面是一个从点击流数据源摄取事件并写入 Iceberg 的数据处理管道示例:
INSERT into events_table
SELECT
user_id,
lower(event) AS event_type,
to_timestamp_micros(ts_us) AS event_time,
regexp_match(url, '^https?://([^/]+)')[1] AS domain,
url,
referrer,
user_agent
FROM events_json
WHERE event = 'page_view'
AND NOT regexp_like(user_agent, '(?i)bot|spider');
SQL 转换功能非常强大,让您可以完全控制数据的结构以及将其写入表的方式。例如,您可以
目前,Pipelines 仅支持无状态转换。未来,我们将充分利用 Arroyo 的具状态处理功能,以实现数据聚合、增量更新的物化视图以及连接等高级功能。
Cloudflare Pipelines 现已推出公开测试版。您可以使用仪表板、Wrangler 或 REST API 来创建数据处理管道。要开始使用,请查看我们的开发者文档。
目前公开测试期间,Pipelines 服务暂不收费。但是,R2 存储以及接收器向 R2 写入数据所产生的操作将按标准费率计费。待正式收费后,我们预计将根据以下维度计费:数据读取量、通过 SQL 转换处理的数据量,以及实际交付的数据量。
我们在 4 月推出了 R2 Data Catalog 的公开测试版,并对其反响感到非常惊喜。像 DuckDB 这样的查询引擎已添加原生支持,并且我们还看到了像 marimo 笔记本这样的实用集成。
它让 Iceberg 的入门变得简单。无需设置数据库集群、连接对象存储或管理任何基础设施。您可以使用几个 Wrangler 命令创建目录:
$ npx wrangler bucket create mycatalog
$ npx wrangler r2 bucket catalog enable mycatalog
这提供了一个可扩展到 PB 级存储的数据湖,您可以通过任何您想要使用的引擎进行查询,且无需支付任何输出费用。
但仅仅存储数据是不够的。随着时间推移和数据持续写入,构成表的底层数据文件的数量将会增加,导致查询性能越来越慢。
这是低延迟数据采集的一个特殊问题,其目标是尽快查询事件。频繁写入数据意味着文件更小,文件数量更多。查询所需的每个文件都必须列出、下载和读取。过多的小文件带来的开销可能会显著影响总查询时间。
解决方案是压缩,这是目录自动执行的定期维护操作。压缩会将小文件重写为更大的文件,从而减少元数据开销并提高查询性能。
今天,我们正式推出 R2 Data Catalog 的压缩功能支持。要为您的目录启用此功能,操作非常简单:
$ npx wrangler r2 bucket catalog compaction enable mycatalog
我们目前支持小文件压缩,未来将扩展至更多压缩策略。请参阅压缩文档,详细了解其工作原理和启用方法。
目前处于公开测试阶段,R2 Data Catalog 暂不收费。以下是我们对未来定价的初步规划:
| 定价* |
R2 存储 对于标准存储类别 | 每 GB 数据存储一个月收费 0.015 美元 |
R2 A 类操作 | 每百万次操作 4.50 美元(无变化) |
R2 B 类操作 | 每百万次操作 0.36 美元(无变化) |
Data Catalog 操作 例如,创建表、获取表元数据、更新表属性。 | 每百万次目录操作 9.00 美元 |
Data Catalog 压缩数据处理 | 每处理 1GB 数据收费 0.005 美元 每处理一百万个对象 2.00 美元 |
数据输出 | 0 美元(无变化,永久免费) |
*价格可能会在正式发布前发生变化
在开始计费或任何政策调整前,我们将至少提前 30 天发出通知。
将数据存入 R2 数据目录只是第一步,真正的目标是从中获取洞察和价值。传统方式下,这意味着您需要搭建并管理 DuckDB、Spark、Trino 或其他查询引擎,这会在您与数据洞察之间增加一层运维负担。但如果能直接在 Cloudflare 上运行查询,会怎样?
现在,您可以做到了!我们专为 R2 Data Catalog 和 Cloudflare 边缘基础设施打造了一款查询引擎,并将其命名为 R2 SQL。该查询引擎即日起开启公开测试。
使用 Wrangler,对 R2 Data Catalog 表运行查询就像下面的示例一样简单
$ npx wrangler r2 sql query "{WAREHOUSE}" "\
SELECT user_id, url FROM events \
WHERE domain = 'mywebsite.com'"
Cloudflare 在全球网络任意节点调度计算的能力,是 R2 SQL 设计的基石。这使我们能够直接在数据存储位置进行处理,无需您为分析工作负载管理集中式集群。
R2 SQL 与 R2 Data Catalog 和 R2 服务紧密集成,这使得查询规划器不仅能进行简单的存储扫描,还能深度利用 R2 Data Catalog 中存储的丰富统计信息。这为新一代查询优化提供了强大基础,例如未来可支持辅助索引或更复杂分析函数。
最终,用户将获得完全无服务器的体验。您可以专注于 SQL,无需深入了解引擎的运作方式。若想探究 R2 SQL 的工作原理,技术团队已撰写深度解析文章,详细介绍 R2 SQL 分布式查询引擎在大规模场景下的运行机制。
本次公开测试是 R2 SQL 查询功能的早期预览,初期主要支持过滤查询功能。后续我们将逐步扩展其功能,覆盖更丰富的 SQL 特性,例如复杂聚合操作。
我们非常期待看到用户通过 R2 SQL 实现的创新应用!如需体验,请查阅相关文档和教程。测试期间,R2 SQL 的使用目前暂不收费,但查询产生的 R2 存储费用及操作费用将按标准费率计费。未来我们计划根据查询扫描的数据量进行收费,并将在收费开始前发布通知。
现在,您可以使用 Cloudflare 数据平台将事件提取到 R2 Data Catalog 中,并通过 R2 SQL 进行查询。2026 年上半年,我们将在所有这些产品中扩展各项功能,包括:
与 Logpush 集成,以便直接在 Cloudflare 中转换、存储和查询日志
通过 Workers 实现的用户定义函数,以及对流式转换的具状态处理支持
扩展 R2 SQL 的功能集,以涵盖聚合与连接功能
在此期间,您可以通过本教程快速上手 Cloudflare 数据平台——只需跟随指引,即可构建端到端的分析型数据系统:从使用 Pipelines 进行数据接入,到将数据存储至 R2 Data Catalog,再到通过 R2 SQL 执行查询。
我们非常期待看到您的精彩作品!欢迎前往我们的开发人员 Discord 社区分享使用反馈。