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).

Cloudflare R2 Data Catalog iceberg banner

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 đủ:

FunctionPurposeDefault khi miss
json_get_strLấy string""
json_get_intLấy integer0
json_get_floatLấy float0.0
json_get_boolLấy booleanfalse
json_get_jsonLấy nested JSON dạng stringnull
json_containsKiểm tra key tồn tạifalse
json_lengthĐộ dài object/array0
extract_json, extract_json_stringJSONPath

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àyReleaseNội dung chính
25/09/2025Public betaLaunch R2 SQL cho Iceberg trên R2
09/02/2026Approximate aggregationsapprox_distinct, approx_median, approx_percentile_cont
23/03/2026190+ functionsCASE, CTE, 163 scalar + 33 aggregate, struct/array/map
20/04/2026JSON + EXPLAIN JSON + unpartitionedBài này

Use cases

  • Webhook / event logs: lưu payload vào một cột doc JSON trong Iceberg, lọc theo field mà không cần ETL flatten.
  • Observability & CI gating: dùng EXPLAIN FORMAT JSON trong 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.