Data Platform
Şemsiye terim: Pipelines + R2 Data Catalog + R2 SQL. Event verisini toplar, Iceberg'de saklar, SQL ile sorgulatır.
- DurumAçık beta
- FiyatÜç bileşen ayrı faturalanır: transform GB, catalog işlemi, taranan veri
- Doğrulama
Data Platform nedir?
| Bileşen | Ne yapar | Durum |
|---|---|---|
| Pipelines | Akış verisini alır, dönüştürür, Iceberg veya Parquet olarak R2’ye yazar | open beta |
| R2 Data Catalog | R2 bucket’ına gömülü Apache Iceberg REST kataloğu | public beta |
| R2 SQL | Iceberg tablolarını sorgulayan sunucusuz motor | open beta |
İkisi (Catalog ve SQL) aslında R2 özelliğidir — bucket bazında açılır ve R2’nin üstüne eklenerek faturalanır. Yalnızca Pipelines bağımsız bir üründür.
Hiçbiri GA değildir.
Çözdüğü problem, duyurudan birebir: “traditional data infrastructure is expensive and hard to operate, requiring fixed cloud infrastructure and in-house expertise.” Ayırt edici kaldıraç ise egress: “egress fees still make it cost-prohibitive to query data across regions and clouds. R2, with zero-cost egress, solves that problem.”
Nasıl çalışır?
Hat
Event kaynağı (HTTP / Worker binding / Logpush)
→ STREAM dayanıklı tamponlu kuyruk, yalnızca JSON
→ PIPELINE durumsuz SQL dönüşümü
→ SINK Iceberg tablosu | ham Parquet | ham JSON
→ R2 Data Catalog Iceberg metadata + compaction
→ R2 SQL / DuckDB / Spark / Trino / Snowflake / PyIceberg
Pipelines’ın üç nesnesi resmî olarak şöyle tanımlanıyor:
“Streams are how you get data into Cloudflare. They’re durable, buffered queues… Sinks define the destination for your data… Pipelines connect streams and sinks via SQL transformations.”
Teslim garantisi güçlü: “ingestion is exactly-once, which means that we will never duplicate or drop events on their way to R2.” Bu, Queues’un at-least-once garantisinden farklıdır.
R2 SQL nasıl sorguluyor
İki aşamalı tasarım. Önce planlayıcı, hiç veri okumadan Iceberg metadata’sıyla eleme yapar:
“If a query asks for
http_status = 500, and a file’s stats show itshttp_statuscolumn has a min of 200 and a max of 404, that entire file can be skipped.”
Sonra yürütücü, sorguyu Workers ve Cloudflare ağı üzerinde paralel çalıştırır.
Bu tasarım faturayı doğrudan etkiler: iyi filtrelenmiş bir sorgu az veri tarar, az veri taramak az ödemek demektir.
Compaction
Akış verisi çok sayıda küçük dosya üretir; compaction bunları birleştirir. Hedef dosya boyutu 64 MB – 512 MB arası ayarlanır:
| Kullanım | Önerilen hedef |
|---|---|
| Gecikmeye duyarlı | 64–128 MB |
| Akış verisi alımı | 128–256 MB |
| OLAP taramaları | 256–512 MB |
Snapshot süresi dolumu (varsayılan 30 gün) ücretsizdir; compaction ücretlidir.
Ne zaman kullanılır, ne zaman kullanılmaz
Uygun olduğu işler
- Event verisini (log, tıklama, telemetri) ucuza saklamak ve sorgulamak
- Iceberg tablolarını açık formatta tutup birden çok motorla okumak
- Bulutlar arası sorgulamada egress faturasından kaçınmak
- Alım anında filtreleme (“shift left”) — gereksiz veriyi hiç saklamamak
Uygun olmadığı işler
- Sorgu katmanından yazma gerekiyorsa. R2 SQL salt okunur.
- JSON dışı formatta veri alımı. Stream’ler yalnızca JSON kabul eder.
- Klasik SQL sayfalaması.
OFFSETdesteklenmiyor. - Akış üzerinde aggregation, join veya window. Durumsuz dönüşüm var yalnızca.
- Üç ve daha fazla büyük tablonun çoklu JOIN’i. Beta sırasında zaman aşımına uğrayabilir.
- 20’den fazla stream, sink veya pipeline. Hesap başına sert sınır (artırma formu var).
- Ücretsiz plan. Pipelines Workers Paid gerektirir.
- SLA destekli üretim ambarı. Üçü de beta.
Yerleşik alternatiflere karşı dürüst konum
Snowflake, BigQuery ve Databricks kurumsal üretim ambarı için doğru tercih olmaya devam ediyor — yazma/DML, transaction, materialized view, stored procedure, olgun RBAC ve SLA’ları var.
Ama şu ayrım önemli: depolama katmanı ile sorgu katmanı ayrı değerlendirilebilir. Veri açık Iceberg formatında R2’de durduğu ve egress ücretsiz olduğu için, R2 Data Catalog’u depolama olarak seçip sorgulamayı Snowflake veya Trino ile yapmak mümkün. Cloudflare bu altı motor için resmî bağlantı rehberi yayımlıyor. Bu, R2 SQL’i reddetsen bile savunulabilir bir mimari bırakır.
Somut örnekler
1. Uçtan uca kurulum
# API token izinleri: Pipelines (Read/Send/Edit), R2 Data Catalog (Read/Edit),
# R2 SQL (Read), R2 Storage (Read/Edit)
export WRANGLER_R2_SQL_AUTH_TOKEN=<TOKEN>
npx wrangler r2 bucket create olay-hatti
npx wrangler r2 bucket catalog enable olay-hatti
export WAREHOUSE=<HESAPID_KOVAADI>
# Akış verisinde compaction şart
npx wrangler r2 bucket catalog compaction enable olay-hatti \
--token $WRANGLER_R2_SQL_AUTH_TOKEN
2. Şema tanımlı stream
{
"fields": [
{ "name": "islem_id", "type": "string", "required": true },
{ "name": "kullanici_id","type": "int64", "required": true },
{ "name": "tutar", "type": "float64", "required": false },
{ "name": "sehir", "type": "string", "required": false },
{ "name": "supheli", "type": "bool", "required": false }
]
}
npx wrangler pipelines streams create ham-olaylar \
--schema-file sema.json --http-enabled true --http-auth false
npx wrangler pipelines sinks create ham-sink \
--type "r2-data-catalog" --bucket "olay-hatti" --roll-interval 30 \
--namespace "islemler" --table "ham" \
--catalog-token $WRANGLER_R2_SQL_AUTH_TOKEN
npx wrangler pipelines create ham-hat \
--sql "INSERT INTO ham_sink SELECT * FROM ham_olaylar"
3. Alım anında filtreleme
Aynı stream’i ikinci bir sink’e yönlendirerek yalnızca ilgilendiğin kayıtları ayrı tabloda tut.
npx wrangler pipelines sinks create supheli-sink \
--type "r2-data-catalog" --bucket "olay-hatti" --roll-interval 30 \
--namespace "islemler" --table "supheli" \
--catalog-token $WRANGLER_R2_SQL_AUTH_TOKEN
npx wrangler pipelines create supheli-hat \
--sql "INSERT INTO supheli_sink SELECT * FROM ham_olaylar WHERE supheli = true AND tutar > 1000"
4. Doğru sorgu deseni
npx wrangler r2 sql query "$WAREHOUSE" "
SELECT islem_id, kullanici_id, tutar, sehir
FROM islemler.ham
WHERE __ingest_ts > '2026-09-01T00:00:00Z'
AND supheli = true
LIMIT 100"
5. Alım anında normalleştirme
INSERT INTO olaylar_tablosu
SELECT
kullanici_id,
lower(olay) AS olay_tipi,
to_timestamp_micros(ts_us) AS olay_zamani,
regexp_match(url, '^https?://([^/]+)')[1] AS alan_adi,
url, referrer, user_agent
FROM olaylar_json
WHERE olay = 'sayfa_goruntuleme'
AND NOT regexp_like(user_agent, '(?i)bot|spider');
Demo 1: Event akışından sorguya
Adım 1 — Bucket ve catalog kur
Adım 2 — Stream, sink ve pipeline oluştur
Adım 3 — Veri gönder
Adım 4 — Iceberg tablosunu sorgula
Adım 5 — Compaction etkisini gör
Demo 2: Aynı tabloyu dışarıdan okuma
Bu demo, “kilitlenme yok” iddiasını doğrular.
Adım 1 — DuckDB ile bağlan
Adım 2 — Aynı sorguyu iki motorla çalıştır
Adım 3 — Desteklenmeyen işlemleri test et
Adım 4 — Bütçe kapısını tetikle
Ölçüm
| Ölçüt | Değer |
|---|---|
| Alım hızı (event/sn) | — |
| Filtreli sorguda taranan veri | — |
| Filtresiz sorguda taranan veri | — |
| Compaction öncesi/sonrası dosya sayısı | — |
| R2 SQL vs DuckDB sorgu süresi | — |
Fiyatlandırma
Üç bileşen ayrı faturalanır ve hepsinin üstüne R2’nin kendi ücretleri gelir.
R2 SQL
| Değer | |
|---|---|
| Dahil | Ayda 10 GB taranan veri |
| Taranan veri | 0,0025 USD / GB (2,50 USD / TB) |
- Sorgu başına minimum 10 MB faturalanır
- Başarısız sorgular ücretlendirilmez
EXPLAIN,SHOW,DESCRIBEveri taramadığı için ücretsiz
R2 Data Catalog
| Dahil | Aşım | |
|---|---|---|
| Catalog işlemi | 1 milyon/ay | 9,00 USD / milyon |
| Compaction işlenen veri | 10 GB/ay | 0,005 USD / GB |
| Compaction işlenen nesne | 1 milyon/ay | 2,00 USD / milyon |
Snapshot süresi dolumu ücretsizdir.
Pipelines
| Dahil | Aşım | |
|---|---|---|
| Stream (alım) | Sınırsız | — |
| SQL dönüşümü | 50 GB/ay | 0,04 USD / GB |
| Sink — R2 JSON | 50 GB/ay | 0,03 USD / GB |
| Sink — R2 Parquet/Iceberg | 50 GB/ay | 0,06 USD / GB |
Sink çıkışı sıkıştırılmamış veri üzerinden ölçülür. Ücretsiz katmanı yoktur.
Cloudflare’in kendi örneği
10 TB’lık veri kümesi üzerinde yoğun sorgu iş yükü:
| Kalem | Tutar |
|---|---|
| R2 depolama (9.990 GB-ay) | 149,85 USD |
| R2 SQL (49.990 GB taranan) | 124,98 USD |
| Catalog işlemi (1 milyon) | 9,00 USD |
| Compaction (490 GB) | 2,45 USD |
| Toplam | 286,28 USD |
Limitler
Pipelines (open beta)
| Kaynak | Sınır |
|---|---|
| Hesap başına stream | 20 |
| Hesap başına sink | 20 |
| Hesap başına pipeline | 20 |
| İstek başına payload | 5 MB |
| Stream başına alım hızı | 5 MB/s |
R2 SQL
Sayısal limit tablosu yayımlanmamıştır. Kısıtlar niteliksel:
Desteklenmeyen: yazma işlemleri, OFFSET, WINDOW clause, UNNEST/PIVOT/UNPIVOT,
LATERAL, PERCENTILE_DISC, nullable kolonda NOT IN.
Bütçe kapılı (çalışmadan reddedilebilir): MEDIAN, PERCENTILE_CONT, ARRAY_AGG,
STRING_AGG, NTH_VALUE, DISTINCT’li agregalar, tüm window fonksiyonları.
R2 Data Catalog’un limit sayfası yoktur — adres 404 veriyor. Compaction hedef dosya boyutu (64–512 MB) dışındaki her limit doğrulanmamıştır.
Lisanslama ve hukuki çerçeve
Üç bileşen de tescilli hizmettir; Cloudflare Hizmet Şartları kapsamındadır.
Veri formatı açısından iyi haber: tablolar açık Apache Iceberg formatında, R2’de duruyor. Yani veri kilidi (vendor lock-in) depolama katmanında yok — istediğin motorla okuyabilir, istediğin zaman başka bir yere taşıyabilirsin. Bu, tescilli bir ambar formatına göre önemli bir fark.
Veri yerleşimi: R2’nin yargı bölgesi kısıtları (eu, us, fedramp) bucket seviyesinde
geçerlidir. Türkiye için tanımlı bölge yoktur.
Event verisi ve KVKK: log ve telemetri verisi çoğu zaman kişisel veri içerir (IP adresi, kullanıcı kimliği, cihaz bilgisi). Pipelines’ın alım anında filtreleme yeteneği burada işe yarar — gereksiz kişisel veriyi hiç saklamamak, sonradan silmekten daha sağlıklıdır.
Sık yapılan hatalar
Zaman filtresi koymamak. Taranan GB başına ödüyorsun; filtresiz sorgu doğrudan fatura hatası.
Üretimde SELECT *. Parquet kolon tabanlıdır; * projection pushdown’ı devre dışı bırakır.
Büyük veride kesin agrega kullanmak. approx_distinct, approx_median,
approx_percentile_cont tercih et.
Nullable kolonda NOT IN. Desteklenmiyor; NOT EXISTS ile ilişkili alt sorgu kullan.
İki büyük fact tablosunu doğrudan JOIN etmek. Resmî öneri boyut tabloları üzerinden bağlamak.
WRANGLER_R2_SQL_AUTH_TOKEN ortam değişkenini unutmak. wrangler r2 sql query token’ı
yalnızca bu değişkenden okur; wrangler login kimliğine düşmez.
API token’ı dar kapsamlı vermek. R2 SQL üç izin ister: R2 SQL, R2 Data Catalog ve R2 Storage.
Akış tablosunda compaction’ı atlayıp yavaşlığı sorgu motoruna yormak.
Pipelines’ın ücretsiz katmanı olduğunu sanmak. Workers Paid gerektirir.
20’lik hesap sınırına takılıp artırma formunun varlığını bilmemek.
Sıkça sorulan sorular
- Data Platform'u nasıl etkinleştiririm?
- Edemezsin — etkinleştirilebilir bir ürün değil.
developers.cloudflare.com/data-platform/adresi 404 veriyor ve “Data Platform” ifadesi resmî doküman indeksinde hiç geçmiyor. Bu bir şemsiye terimdir; üç bileşeni ayrı ayrı açarsın: Pipelines, R2 Data Catalog ve R2 SQL. - Hangisi GA?
- Hiçbiri. Pipelines ve R2 SQL open beta, R2 Data Catalog public beta. Yayımlanmış bir GA tarihi yok. Üretim veri ambarı kurmadan önce bunu hesaba kat.
- R2 SQL ile veri yazabilir miyim?
- Hayır, salt okunur.
INSERT,UPDATE,DELETE,CREATE,DROP,ALTER— hiçbiri desteklenmiyor. Resmî tanım: “a query engine, not a database.” Yazma Pipelines üzerinden veya başka bir Iceberg motoruyla yapılır. - Hangi formatlarda veri alabiliyor?
- Giriş yalnızca JSON: “Streams currently accept events in JSON format.” Çıkışta üç seçenek var: Iceberg (R2 Data Catalog üzerinden), ham Parquet, veya ham JSON dosyaları.
- R2 SQL'e bağımlı kalır mıyım?
- Hayır, ve bu en güçlü yanı. Veri açık Apache Iceberg formatında R2'de durur. DuckDB, PyIceberg, Snowflake, Spark, StarRocks ve Trino için resmî bağlantı rehberleri var. R2'nin egress ücreti almaması sayesinde bulutlar arası sorgulama da cezalandırılmıyor. Yani R2 SQL'i beğenmesen bile depolama katmanı savunulabilir bir tercih olarak kalır.
- JOIN destekliyor mu?
- Evet — ve burada bayat bir bilgi dolaşıyor. Eylül 2025 lansman blogu “initially focused around filter queries” diyor ama bu artık geçerli değil. 2026 dokümantasyonuna göre tüm JOIN tipleri, CTE'ler, alt sorgular, window fonksiyonları, QUALIFY, küme işlemleri ve 190'dan fazla fonksiyon destekleniyor.
- Sonuçları nasıl sayfalarım?
OFFSETdesteklenmiyor, yani klasik SQL sayfalaması yapamazsın. Resmî öneriLIMITile birlikte monoton artan bir kolon üzerindeWHEREkoşulu kullanmak — Pipelines'ın eklediği__ingest_tskolonu tam bu iş için uygundur.- Sorgum çalışmadan neden 400 hatası aldım?
- Bütçe kapısına takıldın.
MEDIAN,PERCENTILE_CONT,ARRAY_AGG,STRING_AGG,NTH_VALUE,DISTINCT'li agregalar ve tüm window fonksiyonları çalıştırılmadan önce tahmin edilir: “R2 SQL estimates the memory required before running the query and rejects it with a 400 error if too much data would be scanned.” ÇözümWHEREfiltresi veyaGROUP BYeklemek. - Compaction gerekli mi?
- Akış verisi yazıyorsan evet. Resmî uyarı: compaction olmadan “the number of underlying data files that make up a table will grow, leading to slower and slower query performance.” Hedef dosya boyutu 64 MB ile 512 MB arasında ayarlanır. Ücreti var: 10 GB/ay dahil, sonrası işlenen GB başına 0,005 USD.
- Fatura nereden çıkar?
- Taranan veriden. R2 SQL, sorgunun R2'den okuduğu sıkıştırılmış veri hacmi üzerinden ücretlendirilir: 10 GB/ay dahil, sonrası GB başına 0,0025 USD. Sorgu başına minimum 10 MB faturalanır. Zaman filtresi koymamak doğrudan bir maliyet hatasıdır.
- Ücretsiz katmanı var mı?
- Pipelines için yok — Workers Paid gerektiriyor. R2 SQL'de ayda 10 GB taranan veri, R2 Data Catalog'da ayda 1 milyon catalog işlemi dahil. Bunların hepsinin üstüne R2'nin kendi depolama ve işlem ücretleri de gelir.
- Snowflake veya BigQuery yerine kullanabilir miyim?
- Bugün için hayır. Yazma/DML, transaction, materialized view, stored procedure, olgun yetkilendirme ve RBAC, SLA destekli GA — hiçbiri yok. Kurumsal üretim ambarı için Snowflake, BigQuery ve Databricks doğru tercih olmaya devam ediyor. Ama depolama katmanı ayrı değerlendirilebilir: açık Iceberg + sıfır egress, Snowflake'i aynı tablolara yönlendirmene izin verir.
İlgili servisler
- R2S3 uyumlu object storage — çıkış (egress) trafiği ücretsiz.
- WorkersJavaScript/TypeScript/Python kodunu Cloudflare’in 330+ şehirdeki sunucularında, sunucu yönetmeden çalıştırır.
- Queuesİşleri kuyruğa alıp arka planda batch ve garantili biçimde işler.
- Workers ObservabilityWorker loglarını, request trace’lerini ve error rate’i harici araç kurmadan gösterir.
- D1Workers’a bağlanan serverless SQLite veritabanı.
Bu sayfadaki fiyat ve özellik bilgileri 1 Eylül 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.