OpenAICloudflare Developer Platform2026/06/08 0:00

R2 SQL - R2 SQL now supports UNION, INTERSECT, EXCEPT, and SELECT DISTINCT

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

R2 SQLがUNION・INTERSECT・EXCEPTとSELECT DISTINCTをサポート

Key Points

  • UNION/INTERSECT/EXCEPT対応
  • SELECT DISTINCT対応
  • approx_distinctで高速集計

Summary

R2 SQLがApache Icebergテーブル(R2 Data Catalog)に対して集合演算(UNION, INTERSECT, EXCEPT)とSELECT DISTINCTのサポートを追加しました。複数のSELECT結果の結合、共通/差分の抽出、重複排除をSQLレベルで直接実行でき、分析クエリの表現力と簡便性が向上します。

Key Points

  • 対応演算: UNION, UNION ALL, INTERSECT, EXCEPT, SELECT DISTINCT
  • 動作概要: UNIONはデフォルトで重複を削除。UNION ALLは重複を保持。INTERSECTは共通行、EXCEPTは差集合を返す。
  • 実用例: ファイアウォールやリクエストログからゾーンIDを抽出して和集合/積集合/差集合を求めるといった分析が可能
  • パフォーマンス: 大規模データでのユニーク数集計は approx_distinct() が高速な代替手段
  • 注意点: ORDER BY / LIMIT は最終結果に適用。サブクエリでの GROUP BY / HAVING と組み合わせ可能。詳細はSQLリファレンスとベストプラクティスを参照

Examples

  • UNION(重複排除) 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

  • INTERSECT(共通行) 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

  • EXCEPT(差集合) 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

参照: 詳細な構文はSQLリファレンス、性能/制限はLimitations and best practicesを確認してください。

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

R2 SQL — R2 SQL が UNION、INTERSECT、EXCEPT、および SELECT DISTINCT をサポート

R2 SQL が UNION、INTERSECT、EXCEPT、および SELECT DISTINCT をサポート

公開日: 2026-06-08

R2 SQL は集合演算(UNION, INTERSECT, EXCEPT)と SELECT DISTINCT をサポートし、R2 Data Catalog 内の Apache Iceberg テーブルに対して直接実行できる分析クエリの幅を広げます。

集合演算

複数の SELECT 文の結果を組み合わせます:

  • UNION — 両方のクエリからすべての行を返し、重複を除外
  • UNION ALL — 両方のクエリからすべての行を返し、重複を保持
  • INTERSECT — 両方のクエリに共通して出現する行のみを返す
  • EXCEPT — 最初のクエリに存在し、2 番目のクエリには存在しない行を返す

例:

-- 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 reference を参照してください。パフォーマンスに関するガイダンスは Limitations and best practices を参照してください。