Cloudflare changelogs | PipelinesCloudflare changelogs for Pipelineshttps://developers.cloudflare.com/changelog/Pipelines - Pipelines now supports SQL transformations and Apache Iceberghttps://developers.cloudflare.com/changelog/2025-09-25-pipelines-sql/https://developers.cloudflare.com/changelog/2025-09-25-pipelines-sql/<p>Today, we're launching the new <a href="https://developers.cloudflare.com/pipelines/">Cloudflare Pipelines</a>: a streaming data platform that ingests events, transforms them with <a href="https://developers.cloudflare.com/pipelines/sql-reference/select-statements/">SQL</a>, and writes to <a href="https://developers.cloudflare.com/r2/">R2</a> as <a href="https://iceberg.apache.org/" target="_blank">Apache Iceberg</a> tables or Parquet files.</p> <p>Pipelines can receive events via <a href="https://developers.cloudflare.com/pipelines/streams/writing-to-streams/#send-via-http">HTTP endpoints</a> or <a href="https://developers.cloudflare.com/pipelines/streams/writing-to-streams/#send-via-workers">Worker bindings</a>, transform them with SQL, and deliver to R2 with exactly-once guarantees. This makes it easy to build analytics-ready warehouses for server logs, mobile application events, IoT telemetry, or clickstream data without managing streaming infrastructure.</p> <p>For example, here's a pipeline that ingests clickstream events and filters out bot traffic while extracting domain information:</p> <div><figure><pre data-language="sql"><code class="language-sql"><div><div><span>INSERT into</span><span> events_table</span></div></div><div><div><span>SELECT</span></div></div><div><div><span><span> </span></span><span>user_id,</span></div></div><div><div><span> </span><span>lower</span><span>(</span><span>event</span><span>) </span><span>AS</span><span> event_type,</span></div></div><div><div><span><span> </span></span><span>to_timestamp_micros(ts_us) </span><span>AS</span><span> event_time,</span></div></div><div><div><span><span> </span></span><span>regexp_match(</span><span>url</span><span>, </span><span>'^https?://([^/]+)'</span><span>)[1] </span><span>AS</span><span> domain,</span></div></div><div><div><span> </span><span>url</span><span>,</span></div></div><div><div><span><span> </span></span><span>referrer,</span></div></div><div><div><span><span> </span></span><span>user_agent</span></div></div><div><div><span>FROM</span><span> events_json</span></div></div><div><div><span>WHERE</span><span> </span><span>event</span><span> </span><span>=</span><span> </span><span>'page_view'</span></div></div><div><div><span> </span><span>AND</span><span> </span><span>NOT</span><span> regexp_like(user_agent, </span><span>'(?i)bot|spider'</span><span>);</span></div></div></code></pre><div></div></figure></div> <p>Get started by creating a pipeline in the dashboard or running a single command in <a href="https://developers.cloudflare.com/workers/wrangler/">Wrangler</a>:</p> <div><figure><pre data-language="bash"><code class="language-bash"><div><div><span>npx</span><span> </span><span>wrangler</span><span> </span><span>pipelines</span><span> </span><span>setup</span></div></div></code></pre><div></div></figure></div> <p>Check out our <a href="https://developers.cloudflare.com/pipelines/getting-started/">getting started guide</a> to learn how to create a pipeline that delivers events to an <a href="https://developers.cloudflare.com/r2/data-catalog/">Iceberg table</a> you can query with R2 SQL. Read more about today's announcement in our <a href="https://blog.cloudflare.com/cloudflare-data-platform" target="_blank">blog post</a>.</p>Thu, 25 Sep 2025 13:00:00 GMTPipelinesPipelinesPipelines, R2, Workers - Cloudflare Pipelines now available in betahttps://developers.cloudflare.com/changelog/2025-04-10-launching-pipelines/https://developers.cloudflare.com/changelog/2025-04-10-launching-pipelines/<p><a href="https://developers.cloudflare.com/pipelines">Cloudflare Pipelines</a> is now available in beta, to all users with a <a href="https://developers.cloudflare.com/workers/platform/pricing">Workers Paid</a> plan.</p> <p>Pipelines let you ingest high volumes of real time data, without managing the underlying infrastructure. A single pipeline can ingest up to 100 MB of data per second, via HTTP or from a <a href="https://developers.cloudflare.com/workers">Worker</a>. Ingested data is automatically batched, written to output files, and delivered to an <a href="https://developers.cloudflare.com/r2">R2 bucket</a> in your account. You can use Pipelines to build a data lake of clickstream data, or to store events from a Worker.</p> <p>Create your first pipeline with a single command:</p> <div><figure><pre data-language="bash"><code class="language-bash"><div><div><span>$</span><span> </span><span>npx</span><span> </span><span>wrangler@latest</span><span> </span><span>pipelines</span><span> </span><span>create</span><span> </span><span>my-clickstream-pipeline</span><span> </span><span>--r2-bucket</span><span> </span><span>my-bucket</span></div></div><div><div> </div></div><div><div><span>🌀</span><span> </span><span>Authorizing</span><span> </span><span>R2</span><span> </span><span>bucket</span><span> </span><span>"my-bucket"</span></div></div><div><div><span>🌀</span><span> </span><span>Creating</span><span> </span><span>pipeline</span><span> </span><span>named</span><span> </span><span>"my-clickstream-pipeline"</span></div></div><div><div><span>✅</span><span> </span><span>Successfully</span><span> </span><span>created</span><span> </span><span>pipeline</span><span> </span><span>my-clickstream-pipeline</span></div></div><div><div> </div></div><div><div><span>Id:</span><span> </span><span>0e00c5ff09b34d018152af98d06f5a1xvc</span></div></div><div><div><span>Name:</span><span> </span><span>my-clickstream-pipeline</span></div></div><div><div><span>Sources:</span></div></div><div><div><span> </span><span>HTTP:</span></div></div><div><div><span> </span><span>Endpoint:</span><span> </span><span>https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/</span></div></div><div><div><span> </span><span>Authentication:</span><span> </span><span>off</span></div></div><div><div><span> </span><span>Format:</span><span> </span><span>JSON</span></div></div><div><div><span> </span><span>Worker:</span></div></div><div><div><span> </span><span>Format:</span><span> </span><span>JSON</span></div></div><div><div><span>Destination:</span></div></div><div><div><span> </span><span>Type:</span><span> </span><span>R2</span></div></div><div><div><span> </span><span>Bucket:</span><span> </span><span>my-bucket</span></div></div><div><div><span> </span><span>Format:</span><span> </span><span>newline-delimited</span><span> </span><span>JSON</span></div></div><div><div><span> </span><span>Compression:</span><span> </span><span>GZIP</span></div></div><div><div><span>Batch</span><span> </span><span>hints:</span></div></div><div><div><span> </span><span>Max</span><span> </span><span>bytes:</span><span> </span><span>100</span><span> </span><span>MB</span></div></div><div><div><span> </span><span>Max</span><span> </span><span>duration:</span><span> </span><span>300</span><span> </span><span>seconds</span></div></div><div><div><span> </span><span>Max</span><span> </span><span>records:</span><span> </span><span>100,000</span></div></div><div><div> </div></div><div><div><span>🎉</span><span> </span><span>You</span><span> </span><span>can</span><span> </span><span>now</span><span> </span><span>send</span><span> </span><span>data</span><span> </span><span>to</span><span> </span><span>your</span><span> </span><span>pipeline!</span></div></div><div><div> </div></div><div><div><span>Send</span><span> </span><span>data</span><span> </span><span>to</span><span> </span><span>your</span><span> </span><span>pipeline's HTTP endpoint:</span></div></div><div><div><span>curl "https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/" -d '[{</span><span> </span><span>...JSON_DATA...</span><span> </span><span>}]'</span></div></div><div><div> </div></div><div><div><span>To send data to your pipeline from a Worker, add the following configuration to your config file:</span></div></div><div><div><span>{</span></div></div><div><div><span><span> </span></span><span>"pipelines": [</span></div></div><div><div><span><span> </span></span><span>{</span></div></div><div><div><span><span> </span></span><span>"pipeline": "my-clickstream-pipeline",</span></div></div><div><div><span><span> </span></span><span>"binding": "PIPELINE"</span></div></div><div><div><span><span> </span></span><span>}</span></div></div><div><div><span><span> </span></span><span>]</span></div></div><div><div><span>}</span></div></div></code></pre><div></div></figure></div> <p>Head over to our <a href="https://developers.cloudflare.com/pipelines/getting-started">getting started guide</a> for an in-depth tutorial to building with Pipelines.</p>Thu, 10 Apr 2025 00:00:00 GMTPipelinesPipelinesR2Workers