Cloudflare Enters the Data Platform Wars: R2, Pipelines, and Zero Egress
Cloudflare just launched a complete data analytics stack. With zero egress fees and Iceberg support, it's a serious challenger to the hyperscalers.
“Egress fees are the cloud’s dirty secret.”
You build on AWS. You store petabytes in S3. Then you need to analyse that data in Snowflake, or train a model in GCP, or serve it from your own CDN—and suddenly you’re paying $0.09/GB to move your own data.
Cloudflare just declared war on that model.
Their new Data Platform—comprising R2 (object storage), Pipelines (streaming ingestion), R2 Data Catalog (Iceberg metadata), and R2 SQL (query engine)—offers something no hyperscaler can match: zero egress fees.
The Three Components
1. Cloudflare R2: S3-Compatible, Zero Egress
R2 has been around since 2022, but it’s matured significantly:
- S3-compatible API: Works with existing tools (boto3, AWS CLI, Terraform)
- Two storage classes: Standard (0.01/GB-month)
- Global distribution: Data replicated across 330+ data centres
- Zero egress: No charges for data leaving R2, ever
Pricing Comparison (per GB-month storage + egress for 100GB transfer):
| Provider | Storage | Egress (100GB) | Total |
|---|---|---|---|
| AWS S3 | $0.023 | $9.00 | $11.30 |
| Azure Blob | $0.018 | $8.70 | $10.50 |
| Cloudflare R2 | $0.015 | $0.00 | $1.50 |
For data-intensive workloads, the savings are substantial.
2. Cloudflare Pipelines: Streaming Ingestion
Pipelines receives events via HTTP or Workers and delivers them to R2 in Iceberg format:
// Cloudflare Worker sending events to Pipeline
export default {
async fetch(request, env) {
const event = {
timestamp: Date.now(),
user_id: request.headers.get('x-user-id'),
action: 'page_view',
url: request.url
};
await env.ANALYTICS_PIPELINE.send(event);
return new Response('OK');
}
};javascriptKey Features:
- SQL transformations: Validate and schematise events before storage
- Exactly-once delivery: No duplicates, no data loss
- Built on Arroyo: Cloudflare acquired the open-source stream processing engine Arroyo specifically to bring stateful processing to Pipelines
Pipelines launched with stateless transformations only; the Arroyo acquisition has since brought stateful processing — aggregations, incrementally-updated materialised views, and joins — into the product.
3. R2 Data Catalog: Managed Iceberg
This is where it gets interesting for the data engineering community.
R2 Data Catalog is a managed Apache Iceberg catalog. It handles:
- Schema management: Track table schemas and evolution
- Partition tracking: Manifest files for efficient query planning
- Automatic compaction: Consolidates small files into larger ones (huge for query performance)
-- Creating an Iceberg table in R2 Data Catalog
CREATE TABLE analytics.page_views (
event_id STRING,
user_id STRING,
page_url STRING,
event_timestamp TIMESTAMP
)
USING ICEBERG
LOCATION 'r2://my-bucket/analytics/page_views';sqlInteroperability: Because it’s Iceberg, you can query R2 data from:
- Snowflake (via external Iceberg tables)
- Databricks (Unity Catalog integration)
- Spark, Trino, DuckDB
4. R2 SQL: Serverless Query Engine
R2 SQL is a distributed query engine optimised for R2 data:
-- Query R2 data directly
SELECT
DATE_TRUNC('hour', event_timestamp) AS hour,
COUNT(*) AS events
FROM analytics.page_views
WHERE event_timestamp >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY 1
ORDER BY 1;sqlR2 SQL launched in beta supporting filter queries only. It has since gained GROUP BY/HAVING and aggregate functions
(SUM, COUNT, AVG, MIN, MAX), followed by support for JOINs, subqueries, and multi-table queries — Cloudflare
has said to expect continued expansion of these capabilities through the first half of 2026.
The Value Proposition: No separate compute cluster. No warehouse to manage. Query your data where it lives.
Architecture: The Cloudflare Data Stack
Use Cases
Use Case 1: Clickstream Analytics
Problem: Clickstream data is high-volume (billions of events/day) and expensive to store/query on traditional warehouses.
Cloudflare Solution:
- Workers capture events at the edge (low latency)
- Pipelines streams to R2 in Iceberg format
- R2 SQL handles routine queries (dashboards)
- Snowflake handles complex analytics (via zero-egress external tables)
Cost Impact: A company processing 1TB/day of clickstream data could save ~$2,700/month in egress fees alone (vs. AWS).
Use Case 2: AI/ML Training Data
Problem: ML training requires reading datasets multiple times. Egress fees multiply.
Cloudflare Solution:
- Store training data in R2
- Train models on any cloud (GCP, Azure, on-prem) without egress penalties
- Update models with fresh data continuously
Real Example: A computer vision startup storing 50TB of image data would pay ~0.
Use Case 3: Multi-Cloud Data Mesh
Problem: Different teams use different clouds. Data sharing requires expensive cross-cloud transfers.
Cloudflare Solution:
- R2 as the “neutral zone” for shared data
- Each team queries from their preferred engine (Snowflake, Databricks, BigQuery)
- Iceberg format ensures compatibility
Integrating Cloudflare R2 with Snowflake
Here’s how to query R2 data from Snowflake:
R2 is S3-compatible, not native S3 — so Snowflake connects to it via the S3COMPAT storage provider, which
authenticates with access keys rather than an IAM role ARN (there’s no AWS IAM outside of AWS itself). Reading R2 Data
Catalog tables also means pointing Snowflake at R2’s Iceberg REST catalog, not Snowflake’s own managed catalog.
Step 1: Create External Volume
CREATE OR REPLACE EXTERNAL VOLUME r2_volume
STORAGE_LOCATIONS = (
(
NAME = 'r2_analytics'
STORAGE_PROVIDER = 'S3COMPAT'
STORAGE_BASE_URL = 's3compat://my-r2-bucket'
CREDENTIALS = (
AWS_KEY_ID = '<r2_access_key_id>'
AWS_SECRET_KEY = '<r2_secret_access_key>'
)
STORAGE_ENDPOINT = '<account_id>.r2.cloudflarestorage.com'
)
)
ALLOW_WRITES = FALSE;sqlStep 2: Create a Catalog Integration Pointing at R2 Data Catalog
CREATE OR REPLACE CATALOG INTEGRATION r2_data_catalog
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = '<r2_data_catalog_uri>'
CATALOG_NAME = '<r2_warehouse_name>'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = '<r2_api_token>'
)
ENABLED = TRUE;sqlStep 3: Create the Iceberg Table
CREATE ICEBERG TABLE analytics.r2_page_views
CATALOG = 'r2_data_catalog'
EXTERNAL_VOLUME = 'r2_volume'
CATALOG_TABLE_NAME = 'page_views';sqlStep 4: Query
SELECT
DATE_TRUNC('day', event_timestamp) AS day,
COUNT(DISTINCT user_id) AS dau
FROM analytics.r2_page_views
WHERE event_timestamp >= '2026-01-01'
GROUP BY 1;sqlKey Benefit: Zero egress from R2. You pay Snowflake compute, not Cloudflare transfer.
Limitations and Gotchas
1. R2 SQL Is Still Maturing
It launched limited to filter queries and has since added aggregations and joins, but it is still newer and less battle-tested than an established warehouse engine. For heavy analytical workloads, complex transformations, or anything governance-sensitive, Snowflake/Databricks remain the safer choice today.
2. No Native Data Warehouse Features
R2 is storage + catalog + basic query. It doesn’t have:
- Materialised views
- Automatic clustering
- Time Travel (beyond Iceberg snapshots)
- Result caching
For full warehouse capabilities, you still need Snowflake or similar.
3. Regional Considerations
R2 replicates globally, but writes go to a primary region. For latency-sensitive writes, choose your bucket region carefully.
4. Ecosystem Maturity
Snowflake, Databricks, and BigQuery have massive ecosystems (connectors, tools, community). Cloudflare’s data platform is new. Expect fewer third-party integrations initially.
Pricing Summary
| Service | Pricing Model | Free Tier |
|---|---|---|
| R2 Storage | $0.015/GB-month (Standard) | 10 GB/month |
| R2 Operations | 0.36/million Class B | 1M Class A, 10M B |
| Pipelines | TBD (currently beta) | Beta (free) |
| R2 Data Catalog | TBD (currently beta) | Beta (free) |
| R2 SQL | TBD (currently beta) | Beta (free) |
The Strategic Implications
Cloudflare’s entry into the data platform space is significant because:
-
Zero egress is a business model, not a feature. It fundamentally changes cost calculations for multi-cloud architectures.
-
Iceberg as the standard: By building on Iceberg, Cloudflare ensures interoperability with the entire lakehouse ecosystem.
-
Edge + Analytics: No other vendor combines global edge compute (Workers) with analytical storage (R2 + Iceberg) at this scale.
Conclusion
Cloudflare’s Data Platform isn’t a Snowflake killer—it’s a complement. Use Snowflake for complex analytics, governance, and enterprise features. Use R2 for cost-effective storage, especially when data needs to flow to multiple destinations.
The zero-egress model is the headline, but the real story is Iceberg adoption. Every major platform now speaks Iceberg: Snowflake, Databricks, BigQuery, and now Cloudflare. The table format wars are over.
Key Takeaways:
- R2 + Pipelines + Data Catalog = complete ingestion-to-storage stack
- Zero egress fees dramatically reduce multi-cloud data costs
- Iceberg format ensures Snowflake/Databricks/BigQuery compatibility
- R2 SQL and Pipelines both shipped with basic capabilities and have since gained aggregations and joins—still newer and less proven than an established warehouse for heavy analytical workloads
- Connecting Snowflake to R2 requires the
S3COMPATstorage provider (access-key auth) and a REST catalog integration—not the same setup as native S3