İçeriğe atla
Cloudflare Wiki

    gez · aç · Esc kapat

    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şenNe yaparDurum
    PipelinesAkış verisini alır, dönüştürür, Iceberg veya Parquet olarak R2’ye yazaropen beta
    R2 Data CatalogR2 bucket’ına gömülü Apache Iceberg REST kataloğupublic beta
    R2 SQLIceberg tablolarını sorgulayan sunucusuz motoropen 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 its http_status column 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ı. OFFSET desteklenmiyor.
    • 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

    Terminal — bucket create ve catalog enable çıktıları; dönen warehouse değeri

    Adım 2 — Stream, sink ve pipeline oluştur

    Terminal — stream, sink ve pipeline oluşturma komutlarının çıktıları; HTTP alım adresi

    Adım 3 — Veri gönder

    curl ile JSON event gönderimi ve başarılı yanıt

    Adım 4 — Iceberg tablosunu sorgula

    Sorgu sonucu tablosu ve taranan veri miktarı bilgisi
    İki sorgu çıktısı — filtreli ve filtresiz sürümlerin taradığı veri miktarındaki fark

    Adım 5 — Compaction etkisini gör

    R2 bucket içeriği — küçük dosyaların birleştirilip 'compacted-' önekli dosyalara dönüşmesi

    Demo 2: Aynı tabloyu dışarıdan okuma

    Bu demo, “kilitlenme yok” iddiasını doğrular.

    Adım 1 — DuckDB ile bağlan

    DuckDB konsolu — Iceberg katalog bağlantısı ve tablo listesi

    Adım 2 — Aynı sorguyu iki motorla çalıştır

    Aynı sorgunun iki motordaki sonuçları ve süreleri yan yana

    Adım 3 — Desteklenmeyen işlemleri test et

    İki hata çıktısı — yazma denemesi ve OFFSET kullanımı

    Adım 4 — Bütçe kapısını tetikle

    ARRAY_AGG veya window fonksiyonu içeren sorgunun çalışmadan reddedildiği çıktı

    Ölçüm

    ÖlçütDeğ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
    DahilAyda 10 GB taranan veri
    Taranan veri0,0025 USD / GB (2,50 USD / TB)
    • Sorgu başına minimum 10 MB faturalanır
    • Başarısız sorgular ücretlendirilmez
    • EXPLAIN, SHOW, DESCRIBE veri taramadığı için ücretsiz

    R2 Data Catalog

    DahilAşım
    Catalog işlemi1 milyon/ay9,00 USD / milyon
    Compaction işlenen veri10 GB/ay0,005 USD / GB
    Compaction işlenen nesne1 milyon/ay2,00 USD / milyon

    Snapshot süresi dolumu ücretsizdir.

    Pipelines

    DahilAşım
    Stream (alım)Sınırsız
    SQL dönüşümü50 GB/ay0,04 USD / GB
    Sink — R2 JSON50 GB/ay0,03 USD / GB
    Sink — R2 Parquet/Iceberg50 GB/ay0,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ü:

    KalemTutar
    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
    Toplam286,28 USD

    Limitler

    Pipelines (open beta)

    KaynakSınır
    Hesap başına stream20
    Hesap başına sink20
    Hesap başına pipeline20
    İstek başına payload5 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?
    OFFSET desteklenmiyor, yani klasik SQL sayfalaması yapamazsın. Resmî öneri LIMIT ile birlikte monoton artan bir kolon üzerinde WHERE koşulu kullanmak — Pipelines'ın eklediği __ingest_ts kolonu 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üm WHERE filtresi veya GROUP BY eklemek.
    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.

    Hata bildir

    Yanlış bir rakam, eskimiş bir bilgi veya bozuk bir bağlantı mı buldun? Bildir, kaynağıyla birlikte kontrol edelim.