R2 SQL がテーブルの壁を突破!JOIN もサブクエリも書けるようになったよ
やっほー、しぃちゃんだよ!今日は R2 SQL がぐっと強くなったニュースを見つけちゃった。データ分析がはかどりそうで、わくわくしてるの。
Cloudflare Changelogなにが発表されたの?
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 にデータを貯めていて「もっと踏み込んだ分析がしたい!」って人にぴったりのアップデートだね。