跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

从仪表板使用 R2 SQL 查询 R2 Data Catalog 表

您现在可以直接从 Cloudflare 仪表板使用 R2 SQL 查询您的 R2 Data Catalog 表,而无需安装 CLI 或接入客户端。这使得在同一个地方探索 Apache Iceberg 数据、验证查询并检查结果变得非常容易。

R2 SQL 查询编辑器

要开始使用,请转到 Cloudflare 仪表板中的 R2 Data Catalog 并选择 **Query data(查询数据)**以启动内置的 SQL 编辑器。从那里您可以:

  • 交互式编写和运行查询 — 直接在浏览器中对 R2 SQL 进行迭代,提供语法高亮和自动完成功能,而无需通过 Wrangler 或 REST API 重新运行命令。
  • 探索您的数据 — 在编辑器旁探索您的命名空间和表,这样您无需离开页面或使用其他工具即可发现哪些内容是可查询的。
  • 了解结果和性能 — 查看包含每个查询统计信息的结果集,导出它们,并获取有用的 EXPLAIN 输出以确切了解查询如何运行。

R2 SQL 现在支持窗口函数、DISTINCT 和集合操作

R2 SQL 现在支持窗口函数、SELECT DISTINCT、集合操作和更多聚合,使得编写分析查询变得更加容易,而无需在其他地方预处理数据。

R2 SQL 是 Cloudflare 的无服务器分布式 SQL 引擎,用于查询存储在 R2 Data Catalog 中的 Apache Iceberg 表。

新功能

  • 窗口函数ROW_NUMBERRANKDENSE_RANKPERCENT_RANKCUME_DISTNTILELAGLEADFIRST_VALUELAST_VALUENTH_VALUE,以及带有 OVER (...) 子句的聚合,包括 PARTITION BY 和显式窗口范围(frames)
  • QUALIFY — 根据窗口函数结果过滤行
  • DISTINCTSELECT DISTINCTDISTINCT ON (...) 以及聚合上的 DISTINCT 修饰符(例如 COUNT(DISTINCT ...)
  • 集合操作UNIONUNION ALLINTERSECTEXCEPT
  • 分组扩展GROUPING SETSROLLUPCUBE
  • 精确聚合MEDIANPERCENTILE_CONTARRAY_AGGSTRING_AGG

示例

使用窗口函数对行进行排名

SELECT customer_id, region,
       ROW_NUMBER() OVER (PARTITION BY region ORDER BY total_amount DESC) AS rank_in_region
FROM my_namespace.sales_data

使用 QUALIFY 进行过滤

SELECT customer_id, region, total_amount
FROM my_namespace.sales_data
QUALIFY ROW_NUMBER() OVER (PARTITION BY region ORDER BY total_amount DESC) <= 3

使用集合操作组合表

SELECT customer_id FROM my_namespace.sales_data
EXCEPT
SELECT customer_id FROM my_namespace.archived_sales

不支持具名 WINDOW 子句 — 请在每个调用点内联 OVER (...) 规范。有关完整语法参考,请参阅 SQL 参考。有关支持的功能和性能指南,请参阅限制与最佳实践

R2 SQL 现在支持 UNION、INTERSECT、EXCEPT 和 SELECT DISTINCT

R2 SQL 现在支持集合操作(UNIONINTERSECTEXCEPT)和 SELECT DISTINCT,从而扩展了您可直接对 R2 Data CatalogApache Iceberg 表运行的分析查询范围。

集合操作

组合多个 SELECT 语句的结果:

  • UNION — 返回两个查询的所有行,并移除重复项。
  • UNION ALL — 返回两个查询的所有行,保留重复项。
  • INTERSECT — 仅返回在两个查询中都出现的行。
  • EXCEPT — 返回存在于第一个查询中但不存在于第二个查询中的行。
-- Find zones that had either firewall blocks OR high-risk requests
SELECT zone_id FROM my_namespace.firewall_events WHERE action = 'block'
UNION
SELECT zone_id FROM my_namespace.http_requests WHERE risk_score > 0.8
-- Find zones with both firewall blocks AND high traffic
SELECT zone_id FROM my_namespace.firewall_events WHERE action = 'block'
INTERSECT
SELECT zone_id FROM my_namespace.http_requests
GROUP BY zone_id
HAVING COUNT(*) > 10000
-- Find enterprise zones that have not been compacted
SELECT zone_id FROM my_namespace.zones WHERE plan = 'enterprise'
EXCEPT
SELECT zone_id FROM my_namespace.compaction_history

SELECT DISTINCT

从查询结果中消除重复行:

SELECT DISTINCT region, department
FROM my_namespace.sales_data
WHERE total_amount > 1000
ORDER BY region, department
LIMIT 100

对于可以接受近似结果的大型数据集,approx_distinct() 仍是计算唯一值数量的更快替代方法。

有关完整语法参考,请参阅 SQL 参考。有关性能指南,请参阅限制与最佳实践

R2 SQL 定价公布

R2 SQL 是一个无服务器分布式查询引擎,可对存储在 R2 Data Catalog 中的 Apache Iceberg 表运行 SQL。R2 SQL 现在已发布基于单一维度的定价:即执行查询所扫描的压缩数据量。R2 SQL 的价格为 2.50 美元/TB(0.0025 美元/GB),仅为 AWS Athena 成本的一半,且不到 Google BigQuery 按需付费价格的一半。

计费尚未启用。在开始对 R2 SQL 使用收费之前,我们将至少提前 30 天通知。

扫描的数据量是以从 R2 对象存储中读取的压缩字节数来衡量的。这与您在 R2 存储桶中看到的相符——如果一个 Parquet 文件在磁盘上是 100 MB,那么扫描该文件将按 100 MB 计费。每个查询的最小计费增量为 10 MB。

免费计划每月包含 1 GB,付费计划每月包含 10 GB。标准的 R2 存储和操作费用 以及 R2 Data Catalog 费用 单独计算。

有关完整的定价详细信息和计费示例,请参阅 R2 SQL 定价

R2 SQL 现在支持 JOIN、子查询和多表查询

R2 SQL 是 Cloudflare 的无服务器分布式 SQL 引擎,用于查询存储在 R2 Data Catalog 中的 Apache Iceberg 表。R2 SQL 直接在 Cloudflare 的全球网络上运行,无需管理任何基础设施,因此您可以分析 R2 中的数据,而无需将其导出到外部仓库。

R2 SQL 现在支持在单个查询中连接多个 Iceberg 表。您可以使用 JOIN 组合表,使用子查询进行过滤,并定义多表 CTE 以构建复杂的分析查询。

新功能

  • JOININNER JOINLEFT JOINRIGHT JOINFULL OUTER JOINCROSS JOIN 以及隐式连接(FROM 中以逗号分隔,且条件在 WHERE 中)
  • 子查询IN / NOT INEXISTS / NOT EXISTSSELECT / WHERE / HAVING 中的标量子查询,以及派生表(FROM 中的子查询)
  • 多表 CTEWITH 子句可以引用不同的表并包含 JOIN
  • 自连接 — 使用不同的别名将表与自身连接
  • 多路连接 — 在单个查询中连接三个或更多表

示例

带有聚合的双表 JOIN

SELECT z.domain, z.plan, COUNT(*) AS request_count
FROM my_namespace.zones z
INNER JOIN my_namespace.http_requests h ON z.zone_id = h.zone_id
WHERE z.plan = 'enterprise'
GROUP BY z.domain, z.plan
ORDER BY request_count DESC
LIMIT 20

EXISTS 子查询

SELECT z.domain, z.plan
FROM my_namespace.zones z
WHERE EXISTS (
    SELECT 1 FROM my_namespace.firewall_events f
    WHERE f.zone_id = z.zone_id AND f.action = 'block'
)
ORDER BY z.domain
LIMIT 20

带有 JOIN 的多表 CTE

WITH top_zones AS (
    SELECT zone_id, COUNT(*) AS req_count
    FROM my_namespace.http_requests
    GROUP BY zone_id
    ORDER BY req_count DESC
    LIMIT 50
),
zone_threats AS (
    SELECT zone_id, COUNT(*) AS threat_count
    FROM my_namespace.firewall_events
    WHERE risk_score > 0.5
    GROUP BY zone_id
)
SELECT tz.zone_id, tz.req_count, COALESCE(zt.threat_count, 0) AS threat_count
FROM top_zones tz
LEFT JOIN zone_threats zt ON tz.zone_id = zt.zone_id
ORDER BY tz.req_count DESC
LIMIT 20

有关完整语法参考,请参阅 SQL 参考。有关连接性能指南,请参阅限制与最佳实践