觀點 · 資訊分享

Cloudflare R2 SQL 學會 JOIN 與子查詢:多張 Iceberg 表可以直接在 R2 上一次查完

Cloudflare 在 5 月 15 日的更新日誌宣布,R2 SQL 支援跨多張 Iceberg 資料表的 JOIN、子查詢與多表 CTE。資料不必先匯出到外部資料倉儲,就能做比較複雜的分析。

發布
2026-05-15
篇幅
約 3 分鐘 · 1,473 字
結構
7 節 + 4 題常見問題
標籤
#Cloudflare#R2 SQL#Apache Iceberg#JOIN#資料分析
Cloudflare R2 SQL 學會 JOIN 與子查詢:多張 Iceberg 表可以直接在 R2 上一次查完

一句話看懂:Cloudflare 的 R2 SQL 現在可以把多張資料表接在一起查(JOIN),也支援子查詢,放在 R2 的分析資料不用匯出就能做比較複雜的統計。

R2 SQL 支援 JOIN資訊圖卡:資料不用搬出 R2,多張表一次查完

先用白話講:R2 SQL 與 JOIN 是什麼?

想像你有兩份 Excel:一份是「客戶名單」,一份是「訂單紀錄」。如果只能一次看一份,你想知道「哪位客戶下的單最多」,就得自己在兩份表之間來回對照。JOIN 的意思,就是請系統用共同的欄位(例如客戶編號)把兩份表自動對起來,一次給你答案。

R2 SQL 是 Cloudflare 提供的查詢服務:你的資料以 Apache Iceberg 格式存在 R2(Cloudflare 的物件儲存)裡,R2 SQL 直接在 Cloudflare 的全球網路上幫你下 SQL 指令查詢,不用自己管伺服器,也不用把資料搬到別的資料倉儲。

發生什麼事

Cloudflare 在 5 月 15 日的更新日誌宣布,R2 SQL 現在支援在單一查詢中結合多張 Iceberg 資料表。官方列出的新能力有:

  • JOIN:INNER、LEFT、RIGHT、FULL OUTER、CROSS,以及用逗號寫在 FROM、條件放在 WHERE 的隱含 JOIN
  • 子查詢:IN / NOT IN、EXISTS / NOT EXISTS、放在 SELECT / WHERE / HAVING 的純量子查詢,以及放在 FROM 的衍生資料表
  • 多表 CTE:WITH 子句可以引用不同的資料表,也可以包含 JOIN
  • 自我 JOIN:用不同別名把一張表跟自己接起來
  • 多路 JOIN:一個查詢中串接三張以上的資料表

什麼時候會用到

  • 想把「網站清單」跟「請求紀錄」接起來,算出每個網站的流量
  • 想找出「曾經被防火牆擋下過的網站」,用 EXISTS 子查詢判斷
  • 想先算出流量前 50 名的網站,再跟威脅事件統計合併,用多表 CTE 加 JOIN 完成

給開發者的技術細節

以下是自己簡化的範例,把兩張表接起來統計:

SELECT z.domain, COUNT(*) AS request_count
FROM my_namespace.zones z
INNER JOIN my_namespace.http_requests h ON z.zone_id = h.zone_id
GROUP BY z.domain
ORDER BY request_count DESC
LIMIT 20
  • 資料表需要是存在 R2 Data Catalog 的 Iceberg 表
  • 官方另外提供完整的 SQL 語法參考,以及「限制與最佳實務」頁面說明 JOIN 的效能建議,寫查詢前建議先看
  • 這則更新沒有提到價格或查詢量上限的變動,目前官方公告沒有說明

我的看法

我自己的專案大多是中小型網站,資料量不大,直接用一般資料庫就夠,不一定用得到 Iceberg 這一類的大型分析架構。但這個方向值得留意:越來越多雲端服務讓你「資料放在便宜的物件儲存,要用時直接下 SQL」,不用另外養一套資料倉儲。

對想做網站流量、日誌分析的小團隊來說,能 JOIN 是從「只能看單張報表」進步到「能做真正分析」的關鍵一步。不過我會先用小資料量測試效能與費用,再決定要不要把分析流程搬過來。

名詞小辭典

  • R2:Cloudflare 的物件儲存服務,用來存放檔案與大量資料。
  • Apache Iceberg:一種管理大型資料表的開放格式,讓存在物件儲存裡的資料能像資料庫表格一樣被查詢。
  • JOIN:把多張資料表依共同欄位接在一起的查詢方式。
  • CTE:用 WITH 先定義一段「暫時結果」,讓後面的查詢可以引用,讓長查詢更好讀。

資料來源

常見問題

R2 SQL 是什麼?
Cloudflare 提供的無伺服器 SQL 查詢引擎,專門查詢存放在 R2(Cloudflare 的物件儲存)裡、格式為 Apache Iceberg 的資料表,不需要自己架伺服器,也不用把資料先匯出到別的資料倉儲。
JOIN 是什麼意思?
把兩張以上的資料表依照共同欄位(例如網站編號)接在一起查詢。像是把「網站清單」和「請求紀錄」對起來,算出每個網站有多少請求。
跟以前差在哪?
官方這則更新的重點是:現在可以在單一查詢中結合多張 Iceberg 資料表,並且使用子查詢與多表 CTE,能寫出更複雜的分析查詢。
效能有什麼要注意?
官方另外提供「限制與最佳實務」頁面講 JOIN 的效能建議,這則更新公告本身沒有寫效能數字,請以官方文件為準。
LINE