- Cloudflare vừa thêm ba nâng cấp lớn cho R2 SQL: parse JSON trực tiếp trong SQL, output query plan dạng JSON để phân tích tự động, và query được các bảng Iceberg chưa phân vùng — tất cả chạy serverless trên R2 Data Catalog với zero egress.
TL;DR
Ngày 20/04/2026, Cloudflare ship ba upgrade cho R2 SQL — query engine serverless cho Apache Iceberg trên R2:
- JSON functions (
json_get_str,json_get_int,json_get_bool,json_contains...) để parse JSON ngay trong SQL, không cần ETL tầng client. - EXPLAIN FORMAT JSON trả về query plan dạng JSON có cấu trúc — dùng cho dashboard, CI check, hoặc tooling tự động.
- Unpartitioned Iceberg tables — query được các bảng chưa khai báo partition key (hợp cho dataset nhỏ hoặc giai đoạn bootstrap).

What's new
Cloudflare tiếp tục cadence phát triển nhanh của R2 SQL sau các đợt cập nhật tháng 2 (approximate aggregation) và tháng 3 (190+ functions và complex types). Đợt này tập trung vào trải nghiệm thực tế khi query dữ liệu dạng log/event — nơi JSON gần như là format mặc định.
Ví dụ truy vấn từ docs của Cloudflare:
SELECT
json_get_str(doc, 'name') AS name,
json_get_int(doc, 'user', 'profile', 'level') AS level,
json_get_bool(doc, 'active') AS is_active
FROM my_namespace.sales_data
WHERE json_contains(doc, 'email')Cú pháp operator rút gọn cũng khả dụng: -> tương đương json_get, ->> cho json_as_text, và ? cho json_contains.
Why it matters
Trước đây, muốn lọc một field nằm sâu trong JSON blob của Iceberg table, bạn phải kéo dữ liệu về client rồi parse — hoặc maintain một pipeline ETL riêng để flatten schema. Cả hai đều đắt: bandwidth, thời gian, và thêm một hệ thống phải vận hành.
Với JSON functions chạy ngay trong query engine DataFusion của R2 SQL, predicate pushdown và file pruning diễn ra trước khi JSON được đọc. Kết quả: bytes scanned giảm mạnh, query nhanh hơn, và vì R2 có zero egress fee, cost cũng rẻ hơn một đường dài so với Athena/Snowflake đặt ngoài hyperscaler.
Technical facts
JSON scalar functions đầy đủ:
| Function | Purpose | Default khi miss |
|---|---|---|
json_get_str | Lấy string | "" |
json_get_int | Lấy integer | 0 |
json_get_float | Lấy float | 0.0 |
json_get_bool | Lấy boolean | false |
json_get_json | Lấy nested JSON dạng string | null |
json_contains | Kiểm tra key tồn tại | false |
json_length | Độ dài object/array | 0 |
extract_json, extract_json_string | JSONPath | — |
EXPLAIN FORMAT JSON trả structured plan có: tên execution node (CoalescePartitionsExec, DataSourceExec...), output partition, row count, bytes ước lượng, số file được scan, column projection, LIMIT. Dễ parse hơn text plan rất nhiều — phù hợp để build CI assertion kiểu "query này phải prune được tối thiểu 95% file".
Unpartitioned table: Cloudflare vẫn khuyến cáo partition khi table vượt 1000 files, nhưng bây giờ không còn là blocker khi mới khởi tạo bảng.
Comparison với các cập nhật R2 SQL trước
| Ngày | Release | Nội dung chính |
|---|---|---|
| 25/09/2025 | Public beta | Launch R2 SQL cho Iceberg trên R2 |
| 09/02/2026 | Approximate aggregations | approx_distinct, approx_median, approx_percentile_cont |
| 23/03/2026 | 190+ functions | CASE, CTE, 163 scalar + 33 aggregate, struct/array/map |
| 20/04/2026 | JSON + EXPLAIN JSON + unpartitioned | Bài này |
Use cases
- Webhook / event logs: lưu payload vào một cột
docJSON trong Iceberg, lọc theo field mà không cần ETL flatten. - Observability & CI gating: dùng
EXPLAIN FORMAT JSONtrong pipeline để assert predicate pushdown thực sự xảy ra, tránh regress query đắt tiền. - Bootstrap datasets: prototype table Iceberg mà chưa cần quyết sớm partition key.
- Logpush → R2 Iceberg → R2 SQL: kết hợp với Pipelines-as-Logpush-destination (cùng ngày) thành pipeline raw log → Iceberg → query JSON end-to-end trong Cloudflare.
Limitations & pricing
R2 SQL vẫn đang open beta, read-only, một bảng mỗi query. Không có JOIN, window function, DISTINCT, OFFSET, UNION/INTERSECT/EXCEPT, subquery, ARRAY_AGG, STRING_AGG. Chỉ hỗ trợ Parquet (không CSV/JSON file). Time function quantize 10ms và ép UTC.
R2 giữ giá $0.015/GB-month storage, egress free. R2 Data Catalog hiện free ngoài storage; pricing tương lai dự kiến $9.00/1 triệu catalog operations và $0.05/GB data compaction. Xem chi tiết tại Limitations & best practices.
What's next
Roadmap R2 SQL nhắm đến aggregation sâu hơn, hỗ trợ multi-table rộng hơn, và GA cho cả R2 SQL lẫn Data Catalog. Nhịp ship hiện tại (ba release lớn trong 10 tuần) cho thấy Cloudflare đang đẩy mạnh tham vọng thành một Snowflake/Athena cho edge, với lợi thế cốt lõi là zero egress và không phải vận hành cluster.
Nếu team bạn đang log event hoặc webhook payload sang S3/R2 dưới dạng JSON và hôm nay vẫn phải chạy một Glue/Spark job chỉ để flatten schema, đây là thời điểm hợp lý để thử prototype pipeline tối giản: Pipelines → R2 Iceberg → R2 SQL với json_get_*. Nếu thấy predicate pushdown chưa hoạt động như kỳ vọng, bật EXPLAIN FORMAT JSON để nhìn thẳng vào plan — không còn phải đoán.
Nguồn: Cloudflare Changelog (2026-04-20), JSON functions docs, R2 SQL deep dive.
