In april 2025 hebben we in Developer Week de openbare bètaversie van R2 Data Catalog aangekondigd, een volledig beheerde Apache Iceberg-catalogus als aanvulling op de Cloudflare R2-objectopslag. Vandaag presenteren we drie producten die daarop zijn gebaseerd:
Cloudflare Pipelines ontvangt gebeurtenissen die via Workers of HTTP worden verzonden, transformeert ze met SQL en neemt ze op in Iceberg of als bestanden in R2
R2 Data Catalog beheert de Iceberg-metadata en voert nu doorlopend onderhoud uit, inclusief compressie, om de queryprestaties te verbeteren
R2 SQL is onze interne, gedistribueerde SQL-engine, ontworpen om query's op petabyte-schaal op jouw data in R2 uit te voeren
Samen vormen deze producten het Cloudflare Data Platform, een complete oplossing voor het opnemen, opslaan en raadplegen van analytische datatabellen.
Net als alle Cloudflare Developer Platform-producten, draaien ze op onze wereldwijde computerinfrastructuur. Ze zijn op basis van open standaarden en met het oog op interoperabiliteit gebouwd. Dat betekent dat jij je eigen Iceberg-query-engine (PyIceberg, DuckDB of Spark) kunt gebruiken en verbinden met andere platforms zoals Databricks en Snowflake, en dat je geen kosten voor uitgaand dataverkeer hoeft te betalen om toegang te krijgen tot jouw data.
Analytische data is essentieel voor moderne bedrijven. Hiermee krijg je inzicht in het gedrag van je gebruikers en de prestaties van je bedrijf en ontvang je informatie over problemen. Maar een traditionele data-infrastructuur is duur en moeilijk te gebruiken. Er is een vaste cloudinfrastructuur en interne expertise voor nodig. We hebben het Cloudflare Data Platform zo gebouwd dat het voor iedereen gebruiksvriendelijk is, met betaalbare prijzen op basis van het gebruik.
Als je meteen aan de slag wilt, volg dan de Data Platform-tutorial voor een stapsgewijze handleiding voor het maken van een Pipeline die gebeurtenissen verwerkt en aan een R2 Data Catalog-tabel levert die vervolgens met R2 SQL kan worden ondervraagd. Of lees verder en ontdek hoe we hier zijn aanbeland en hoe dit allemaal werkt.
In 2021 hebben we R2 Object Storage gelanceerd met een radicale prijsstrategie: geen egress kosten (de bandbreedtekosten die traditionele cloud providers in rekening brengen voor uitgaand dataverkeer, waardoor jouw data feitelijk gegijzeld wordt). Dit was mogelijk, omdat we al een van de grootste wereldwijde netwerken hadden gebouwd, met verbindingen met duizenden internetproviders, clouddiensten en andere ondernemingen.
Objectopslag is geschikt voor allerlei verschillende toepassingen, van media en statische activa tot AI-trainingsdata. Maar in de loop der tijd hebben we gemerkt dat steeds meer bedrijven open data- en tabelindelingen gebruiken om hun analytische datawarehouses in R2 op te slaan.
De technologie die dit mogelijk maakt, is Apache Iceberg. Iceberg is een tabelindeling die database-achtige functies biedt (waaronder updates, ACID-transacties en schema-evolutie) naast de databestanden in de objectopslag. Met andere woorden: het is een metadata-laag die cliënten vertelt welke databestanden een bepaalde logische tabel vormen, wat de schema's zijn en hoe die op efficiënte wijze ondervraagd kunnen worden.
Dankzij het gebruik van Iceberg in de gehele sector waren gebruikers niet langer aan één query-engine gebonden. Maar vanwege de egress kosten is het nog steeds onbetaalbaar om data in verschillende regio's en clouds te ondervragen. R2, zonder egress kosten, loste dat probleem op: gebruikers zaten ook niet langer aan hun clouds vast. Ze konden hun data op een leveranciersonafhankelijke locatie opslaan en hun teams de query-engine laten gebruiken die het beste bij hun data en query-patronen paste.
Maar gebruikers moesten nog steeds zelf alle metadata en andere infrastructuur beheren. We begrepen dat hier een kans voor ons lag om een groot knelpunt te verwijderen en de problemen rondom de opslag van data lakes op R2 te reduceren. Zo ontstond R2 Data Catalog, onze beheerde Iceberg-catalogus.
Ondanks het feit dat de data op R2 was opgeslagen en de metadata beheerd werd, stonden gebruikers toch nog voor enkele uitdagingen.
Hoe wordt de data in de Iceberg-tabellen overgedragen? Hoe worden de query-prestaties geoptimaliseerd, zodra de data is overgedragen? En hoe kan deze data waarde creëren zonder dat je zelf een query-engine hoeft te hosten of een ander cloudplatform hoeft te gebruiken?
In de rest van dit bericht leggen we uit hoe de drie producten van het Data Platform deze uitdagingen aanpakken.
Analytische datatabellen bestaan uit gebeurtenissen, dingen die op een bepaald moment hebben plaatsgevonden. Ze kunnen afkomstig zijn van serverlogs, mobiele applicaties of IoT-apparaten en zijn gecodeerd in data-indelingen zoals JSON, Avro of Protobuf. Idealiter hebben de tabellen een schema (een gestandaardiseerde set velden) maar het kan ook zijn dat ze gewoon bevatten wat een bepaald team erin wilde gooien.
Voordat je deze gebeurtenissen met Iceberg kunt ondervragen, moeten ze eerst verzameld, goed gestructureerd en in objectopslag opgenomen zijn. Dat is de rol van Cloudflare Pipelines.
Pipelines werd gebouwd op basis van Arroyo, een streamverwerkingsengine die we eerder dit jaar hebben overgenomen. Pipelines ontvangt gebeurtenissen, transformeert ze met SQL-query's en slaat ze op in R2 en R2 Data Catalog.
Pipelines omvat drie centrale objecten:
Streams is de manier waarop data naar Cloudflare wordt verzonden. Het zijn duurzame, gebufferde wachtrijen die gebeurtenissen ontvangen en voor verwerking opslaan. Streams kan gebeurtenissen op twee manieren accepteren: via een HTTP-eindpunt of via een Cloudflare Worker-verbinding.
Sinks definieert de bestemming van jouw data. Wij ondersteunen de opname in R2 Data Catalog en de opslag van onbewerkte bestanden in R2 als JSON of Apache Parquet. Sinks kan zo worden geconfigureerd dat er regelmatig bestanden worden opgeslagen, waarbij prioriteit wordt gegeven aan opnames met een lage latentie, of zo dat er minder vaak grotere bestanden worden opgeslagen om de query-prestaties te verbeteren. In beide gevallen wordt de gebeurtenis precies één keer opgenomen, wat betekent dat we nooit gebeurtenissen dupliceren of verwijderen terwijl die naar R2 worden gestuurd.
Pipelines verbindt streams en sinks via SQL-transformaties die gebeurtenissen kunnen wijzigen voordat ze worden opgeslagen. Hierdoor kun je naar links verschuiven, waardoor de validatie, schematisering en verwerking in de opnamelaag gebeurt, zodat jouw query's eenvoudig, snel en correct zijn.
Hier is bijvoorbeeld een Pipeline die gebeurtenissen uit een clickstream-databron opneemt en naar Iceberg stuurt:
INSERT into events_table
SELECT
user_id,
lower(event) AS event_type,
to_timestamp_micros(ts_us) AS event_time,
regexp_match(url, '^https?://([^/]+)')[1] AS domain,
url,
referrer,
user_agent
FROM events_json
WHERE event = 'page_view'
AND NOT regexp_like(user_agent, '(?i)bot|spider');
SQL-transformaties zijn zeer krachtig en geven je volledige controle over hoe de data wordt gestructureerd en in de tabel wordt opgenomen. Dit zijn mogelijke functies:
Data schematiseren of normaliseren, zelfs met gebruik van JSON-functies om velden uit willekeurige JSON te halen
Gebeurtenissen uitfilteren of splitsen in afzonderlijke tabellen met hun eigen schema's
Gevoelige informatie vóór de opslag met regexes redigeren
Geneste arrays en objecten als afzonderlijke gebeurtenissen uitrollen
Pipelines ondersteunt in eerste instantie stateless transformaties. In de toekomst zullen we vaker de stateful verwerkingsfuncties van Arroyo gebruiken om aggregaties, incrementeel bijgewerkte gematerialiseerde weergaven en joins te ondersteunen.
Cloudflare Pipelines is vanaf vandaag als open bètaversie beschikbaar. Je kunt een pijplijn aanmaken met behulp van het dashboard, Wrangler of de REST API. Lees eerst onze documentatie voor ontwikkelaars.
Tijdens de open bètafase is Pipelines gratis. Voor de R2-opslag en -bewerkingen die nodig zijn voor het opslaan van gegevens naar R2, gelden echter onze standaardtarieven. Wanneer we beginnen met factureren, baseren we de kosten op de hoeveelheid gelezen data, de hoeveelheid verwerkte data via SQL-transformaties en de geleverde data.
In april hebben we de open bètaversie van R2 Data Catalog gelanceerd en we staan versteld van de positieve respons. Query-engines, zoals DuckDB, hebben ingebouwde ondersteuning toegevoegd en we hebben handige integraties gezien, zoals marimo notebooks.
Hiermee kun je eenvoudig met Iceberg aan de slag. Het is niet nodig om een databasecluster op te zetten, verbinding te maken met objectopslag of infrastructuur te beheren. Je kunt met een aantal Wrangler-opdrachten een catalogus aanmaken:
$ npx wrangler bucket create mycatalog
$ npx wrangler r2 bucket catalog enable mycatalog
Hiermee beschik je over een data lake dat naar petabytes aan opslagruimte kan worden geschaald en dat kan worden ondervraagd door elke engine die je maar wilt gebruiken, zonder enige egress kosten.
Maar het is niet voldoende om de data alleen op te slaan. Na verloop van tijd en naarmate er meer data wordt verwerkt, neemt het aantal onderliggende databestanden waaruit een tabel bestaat toe, met steeds tragere query-prestaties als gevolg.
Dit is vooral een probleem bij het opnemen van data met een lage latentie, waarbij het de bedoeling is om gebeurtenissen zo snel mogelijk opvraagbaar te maken. Als de data vaker wordt opgeslagen, zijn de bestanden kleiner en zijn er meer bestanden. Elk bestand dat nodig is voor een query moet vermeld, gedownload en gelezen worden. Het afzoeken van te veel kleine bestanden kan een groot deel van de totale query-tijd in beslag nemen.
De oplossing is compressie, een periodieke onderhoudsbeurt die automatisch door de catalogus wordt uitgevoerd. De compressie maakt van kleine bestanden grotere bestanden, waardoor er minder metadata is en de query-prestaties worden verbeterd.
Vandaag presenteren we compressie-ondersteuning voor R2 Data Catalog. Je kunt die heel eenvoudig voor jouw catalogus activeren:
$ npx wrangler r2 bucket catalog compaction enable mycatalog
We beginnen met ondersteuning voor het comprimeren van kleine bestanden en zullen dit in de toekomst met andere comprimeringsstrategieën uitbreiden. Lees de compressie-documentatie voor meer informatie over hoe het werkt en hoe je deze functie kunt inschakelen.
Op dit moment, tijdens de open bètafase, is R2 Data Catalog gratis. Hieronder staat onze huidige indicatie van de toekomstige prijzen:
| Prijzen* |
R2 Storage Voor de standaard opslagklasse | $ 0,015 per GB-maand (geen verandering) |
R2 Class A-bewerkingen | $ 4,50 per miljoen bewerkingen (geen verandering) |
R2 Class B-bewerkingen | $ 0,36 per miljoen bewerkingen (geen verandering) |
Data Catalog-bewerkingen bijv. tabel aanmaken, metadata van tabel ophalen, tabelkenmerken updaten | $ 9,00 per miljoen catalogusbewerkingen |
Verwerkte Data Catalogus-compressiedata | $ 0,005 per verwerkte GB $ 2,00 per miljoen verwerkte objecten |
Uitgaand dataverkeer | $ 0 (geen verandering, altijd gratis) |
*De prijzen kunnen voorafgaand aan de algemene beschikbaarheid worden gewijzigd
Wij zullen je ten minste 30 dagen van tevoren informeren voordat de facturering start of als er iets verandert.
De data in R2 Data Catalog opslaan, is de eerste stap. Het echte doel is om inzichten en waarde uit de data te halen. Normaal gesproken betekent dit dat je DuckDB, Spark, Trino of een andere query-engine moet instellen en beheren, waardoor er een operationele overheadslaag tussen jou en die inzichten wordt toegevoegd. Maar wat als je query's rechtstreeks via Cloudflare zou kunnen uitvoeren?
Nu is dat mogelijk. We hebben een query-engine gebouwd die speciaal voor R2 Data Catalog en de edge-infrastructuur van Cloudflare is ontworpen. We noemen die engine R2 SQL en die is vanaf vandaag als open bètaversie beschikbaar.
Met Wrangler is het uitvoeren van een query op een R2 Data Catalog-tabel niet moeilijker dan:
$ npx wrangler r2 sql query "{WAREHOUSE}" "\
SELECT user_id, url FROM events \
WHERE domain = 'mywebsite.com'"
Het vermogen van Cloudflare om overal op zijn wereldwijde netwerk rekenkracht in te zetten, vormt de basis van het ontwerp van R2 SQL. Hierdoor kunnen wij data direct verwerken waar die zich bevindt, zodat jij geen gecentraliseerde clusters voor je analytische workloads hoeft te beheren.
R2 SQL is sterk geïntegreerd met R2 Data Catalog en R2, waardoor de query-planner verder kan gaan dan alleen de opslag scannen, en diepgaand gebruik kan maken van de uitgebreide statistieken die in de R2 Data Catalog-metagegevens zijn opgeslagen. Dit is een krachtige basis voor een nieuw soort query-optimalisatie, zoals hulpindexen of het mogelijk maken van complexere analytische functies in de toekomst.
Het resultaat is een volledig serverloze ervaring voor gebruikers. Jij kunt je concentreren op jouw SQL, zonder dat je veel kennis hoeft te hebben van de werking van de engine. Als je geïnteresseerd bent in de werking van R2 SQL, heeft het team een uitgebreid artikel geschreven over hoe de gedistribueerde query-engine van R2 SQL op grote schaal functioneert.
De open bètaversie is een vroege preview van de R2 SQL-query-mogelijkheden en is in eerste instantie gericht op filterquery's. Na verloop van tijd zullen we de mogelijkheden ervan met meer SQL-functies uitbreiden, bijv. complexe aggregaties.
We zijn erg benieuwd wat onze gebruikers met R2 SQL zullen doen. Als je het wilt proberen, lees dan de documentatie en volg de tutorials. Tijdens de bètafase hoef je niet voor het gebruik van R2 SQL te betalen, maar voor de opslag en bewerkingen van R2 die door query's worden uitgevoerd gelden onze standaardtarieven. We zijn van plan om in de toekomst kosten in rekening te brengen voor de hoeveelheid data die door query's wordt gescand. We zullen je op de hoogte stellen voordat de facturering start.
Tegenwoordig kun je het Cloudflare Data Platform gebruiken om gebeurtenissen in R2 Data Catalog op te nemen en deze via R2 SQL te raadplegen. In de eerste helft van 2026 zullen we de functionaliteit van al deze producten uitbreiden, zoals:
Integratie met Logpush, zodat je jouw logs rechtstreeks in Cloudflare kunt transformeren, opslaan en raadplegen
Door de gebruiker gedefinieerde functies via Workers en ondersteuning voor stateful processing voor streaming-transformaties
Uitbreiding van de functionaliteit van R2 SQL naar aggregaties en joins
In de tussentijd kun je aan de slag met het Cloudflare Data Platform door de tutorial te volgen om een end-to-end analytisch datasysteem aan te maken, van opname via Pipelines, en opslag in R2 Data Catalog tot query's met R2 SQL.
Wij zijn benieuwd wat jullie gaan bouwen! Deel alle feedback op ons Developer Discord.