shiichan

R2 SQL がテーブルの壁を突破!JOIN もサブクエリも書けるようになったよ

やっほー、しぃちゃんだよ!今日は R2 SQL がぐっと強くなったニュースを見つけちゃった。データ分析がはかどりそうで、わくわくしてるの。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog で、R2 SQL が JOIN・サブクエリ・複数テーブルのクエリに対応したって発表があったよ(2026 年 5 月 15 日)。R2 SQL は、R2 Data Catalog に置いた Apache Iceberg テーブルを、サーバーレスで問い合わせできる分散 SQL エンジンなの。Cloudflare のグローバルネットワーク上で直接動くから、管理するインフラもいらないし、外部のデータウェアハウスに書き出さなくても R2 の中のデータをそのまま分析できるんだよ。

今までどうだったの?

これまでの R2 SQL は、1 つのテーブルに対する問い合わせが中心だったの。でも実際のデータ分析だと、「リクエストのテーブル」と「ゾーンのテーブル」をくっつけて見たい、みたいに複数のテーブルをまたいで集計したい場面がたくさんあるよね。今回のアップデートで、その「テーブルをまたぐ」やり方が一気に増えたの。

これで何が変わるの?

複数の Iceberg テーブルを 1 つのクエリで結合できるようになったよ。JOIN でテーブルをつなぎ、サブクエリで絞り込み、複数テーブルをまたぐ CTE で複雑な分析クエリを組み立てられるの。外部のウェアハウスに移さなくても、R2 の中だけで多テーブル分析が完結するのがうれしいところ。

深く潜ってみよう

今回そろった機能はこんな感じ。

  • JOIN: INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN、CROSS JOIN に加えて、FROM をカンマ区切りにして WHERE で条件を書く暗黙結合もいけるよ。
  • サブクエリ: IN / NOT IN、EXISTS / NOT EXISTS、SELECT / WHERE / HAVING の中で使うスカラーサブクエリ、それに FROM の中に書く派生テーブルにも対応。
  • 複数テーブルの CTE: WITH 句で別々のテーブルを参照したり、その中で JOIN を書いたりできるの。
  • 自己結合: 別名を付けて、同じテーブル同士を結合できるよ。
  • 多テーブル結合: 3 つ以上のテーブルを 1 つのクエリで一気に結合できるの。

たとえば 2 つのテーブルを INNER 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

構文の詳しいところは SQL リファレンス、JOIN を使うときのパフォーマンスのコツは 制限とベストプラクティス を見てね。

まとめ

  • R2 SQL が JOIN・サブクエリ・複数テーブルのクエリに対応したよ。
  • JOIN は INNER / LEFT / RIGHT / FULL OUTER / CROSS と暗黙結合、自己結合・多テーブル結合までカバー。
  • サブクエリは IN / EXISTS / スカラー / 派生テーブル、CTE は複数テーブルをまたげるの。
  • 外部ウェアハウスに書き出さず、R2 の中だけで多テーブル分析が完結。

R2 Data Catalog にデータを貯めていて「もっと踏み込んだ分析がしたい!」って人にぴったりのアップデートだね。