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を確認してください。