<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | Basin</title><description>Cloudflare changelogs for Basin</description><link>https://developers.cloudflare.com/changelog/</link><item><title>Basin Pipelines, Basin - Basin Pipelines ingest limit increased to 1 GB/s</title><link>https://developers.cloudflare.com/changelog/post/2026-10-01-stream-ingest-limit-increase/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-10-01-stream-ingest-limit-increase/</guid><description>&lt;p&gt;Each &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/&quot;&gt;Basin Pipelines stream&lt;/a&gt; can now ingest up to 1 GB/s, increased from 5 MB/s.&lt;/p&gt;
&lt;p&gt;The higher per-stream limit gives high-volume application events, telemetry, and logs more room to grow without splitting ingestion across streams solely to stay within the previous limit.&lt;/p&gt;
&lt;p&gt;For the full list of stream, sink, and pipeline limits, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/platform/limits/&quot;&gt;Basin Pipelines limits&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category></item><item><title>Basin, Basin Pipelines, Basin Catalog, Basin SQL - Cloudflare Basin is now generally available</title><link>https://developers.cloudflare.com/changelog/post/2026-10-01-basin-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-10-01-basin-ga/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin/&quot;&gt;Basin&lt;/a&gt;, formerly the Cloudflare Data Platform, is now generally available. Basin brings an end-to-end analytics platform to the Developer Platform, enabling you to collect data from a variety of sources, such as apps, infrastructure, devices, and other Cloudflare services, then query it to answer analytical questions.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;basin-pipelines&quot;&gt;Basin Pipelines&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#basin-pipelines&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Basin Pipelines&lt;/a&gt;, formerly Cloudflare Pipelines, ingests events from Workers, HTTP endpoints, and Cloudflare &lt;a href=&quot;https://developers.cloudflare.com/logpush/&quot;&gt;Logpush&lt;/a&gt;. It transforms events with SQL and ingests them into Iceberg tables or files on R2. With Basin Pipelines you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingest application and device events through HTTP endpoints or Workers bindings.&lt;/li&gt;
&lt;li&gt;Filter and reshape Cloudflare logs before storing them as Iceberg tables, Parquet, or JSON.&lt;/li&gt;
&lt;li&gt;Catch schema mismatches with typed bindings and investigate dropped events in the dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;basin-catalog&quot;&gt;Basin Catalog&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#basin-catalog&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;Basin Catalog&lt;/a&gt;, formerly R2 Data Catalog, manages and automatically maintains &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg tables&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; to keep them fast, cost-efficient, and accessible to any compatible query engine. With Basin Catalog you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect DuckDB, Spark, Snowflake, or PyIceberg to the same tables.&lt;/li&gt;
&lt;li&gt;Maintain growing tables with compaction, snapshot expiration, and manifest optimization.&lt;/li&gt;
&lt;li&gt;Share analytical data across tools and clouds without paying egress fees.&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;basin-sql&quot;&gt;Basin SQL&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#basin-sql&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;Basin SQL&lt;/a&gt;, formerly R2 SQL, is a serverless, distributed SQL engine for querying large Apache Iceberg tables in Basin Catalog without managing or scaling compute. With Basin SQL you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Summarize and rank data with standard and approximate aggregates, grouping sets, and window functions.&lt;/li&gt;
&lt;li&gt;Combine and inspect datasets with joins, subqueries, common table expressions, set operations, schema discovery, and &lt;code&gt;EXPLAIN&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Transform strings, timestamps, JSON, and complex values with more than 190 functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;get-started&quot;&gt;Get started&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#get-started&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;To get started with creating an end-to-end data pipeline, run:&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-npm&quot; id=&quot;pm-tab-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-yarn&quot; id=&quot;pm-tab-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-pnpm&quot; id=&quot;pm-tab-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-npm&quot; aria-labelledby=&quot;pm-tab-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; wrangler basin pipelines setup&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npx wrangler basin pipelines setup&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-yarn&quot; aria-labelledby=&quot;pm-tab-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; wrangler basin pipelines setup&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn wrangler basin pipelines setup&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-b47a5790-55cd-40f5-ad43-0e33f42e24c3-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; wrangler basin pipelines setup&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm wrangler basin pipelines setup&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://developers.cloudflare.com/home/runner/work/cloudflare-docs/cloudflare-docs/src/components/ui/package-managers/PackageManagerTabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;Or get started by referring to the &lt;a href=&quot;https://developers.cloudflare.com/basin/get-started/guide/&quot;&gt;Basin getting started guide&lt;/a&gt;.&lt;/p&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;Note&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;Note&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;Existing Cloudflare Pipelines, R2 Data Catalog, and R2 SQL resources and configurations will continue to work and will be deprecated over time.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><product>Basin</product><category>Basin</category><category>Basin Pipelines</category><category>Basin Catalog</category><category>Basin SQL</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog adds table maintenance visibility and manual queueing</title><link>https://developers.cloudflare.com/changelog/post/2026-09-16-table-maintenance-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-09-16-table-maintenance-dashboard/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; now provides table-level maintenance visibility and manual compaction queueing in the Cloudflare dashboard. These updates make it easier to understand when maintenance is eligible to run, inspect completed operations, and request maintenance without leaving the table view.&lt;/p&gt;
&lt;p&gt;To view table maintenance details:&lt;/p&gt;
&lt;div data-nb-steps class=&quot;steps&quot; data-astro-cid-sfejetki&gt;&lt;ol&gt;
&lt;li&gt;In the Cloudflare dashboard, go to &lt;strong&gt;R2 Data Catalog&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select a catalog, then select the &lt;strong&gt;Explorer&lt;/strong&gt; tab. The &lt;strong&gt;Explorer&lt;/strong&gt; tab opens by default.&lt;/li&gt;
&lt;li&gt;Select a table.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Maintenance&lt;/strong&gt; tab.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://developers.cloudflare.com/home/runner/work/cloudflare-docs/cloudflare-docs/src/components/ui/steps/Steps.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;img src=&quot;https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1850,height=1544,format=webp/_astro/table-maintenance-view.C7KRSK-K.png&quot; alt=&quot;Maintenance tab for an R2 Data Catalog table showing schedules and recent runs&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1850&quot; height=&quot;1544&quot;&gt;
&lt;p&gt;The updated dashboard includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maintenance tab&lt;/strong&gt; — View compaction and snapshot expiration settings, schedules, and next eligibility alongside the table&apos;s &lt;strong&gt;Schema&lt;/strong&gt; and &lt;strong&gt;Metadata&lt;/strong&gt; tabs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recent runs&lt;/strong&gt; — Review a paginated audit log with job status, duration, and expandable details for manifest rewrites, compaction, and snapshot expiration. Expanded rows include operation metrics for each maintenance operation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual queueing&lt;/strong&gt; — Select &lt;strong&gt;Queue maintenance&lt;/strong&gt; to request compaction during normal scheduler polling. The dashboard checks permissions and explains when another maintenance job conflicts with the request or the daily accepted-request limit has been reached.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updated catalog layout&lt;/strong&gt; — Find catalog metrics in the &lt;strong&gt;Metrics&lt;/strong&gt; tab, use the renamed &lt;strong&gt;Explorer&lt;/strong&gt; tab to browse data, and switch between table details using tabs instead of a scroll-to-section sidebar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved schema browser&lt;/strong&gt; — For accounts with the schema browser enabled, select a namespace to open its tables in the right pane while also expanding the namespace tree. The tree can now be collapsed to provide more space for table details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information about compaction and snapshot expiration, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;Table maintenance&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Catalog, Basin, R2 - Billing is now enabled for R2 Data Catalog</title><link>https://developers.cloudflare.com/changelog/post/2026-08-03-r2-data-catalog-billing-enabled/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-08-03-r2-data-catalog-billing-enabled/</guid><description>&lt;p&gt;Billing is now enabled for &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; on non-enterprise accounts. R2 Data Catalog usage beyond the included free tier will appear on your next invoice.&lt;/p&gt;
&lt;p&gt;R2 Data Catalog charges based on two dimensions, in addition to standard &lt;a href=&quot;https://developers.cloudflare.com/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog operations&lt;/strong&gt;: $9.00 / million operations for metadata requests such as creating tables, reading table metadata, and updating table properties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compaction&lt;/strong&gt;: $0.005 / GB processed and $2.00 / million objects processed. These charges only apply when &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;automatic compaction&lt;/a&gt; is turned on for a table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each dimension includes a monthly free tier: 1 million catalog operations, 10 GB of compaction data processed, and 1 million compaction objects processed.&lt;/p&gt;
&lt;p&gt;For example, a single Iceberg table with 50 GB of data, 500,000 catalog operations per month, and compaction turned on that processes 20 GB across 200,000 files would be billed as follows:&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;th&gt;Included&lt;/th&gt;
&lt;th&gt;Billable&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalog operations&lt;/td&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compaction (data processed)&lt;/td&gt;
&lt;td&gt;20 GB&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compaction (objects)&lt;/td&gt;
&lt;td&gt;200,000&lt;/td&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total (Data Catalog)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.05&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Standard R2 storage charges ($0.015 / GB-month) apply separately for the 50 GB of data stored.&lt;/p&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/platform/pricing/&quot;&gt;R2 Data Catalog pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Pipelines, Basin - Billing is now enabled for Pipelines</title><link>https://developers.cloudflare.com/changelog/post/2026-08-03-pipelines-billing-enabled/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-08-03-pipelines-billing-enabled/</guid><description>&lt;p&gt;Billing is now enabled for &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; on non-enterprise accounts. Pipelines usage beyond the included free tier will appear on your next invoice.&lt;/p&gt;
&lt;p&gt;Pipelines charges based on two usage dimensions. Ingress into a Pipeline stream remains free regardless of volume:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL transforms&lt;/strong&gt;: $0.04 / GB for stateless transforms (filter, reshape, unnest, cast, compute).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sinks (egress)&lt;/strong&gt;: $0.03 / GB for JSON output, $0.06 / GB for Parquet or Iceberg output.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Workers Paid plans include 50 GB / month for both SQL transforms and sinks. Standard &lt;a href=&quot;https://developers.cloudflare.com/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt; charges apply for data written to R2 buckets, and &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/platform/pricing/&quot;&gt;R2 Data Catalog&lt;/a&gt; charges apply when writing to Iceberg tables.&lt;/p&gt;
&lt;p&gt;For example, a pipeline that ingests 500 GB of event data per month, uses a SQL transform to filter and reshape it, and writes 300 GB to an R2 Data Catalog Iceberg table would be billed as follows:&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;th&gt;Included&lt;/th&gt;
&lt;th&gt;Billable&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Streams&lt;/td&gt;
&lt;td&gt;500 GB&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;0 GB&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL transforms&lt;/td&gt;
&lt;td&gt;500 GB&lt;/td&gt;
&lt;td&gt;50 GB&lt;/td&gt;
&lt;td&gt;450 GB&lt;/td&gt;
&lt;td&gt;$18.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sinks (Iceberg)&lt;/td&gt;
&lt;td&gt;300 GB&lt;/td&gt;
&lt;td&gt;50 GB&lt;/td&gt;
&lt;td&gt;250 GB&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$33.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/platform/pricing/&quot;&gt;Pipelines pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category></item><item><title>Basin SQL, Basin - Billing is now enabled for R2 SQL</title><link>https://developers.cloudflare.com/changelog/post/2026-08-03-r2-sql-billing-enabled/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-08-03-r2-sql-billing-enabled/</guid><description>&lt;p&gt;Billing is now enabled for &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; on non-enterprise accounts. R2 SQL usage beyond the included free tier will appear on your next invoice.&lt;/p&gt;
&lt;p&gt;R2 SQL charges based on a single dimension:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data scanned&lt;/strong&gt;: $0.0025 / GB ($2.50 / TB) of compressed data read from R2 to execute your query.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All plans include 10 GB of data scanned per month. Each query is billed for a minimum of 10 MB of data scanned. R2 SQL pricing is additive to standard &lt;a href=&quot;https://developers.cloudflare.com/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/platform/pricing/&quot;&gt;R2 Data Catalog&lt;/a&gt; charges. R2 does not charge for egress, so there is no additional data transfer cost.&lt;/p&gt;
&lt;p&gt;For example, a user who stores 500 GB of Parquet data in R2 Data Catalog and runs queries that scan a total of 50 GB of compressed data during the month would be billed as follows:&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;th&gt;Included&lt;/th&gt;
&lt;th&gt;Billable&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R2 storage&lt;/td&gt;
&lt;td&gt;500 GB-month&lt;/td&gt;
&lt;td&gt;10 GB-month&lt;/td&gt;
&lt;td&gt;490 GB-month&lt;/td&gt;
&lt;td&gt;$7.35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R2 SQL (data scanned)&lt;/td&gt;
&lt;td&gt;50 GB&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;40 GB&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$7.45&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/platform/pricing/&quot;&gt;R2 SQL pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog now supports read-only API tokens</title><link>https://developers.cloudflare.com/changelog/post/2026-07-09-r2-data-catalog-read-only-tokens/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-07-09-r2-data-catalog-read-only-tokens/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; now accepts read-only API tokens, so query engines and clients that only read data no longer need a read-write token. Previously, every catalog operation required an &lt;strong&gt;Admin Read &amp;amp; Write&lt;/strong&gt; token, which granted read-only clients more access than they needed.&lt;/p&gt;
&lt;p&gt;You can now authenticate your Iceberg engine based on your workload:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Read-only&lt;/strong&gt; operations (such as listing namespaces, loading tables, and querying data) work with an &lt;strong&gt;Admin Read only&lt;/strong&gt; token (R2 Data Catalog read and R2 storage read).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write&lt;/strong&gt; operations (such as creating or dropping tables and committing transactions) continue to require an &lt;strong&gt;Admin Read &amp;amp; Write&lt;/strong&gt; token.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This lets you follow the principle of least privilege — for example, using a read-write token for the pipeline that writes to your tables and read-only tokens for engines like &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt;, or &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/pyiceberg/&quot;&gt;PyIceberg&lt;/a&gt; that query them.&lt;/p&gt;
&lt;p&gt;Note that credentials vended by the catalog inherit the R2 storage permissions of the token used to authenticate. To ensure read-only access to your underlying data, scope the R2 storage permission to read-only as well.&lt;/p&gt;
&lt;p&gt;For details on choosing and creating the right token, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/manage-catalogs/#authenticate-your-iceberg-engine&quot;&gt;Authenticate your Iceberg engine&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Catalog, Basin - R2 Data Catalog compaction now optimizes manifest files</title><link>https://developers.cloudflare.com/changelog/post/2026-07-13-r2-data-catalog-manifest-optimization/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-07-13-r2-data-catalog-manifest-optimization/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;, a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; catalog built into R2, now automatically optimizes manifest files as part of &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;compaction&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Manifest files track the data files that make up an Iceberg table. As a table accumulates many small or fragmented manifests, query engines must read more metadata during query planning, which slows down queries even before any data is scanned.&lt;/p&gt;
&lt;p&gt;When compaction runs, R2 Data Catalog now rewrites and clusters manifest files by partition as a best-effort pre-step. This consolidates fragmented manifests, reduces the number of manifests a query engine must open, and lowers metadata I/O overhead. Tables that are already well-clustered are skipped, so the operation only runs when it provides a benefit.&lt;/p&gt;
&lt;p&gt;This happens automatically for tables with compaction enabled — no configuration changes are required.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;Table maintenance&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category></item><item><title>Basin SQL, Basin - Query R2 Data Catalog tables with R2 SQL from the dashboard</title><link>https://developers.cloudflare.com/changelog/post/2026-07-08-query-r2-sql-from-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-07-08-query-r2-sql-from-dashboard/</guid><description>
&lt;p&gt;You can now query your &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; tables with &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; directly from the Cloudflare dashboard, without installing a CLI or wiring up a client. This makes it easy to explore your &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; data, validate queries, and inspect results in one place.&lt;/p&gt;
&lt;img src=&quot;https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=3080,height=1696,format=webp/_astro/r2-sql-studio.DCmHJaqy.png&quot; alt=&quot;R2 SQL Query Editor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3080&quot; height=&quot;1696&quot;&gt;
&lt;p&gt;To get started, go to &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/data-catalog/overview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;R2 Data Catalog&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; in the Cloudflare dashboard and select &lt;strong&gt;Query data&lt;/strong&gt; to launch the built-in SQL editor. From there you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Write and run queries interactively&lt;/strong&gt; — Iterate on R2 SQL directly in the browser with syntax highlighting and autocomplete, instead of re-running commands through Wrangler or the REST API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explore your data&lt;/strong&gt; — Explore your namespaces and tables alongside the editor so you can discover what&apos;s queryable without leaving the page or using other tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understand results and performance&lt;/strong&gt; — View result sets with per-query statistics, export them, and get helpful &lt;code&gt;EXPLAIN&lt;/code&gt; outputs to see exactly how a query runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;Note&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;Note&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;Your R2 SQL credential is generated and stored for you and can be rotated in the R2 Data Catalog settings page.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog warns before you delete data manually</title><link>https://developers.cloudflare.com/changelog/post/2026-07-06-r2-data-catalog-delete-warnings/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-07-06-r2-data-catalog-delete-warnings/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; catalog built directly into your R2 bucket. Iceberg tracks your data through a tree of metadata files, so every insert, update, and delete must go through a catalog transaction. Manually adding, modifying, or deleting objects outside the catalog can leave pointers referencing files that no longer exist, corrupting the table into an inconsistent state that is difficult to recover from.&lt;/p&gt;
&lt;p&gt;To help prevent this, the R2 dashboard and Wrangler now warn you when you attempt a manual delete operation on a Data Catalog-enabled bucket.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;dashboard&quot;&gt;Dashboard&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#dashboard&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When you try to delete objects from a bucket that has R2 Data Catalog enabled, the dashboard displays a warning explaining that the operation could leave the catalog in an invalid state, with a link to the documentation for deleting data correctly. You can cancel the operation or choose to proceed anyway.&lt;/p&gt;
&lt;img src=&quot;https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1886,height=684,format=webp/_astro/data-catalog-delete-warning.DoBR0sFO.png&quot; alt=&quot;R2 dashboard warning shown before deleting objects from a Data Catalog-enabled bucket&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1886&quot; height=&quot;684&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;wrangler&quot;&gt;Wrangler&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#wrangler&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Wrangler now checks whether a bucket is Data Catalog-enabled before running a delete and warns you before continuing:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Data Catalog is enabled for this bucket. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Proceeding may leave the data catalog in an invalid state. Continue?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To learn how to safely manage and delete data in your tables, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin SQL, Basin - R2 SQL now supports window functions, DISTINCT, and set operations</title><link>https://developers.cloudflare.com/changelog/post/2026-06-21-window-functions-distinct-set-operations/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-06-21-window-functions-distinct-set-operations/</guid><description>&lt;p&gt;R2 SQL now supports window functions, &lt;code&gt;SELECT DISTINCT&lt;/code&gt;, set operations, and additional aggregates, making it easier to write analytical queries without preprocessing your data elsewhere.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; is Cloudflare&apos;s serverless, distributed SQL engine for querying &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables stored in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;new-capabilities&quot;&gt;New capabilities&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#new-capabilities&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Window functions&lt;/strong&gt; — &lt;code&gt;ROW_NUMBER&lt;/code&gt;, &lt;code&gt;RANK&lt;/code&gt;, &lt;code&gt;DENSE_RANK&lt;/code&gt;, &lt;code&gt;PERCENT_RANK&lt;/code&gt;, &lt;code&gt;CUME_DIST&lt;/code&gt;, &lt;code&gt;NTILE&lt;/code&gt;, &lt;code&gt;LAG&lt;/code&gt;, &lt;code&gt;LEAD&lt;/code&gt;, &lt;code&gt;FIRST_VALUE&lt;/code&gt;, &lt;code&gt;LAST_VALUE&lt;/code&gt;, &lt;code&gt;NTH_VALUE&lt;/code&gt;, and aggregates with an &lt;code&gt;OVER (...)&lt;/code&gt; clause, including &lt;code&gt;PARTITION BY&lt;/code&gt; and explicit frames&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QUALIFY&lt;/strong&gt; — filter rows based on a window function result&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DISTINCT&lt;/strong&gt; — &lt;code&gt;SELECT DISTINCT&lt;/code&gt;, &lt;code&gt;DISTINCT ON (...)&lt;/code&gt;, and the &lt;code&gt;DISTINCT&lt;/code&gt; modifier on aggregates such as &lt;code&gt;COUNT(DISTINCT ...)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set operations&lt;/strong&gt; — &lt;code&gt;UNION&lt;/code&gt;, &lt;code&gt;UNION ALL&lt;/code&gt;, &lt;code&gt;INTERSECT&lt;/code&gt;, and &lt;code&gt;EXCEPT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grouping extensions&lt;/strong&gt; — &lt;code&gt;GROUPING SETS&lt;/code&gt;, &lt;code&gt;ROLLUP&lt;/code&gt;, and &lt;code&gt;CUBE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exact aggregates&lt;/strong&gt; — &lt;code&gt;MEDIAN&lt;/code&gt;, &lt;code&gt;PERCENTILE_CONT&lt;/code&gt;, &lt;code&gt;ARRAY_AGG&lt;/code&gt;, and &lt;code&gt;STRING_AGG&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;examples&quot;&gt;Examples&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#examples&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;rank-rows-with-a-window-function&quot;&gt;Rank rows with a window function&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#rank-rows-with-a-window-function&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id, region,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;       ROW_NUMBER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;OVER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;PARTITION&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; total_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; rank_in_region&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;filter-with-qualify&quot;&gt;Filter with QUALIFY&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#filter-with-qualify&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id, region, total_amount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;QUALIFY &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;ROW_NUMBER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;OVER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;PARTITION&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; total_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;combine-tables-with-a-set-operation&quot;&gt;Combine tables with a set operation&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#combine-tables-with-a-set-operation&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;EXCEPT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;archived_sales&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;The named &lt;code&gt;WINDOW&lt;/code&gt; clause is not supported — inline the &lt;code&gt;OVER (...)&lt;/code&gt; specification at each call site. For the full syntax reference, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For supported features and performance guidance, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/reference/limitations-best-practices/&quot;&gt;Limitations and best practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin SQL, Basin - R2 SQL now supports UNION, INTERSECT, EXCEPT, and SELECT DISTINCT</title><link>https://developers.cloudflare.com/changelog/post/2026-06-05-union-intersect-except-select-distinct/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-06-05-union-intersect-except-select-distinct/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; now supports set operations (&lt;code&gt;UNION&lt;/code&gt;, &lt;code&gt;INTERSECT&lt;/code&gt;, &lt;code&gt;EXCEPT&lt;/code&gt;) and &lt;code&gt;SELECT DISTINCT&lt;/code&gt;, expanding the range of analytical queries you can run directly on &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;set-operations&quot;&gt;Set operations&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#set-operations&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Combine the results of multiple &lt;code&gt;SELECT&lt;/code&gt; statements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UNION&lt;/code&gt;&lt;/strong&gt; — returns all rows from both queries, removing duplicates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UNION ALL&lt;/code&gt;&lt;/strong&gt; — returns all rows from both queries, including duplicates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;INTERSECT&lt;/code&gt;&lt;/strong&gt; — returns only rows that appear in both queries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EXCEPT&lt;/code&gt;&lt;/strong&gt; — returns rows from the first query that do not appear in the second&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find zones that had either firewall blocks OR high-risk requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; action&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;block&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;UNION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; risk_score &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find zones with both firewall blocks AND high traffic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; action&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;block&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;INTERSECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;HAVING&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find enterprise zones that have not been compacted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zones&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; plan &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;enterprise&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;EXCEPT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;compaction_history&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;select-distinct&quot;&gt;Select distinct&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#select-distinct&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Eliminate duplicate rows from query results:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT DISTINCT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region, department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; total_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region, department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For large datasets where approximate results are acceptable, &lt;code&gt;approx_distinct()&lt;/code&gt; remains a faster alternative for counting unique values.&lt;/p&gt;
&lt;p&gt;For the full syntax reference, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For performance guidance, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/reference/limitations-best-practices/&quot;&gt;Limitations and best practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Pipelines, Basin, Workers - Pipeline binding configuration field renamed to stream</title><link>https://developers.cloudflare.com/changelog/post/2026-05-27-pipeline-binding-stream-field/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-27-pipeline-binding-stream-field/</guid><description>
&lt;p&gt;The &lt;code&gt;pipeline&lt;/code&gt; field inside the &lt;code&gt;pipelines&lt;/code&gt; binding configuration in your &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;Wrangler configuration file&lt;/a&gt; has been renamed to &lt;code&gt;stream&lt;/code&gt;. The old field is deprecated but still accepted.&lt;/p&gt;
&lt;p&gt;Update your configuration to use &lt;code&gt;stream&lt;/code&gt; to avoid the deprecation warning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before (deprecated):&lt;/strong&gt;&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;pipelines&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;pipeline&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;pipeline = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://developers.cloudflare.com/home/runner/work/cloudflare-docs/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;pipelines&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;stream&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;stream = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;No other changes are required. The binding name, TypeScript types, and runtime API (&lt;code&gt;env.MY_PIPELINE.send(...)&lt;/code&gt;) remain the same.&lt;/p&gt;
&lt;p&gt;For more information on configuring pipeline bindings, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/writing-to-streams/#configure-pipeline-binding&quot;&gt;Writing to streams&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category><category>Workers</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog pricing announced</title><link>https://developers.cloudflare.com/changelog/post/2026-05-11-r2-data-catalog-pricing-announced/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-11-r2-data-catalog-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; data catalog built directly into R2 buckets, queryable by any Iceberg-compatible engine such as Spark, Snowflake, and DuckDB. R2 Data Catalog now has published pricing for catalog operations and table compaction, in addition to standard &lt;a href=&quot;https://developers.cloudflare.com/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Billing is not yet enabled. We will provide at least 30 days notice before we start charging for R2 Data Catalog usage.&lt;/p&gt;
&lt;p&gt;Pricing is based on two dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog operations&lt;/strong&gt;: $9.00 / million operations for metadata requests such as creating tables, reading table metadata, and updating table properties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compaction&lt;/strong&gt;: $0.005 / GB processed and $2.00 / million objects processed. These charges only apply when automatic compaction is turned on for a table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both dimensions include a monthly free tier: 1 million catalog operations, 10 GB of compaction data processed, and 1 million compaction objects processed.&lt;/p&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/platform/pricing/&quot;&gt;R2 Data Catalog pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog gets a dedicated dashboard experience</title><link>https://developers.cloudflare.com/changelog/post/2026-05-28-r2-data-catalog-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-28-r2-data-catalog-dashboard/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; data catalog built directly into your R2 bucket. It exposes a standard Iceberg REST catalog interface so you can connect query engines like &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/snowflake/&quot;&gt;Snowflake&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; to your data in R2.&lt;/p&gt;
&lt;p&gt;R2 Data Catalog now has a dedicated section in the Cloudflare dashboard, replacing the previous settings panel embedded in R2 bucket configuration. The new experience includes:&lt;/p&gt;
&lt;img src=&quot;https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=3070,height=1486,format=webp/_astro/data-catalog-dashboard.BsKDvUQn.png&quot; alt=&quot;R2 Data Catalog dashboard overview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3070&quot; height=&quot;1486&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog overview&lt;/strong&gt; — View all your catalogs in one place with catalog request counts, bucket sizes, and table maintenance status at a glance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guided setup wizard&lt;/strong&gt; — Create a catalog in three steps: choose or create an R2 bucket, configure table maintenance (compaction and snapshot expiration), and review. The wizard creates the bucket and generates a service credential automatically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Settings management&lt;/strong&gt; — A dedicated settings page for each catalog with sections for general configuration, table maintenance, service credentials, and disabling the catalog. You can now enable and configure &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;snapshot expiration&lt;/a&gt; directly from the dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in metrics&lt;/strong&gt; — Five charts on each catalog&apos;s metrics tab: bytes compacted, files compacted, catalog requests, storage size, and snapshots expired.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, go to &lt;strong&gt;R2 Data Catalog&lt;/strong&gt; in the Cloudflare dashboard or refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/get-started/&quot;&gt;getting started guide&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/manage-catalogs/&quot;&gt;manage catalogs documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Pipelines, Basin - Pipelines pricing announced</title><link>https://developers.cloudflare.com/changelog/post/2026-05-11-pipelines-pricing-announced/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-11-pipelines-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; is a streaming data platform that ingests events, transforms them with SQL, and writes to &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as JSON, Parquet, or &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables. Pipelines now has published pricing based on two usage dimensions: the volume of data processed by SQL transforms and the volume of data delivered to sinks. Ingress into a Pipeline stream is free.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Billing is not yet enabled. We will provide at least 30 days notice before we start charging for Pipelines usage.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pipelines pricing model is designed to charge per GB based on what you use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streams (ingress)&lt;/strong&gt;: Free, regardless of volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL transforms&lt;/strong&gt;: $0.04 / GB for stateless transforms (filter, reshape, unnest, cast, compute).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sinks&lt;/strong&gt;: $0.03 / GB for JSON, $0.06 / GB for Parquet or Iceberg output.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Workers Free plans include 1 GB / month for each dimension. Workers Paid plans include 50 GB / month.&lt;/p&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/platform/pricing/&quot;&gt;Pipelines pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category></item><item><title>Basin SQL, Basin - R2 SQL pricing announced</title><link>https://developers.cloudflare.com/changelog/post/2026-05-11-r2-sql-pricing-announced/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-11-r2-sql-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; is a serverless, distributed query engine that runs SQL against &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables stored in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;. R2 SQL now has published pricing based on a single dimension: the volume of compressed data scanned to execute your queries. At $2.50 / TB ($0.0025 / GB), R2 SQL is priced at half the cost of AWS Athena and less than half of Google BigQuery on-demand.&lt;/p&gt;
&lt;p&gt;Billing is not yet enabled. We will provide at least 30 days notice before we start charging for R2 SQL usage.&lt;/p&gt;
&lt;p&gt;Data scanned is measured on compressed bytes read from R2 object storage. This matches what you see in your R2 bucket — if a Parquet file is 100 MB on disk, scanning that file bills for 100 MB. Each query has a minimum billing increment of 10 MB.&lt;/p&gt;
&lt;p&gt;All plans include 10 GB of data scanned per month. Standard &lt;a href=&quot;https://developers.cloudflare.com/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/platform/pricing/&quot;&gt;R2 Data Catalog&lt;/a&gt; charges apply separately.&lt;/p&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/platform/pricing/&quot;&gt;R2 SQL pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin SQL, Basin - R2 SQL now supports JOINs, subqueries, and multi-table queries</title><link>https://developers.cloudflare.com/changelog/post/2026-05-14-joins-subqueries-multi-table-queries/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-14-joins-subqueries-multi-table-queries/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; is Cloudflare&apos;s serverless, distributed SQL engine for querying &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables stored in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;. R2 SQL runs directly on Cloudflare&apos;s global network with no infrastructure to manage, so you can analyze data in R2 without exporting it to an external warehouse.&lt;/p&gt;
&lt;p&gt;R2 SQL now supports joining multiple Iceberg tables in a single query. You can combine tables with JOINs, filter with subqueries, and define multi-table CTEs to build complex analytical queries.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;new-capabilities&quot;&gt;New capabilities&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#new-capabilities&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JOINs&lt;/strong&gt; — &lt;code&gt;INNER JOIN&lt;/code&gt;, &lt;code&gt;LEFT JOIN&lt;/code&gt;, &lt;code&gt;RIGHT JOIN&lt;/code&gt;, &lt;code&gt;FULL OUTER JOIN&lt;/code&gt;, &lt;code&gt;CROSS JOIN&lt;/code&gt;, and implicit joins (comma-separated &lt;code&gt;FROM&lt;/code&gt; with conditions in &lt;code&gt;WHERE&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subqueries&lt;/strong&gt; — &lt;code&gt;IN&lt;/code&gt; / &lt;code&gt;NOT IN&lt;/code&gt;, &lt;code&gt;EXISTS&lt;/code&gt; / &lt;code&gt;NOT EXISTS&lt;/code&gt;, scalar subqueries in &lt;code&gt;SELECT&lt;/code&gt; / &lt;code&gt;WHERE&lt;/code&gt; / &lt;code&gt;HAVING&lt;/code&gt;, and derived tables (subqueries in &lt;code&gt;FROM&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-table CTEs&lt;/strong&gt; — &lt;code&gt;WITH&lt;/code&gt; clauses can reference different tables and include JOINs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-joins&lt;/strong&gt; — join a table with itself using different aliases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-way joins&lt;/strong&gt; — join three or more tables in a single query&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;examples&quot;&gt;Examples&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#examples&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;two-table-join-with-aggregation&quot;&gt;Two-table JOIN with aggregation&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#two-table-join-with-aggregation&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; request_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zones&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; z&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;INNER JOIN&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; h &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ON&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; h&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;enterprise&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; request_count &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;exists-subquery&quot;&gt;&lt;code&gt;EXISTS&lt;/code&gt; subquery&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#exists-subquery&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zones&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; z&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; EXISTS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; f&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; f&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; AND&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; f&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;block&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;multi-table-cte-with-join&quot;&gt;Multi-table CTE with JOIN&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#multi-table-cte-with-join&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WITH&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; top_zones &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; req_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; req_count &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 50&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;zone_threats &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; threat_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; risk_score &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;req_count&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COALESCE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zt&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;threat_count&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; threat_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; top_zones tz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LEFT JOIN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_threats zt &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ON&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; zt&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;req_count&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For the full syntax reference, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For performance guidance with joins, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/reference/limitations-best-practices/&quot;&gt;Limitations and best practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog now exposes metrics via the GraphQL Analytics API</title><link>https://developers.cloudflare.com/changelog/post/2026-05-12-r2-data-catalog-graphql-analytics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-05-12-r2-data-catalog-graphql-analytics/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed Apache Iceberg data catalog built directly into your R2 bucket that allows you to connect query engines like &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt;, Spark, Snowflake, and DuckDB to your data in R2.&lt;/p&gt;
&lt;p&gt;You can now query analytics for your R2 Data Catalog warehouses via Cloudflare&apos;s &lt;a href=&quot;https://developers.cloudflare.com/analytics/graphql-api/&quot;&gt;GraphQL Analytics API&lt;/a&gt;. Two new datasets are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;r2CatalogDataOperationsAdaptiveGroups&lt;/code&gt;&lt;/strong&gt; tracks Iceberg REST API requests made to your catalog, including operation type, request duration, HTTP status, and request body bytes. Use this to monitor request volume and latency across warehouses, namespaces, and tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;r2CatalogTableMaintenanceAdaptiveGroups&lt;/code&gt;&lt;/strong&gt; tracks table maintenance jobs such as compaction and snapshot expiration. Use this to monitor job success rates, files processed, bytes read and written, and job duration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both datasets support filtering by warehouse name, namespace, table name, and time range. They also include percentile aggregations for duration metrics.&lt;/p&gt;
&lt;p&gt;For detailed schema information and example queries, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/observability/metrics/&quot;&gt;R2 Data Catalog metrics and analytics documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Pipelines, Basin - Pipelines and R2 Data Catalog now supported in Terraform</title><link>https://developers.cloudflare.com/changelog/post/2026-04-27-terraform-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-27-terraform-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; ingests streaming data via &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt; or HTTP endpoints, transforms it with SQL, and writes it to &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as Apache Iceberg tables. &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; manages those Iceberg tables, compaction, and compatibility with query engines like &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can now create and manage both products using Terraform, supported in the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Terraform provider v5.19.0&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This adds four new resources that let you define your entire data pipeline as infrastructure-as-code: a data catalog, a stream for ingestion, a sink that writes to R2 Data Catalog or R2, and a pipeline that connects them with SQL.&lt;/p&gt;
&lt;p&gt;The new Terraform resources are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/r2_data_catalog&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;cloudflare_r2_data_catalog&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; — enable the data catalog on an R2 bucket&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/pipeline_stream&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;cloudflare_pipeline_stream&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; — create a stream that receives events via HTTP or Worker bindings&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/pipeline_sink&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;cloudflare_pipeline_sink&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; — create a sink that writes to R2 Data Catalog or R2&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/pipeline&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;cloudflare_pipeline&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; — create a pipeline with SQL connecting a stream to a sink&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is a minimal example that creates a stream, an R2 Data Catalog sink, and a pipeline:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;hcl&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;hcl&quot; data-nb-lang=&quot;hcl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; &quot;cloudflare_pipeline_stream&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; &quot;my_stream&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  account_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; var&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;cloudflare_account_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  name&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;       =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my_stream&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  format&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;     =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { type &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  schema&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    fields &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;      name     &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;value&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;      type     &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;json&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;      required &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  http&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;           =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { enabled &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, authentication &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, cors &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {} }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  worker_binding&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { enabled &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; &quot;cloudflare_pipeline_sink&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; &quot;my_sink&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  account_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; var&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;cloudflare_account_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  name&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;       =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my_sink&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  type&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;       =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;r2_data_catalog&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  format&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;     =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { type &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;parquet&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  schema&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;     =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { fields &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [] }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  config&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    account_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; var.cloudflare_account_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    bucket     &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my-pipeline-bucket&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    table_name &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my_table&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    token      &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; var.catalog_token&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; &quot;cloudflare_pipeline&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; &quot;my_pipeline&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  account_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; var&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;cloudflare_account_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  name&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;       =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my_pipeline&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  sql&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;        =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;INSERT INTO &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;cloudflare_pipeline_sink&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;my_sink&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; SELECT * FROM &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;cloudflare_pipeline_stream&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;my_stream&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For a full end-to-end example that includes R2 bucket creation, data catalog setup, and scoped API token provisioning, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/reference/terraform/&quot;&gt;Pipelines Terraform documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog snapshot expiration now removes unreferenced data files</title><link>https://developers.cloudflare.com/changelog/post/2026-04-22-snapshot-expiration-cleans-data-files/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-22-snapshot-expiration-cleans-data-files/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;, a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; catalog built into R2, now removes unreferenced data files during automatic snapshot expiration. This improvement reduces storage costs and eliminates the need to run manual maintenance jobs to reclaim space from deleted data.&lt;/p&gt;
&lt;p&gt;Previously, snapshot expiration only cleaned up Iceberg metadata files such as manifests and manifest lists. Data files that were no longer referenced by active snapshots remained in R2 storage until you manually ran &lt;code&gt;remove_orphan_files&lt;/code&gt; or &lt;code&gt;expire_snapshots&lt;/code&gt; through an engine like Spark. This required extra operational overhead and left stale data files consuming storage.&lt;/p&gt;
&lt;p&gt;Snapshot expiration now handles both metadata and data file cleanup automatically. When a snapshot is expired, any data files that are no longer referenced by retained snapshots are removed from R2 storage.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Enable catalog-level snapshot expiration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; snapshot-expiration&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --older-than-days&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 7&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --retain-last&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;table maintenance documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin SQL, Basin - R2 SQL adds JSON functions, EXPLAIN FORMAT JSON, and unpartitioned table support</title><link>https://developers.cloudflare.com/changelog/post/2026-04-20-r2-sql-json-functions-explain-format/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-20-r2-sql-json-functions-explain-format/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; is Cloudflare&apos;s serverless, distributed, analytics query engine for querying &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables stored in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;R2 SQL now supports functions for querying JSON data stored in Apache Iceberg tables, an easier way to parse query plans with &lt;code&gt;EXPLAIN FORMAT JSON&lt;/code&gt;, and querying tables without partition keys stored in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;JSON functions extract and manipulate JSON values directly in SQL without client-side processing:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  json_get_str(doc, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; name&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  json_get_int(doc, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;user&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;profile&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;level&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; level&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  json_get_bool(doc, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;active&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; is_active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; json_contains(doc, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;email&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For a full list of available functions, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/scalar-functions/#json-functions&quot;&gt;JSON functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;EXPLAIN FORMAT JSON&lt;/code&gt; returns query execution plans as structured JSON for programmatic analysis and observability integrations:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sql&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; query&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;WAREHOUSE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;EXPLAIN FORMAT JSON SELECT * FROM logpush.requests LIMIT 10;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;┌──────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; plan&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; {&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   &quot;name&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;CoalescePartitionsExec&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   &quot;output_partitions&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 1,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   &quot;rows&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 10,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   &quot;size_approx&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;310B&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;             │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   &quot;children&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [                      &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;     {&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;name&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;DataSourceExec&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;output_partitions&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 4,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;rows&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 28951,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;size_approx&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;900.0KB&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;table&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;logpush.requests&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;files&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 7,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;bytes&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 900019,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;projection&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [                &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;__ingest_ts&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;CPUTimeMs&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;DispatchNamespace&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;Entrypoint&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;Event&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;EventTimestampMs&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;EventType&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;Exceptions&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;Logs&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;Outcome&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;ScriptName&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;ScriptTags&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;ScriptVersion&quot;,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;             │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         &quot;WallTimeMs&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       ],&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                             │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       &quot;limit&quot;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;     }&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   ]&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; }&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;└──────────────────────────────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/#explain&quot;&gt;EXPLAIN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unpartitioned Iceberg tables can now be queried directly, which is useful for smaller datasets or data without natural time dimensions. For tables with more than 1000 files, partitioning is still recommended for better performance.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/reference/limitations-best-practices/&quot;&gt;Limitations and best practices&lt;/a&gt; for the latest guidance on using R2 SQL.&lt;/p&gt;</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin SQL, Basin - R2 SQL now supports over 190 new functions, expressions, and complex types</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-expanded-sql-functions-expressions-complex-types/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-expanded-sql-functions-expressions-complex-types/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt; now supports an expanded SQL grammar so you can write richer analytical queries without exporting data. This release adds CASE expressions, column aliases, arithmetic in clauses, 163 scalar functions, 33 aggregate functions, EXPLAIN, Common Table Expressions (CTEs),and full struct/array/map access. R2 SQL is Cloudflare&apos;s serverless, distributed, analytics query engine for querying &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables stored in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;. This page documents the supported SQL syntax.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;highlights&quot;&gt;Highlights&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#highlights&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Column aliases&lt;/strong&gt; — &lt;code&gt;SELECT col AS alias&lt;/code&gt; now works in all clauses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CASE expressions&lt;/strong&gt; — conditional logic directly in SQL (searched and simple forms)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalar functions&lt;/strong&gt; — 163 new functions across math, string, datetime, regex, crypto, encoding, and type inspection categories&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aggregate functions&lt;/strong&gt; — statistical (variance, stddev, correlation, regression), bitwise, boolean, and positional aggregates join the existing basic and approximate functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complex types&lt;/strong&gt; — query struct fields with bracket notation, use 46 array functions, and extract map keys/values&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Common table expressions (CTEs)&lt;/strong&gt; — use &lt;code&gt;WITH ... AS&lt;/code&gt; to define named temporary result sets. Chained CTEs are supported. All CTEs must reference the same single table.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full expression support&lt;/strong&gt; — arithmetic, type casting (&lt;code&gt;CAST&lt;/code&gt;, &lt;code&gt;TRY_CAST&lt;/code&gt;, &lt;code&gt;::&lt;/code&gt; shorthand), and &lt;code&gt;EXTRACT&lt;/code&gt; in SELECT, WHERE, GROUP BY, HAVING, and ORDER BY&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;examples&quot;&gt;Examples&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#examples&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;case-expressions-with-statistical-aggregates&quot;&gt;CASE expressions with statistical aggregates&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#case-expressions-with-statistical-aggregates&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; source,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    CASE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;        WHEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; AVG&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(price) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 30&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; THEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;premium&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;        WHEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; AVG&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(price) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; THEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;mid-tier&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;        ELSE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;budget&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    END&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; tier,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    round&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(stddev(price), &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; price_volatility,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    approx_percentile_cont&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(price, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;95&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; p95_price&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; source&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;struct-and-array-access&quot;&gt;Struct and array access&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#struct-and-array-access&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; product_name,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    pricing[&apos;price&apos;] &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; price,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    array_to_string(tags, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; tag_list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;products&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; array_has(tags, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;Action&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; pricing[&apos;price&apos;] &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;chained-ctes-with-time-series-analysis&quot;&gt;Chained CTEs with time-series analysis&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#chained-ctes-with-time-series-analysis&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WITH&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; monthly &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; date_trunc(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;month&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, sale_timestamp) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; month&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;        department,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;        COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; transactions,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;        round&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;AVG&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(total_amount), &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; avg_amount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sale_timestamp &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;BETWEEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;2025-01-01T00:00:00Z&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; AND&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;2025-12-31T23:59:59Z&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; date_trunc(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;month&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, sale_timestamp), department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;ranked &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; month&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, department, transactions, avg_amount,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;        CASE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;            WHEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; avg_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1000&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; THEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;high-value&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;            WHEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; avg_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 500&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; THEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;mid-value&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;            ELSE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;standard&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;        END&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; tier&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; monthly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; transactions &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ranked&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; month&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, avg_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For the full function reference and syntax details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For limitations and best practices, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/reference/limitations-best-practices/&quot;&gt;Limitations and best practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Pipelines, Basin, Workers - Dropped event metrics, typed Pipelines bindings, and improved setup</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-typed-bindings-setup-improvements-error-metrics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-typed-bindings-setup-improvements-error-metrics/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; ingests streaming data via &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt; or HTTP endpoints, transforms it with SQL, and writes it to &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as Apache Iceberg tables. Today we are shipping three improvements to help you understand why streaming events get dropped, catch data quality issues early, and set up Pipelines faster.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;dropped-event-metrics&quot;&gt;Dropped event metrics&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#dropped-event-metrics&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/&quot;&gt;stream&lt;/a&gt; events don&apos;t match the expected schema, Pipelines accepts them during ingestion but drops them when attempting to deliver them to the &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/sinks/&quot;&gt;sink&lt;/a&gt;. To help you identify the root cause of these issues, we are introducing a new dashboard and metrics that surface dropped events with detailed error messages.&lt;/p&gt;
&lt;img src=&quot;https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=3066,height=1466,format=webp/_astro/pipelines-error-log-dash.6JIa7r5d.png&quot; alt=&quot;The Errors tab in the Cloudflare dashboard showing deserialization errors grouped by type with individual error details&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3066&quot; height=&quot;1466&quot;&gt;
&lt;p&gt;Dropped events can also be queried programmatically via the new &lt;code&gt;pipelinesUserErrorsAdaptiveGroups&lt;/code&gt; GraphQL dataset. The dataset breaks down failures by specific error type (&lt;code&gt;missing_field&lt;/code&gt;, &lt;code&gt;type_mismatch&lt;/code&gt;, &lt;code&gt;parse_failure&lt;/code&gt;, or &lt;code&gt;null_value&lt;/code&gt;) so you can trace issues back to the source.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;graphql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;graphql&quot; data-nb-lang=&quot;graphql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; GetPipelineUserErrors&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	$accountTag&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	$pipelineId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	$datetimeStart&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	$datetimeEnd&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	viewer&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		accounts&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: { &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;accountTag&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$accountTag&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;			pipelinesUserErrorsAdaptiveGroups&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;				limit&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;				filter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;					pipelineId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$pipelineId&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;					datetime_geq&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$datetimeStart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;					datetime_leq&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$datetimeEnd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;				orderBy&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;count_DESC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;				count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;				dimensions&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;					errorFamily&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;					errorType&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For the full list of dimensions, error types, and additional query examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/observability/metrics/#user-error-metrics&quot;&gt;User error metrics&lt;/a&gt;.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;typed-pipelines-bindings&quot;&gt;Typed Pipelines bindings&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#typed-pipelines-bindings&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Sending data to a Pipeline from a Worker previously used a generic &lt;code&gt;Pipeline&amp;lt;PipelineRecord&amp;gt;&lt;/code&gt; type, which meant schema mismatches (wrong field names, incorrect types) were only caught at runtime as dropped events.&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;wrangler types&lt;/code&gt; now generates schema-specific TypeScript types for your &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/writing-to-streams/#send-via-workers&quot;&gt;Pipeline bindings&lt;/a&gt;. TypeScript catches missing required fields and incorrect field types at compile time, before your code is deployed.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;declare&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Cloudflare&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	type&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; EcommerceStreamRecord&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		user_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		event_type&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		product_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;?:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		amount&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;?:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; number&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	interface&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		STREAM&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cloudflare:pipelines&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Cloudflare&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;EcommerceStreamRecord&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/writing-to-streams/#typed-pipeline-bindings&quot;&gt;Typed Pipeline bindings&lt;/a&gt;.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;improved-pipelines-setup&quot;&gt;Improved Pipelines setup&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#improved-pipelines-setup&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Setting up a new Pipeline previously required multiple manual steps: creating an R2 bucket, enabling R2 Data Catalog, generating an API token, and configuring format, compression, and rolling policies individually.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;wrangler pipelines setup&lt;/code&gt; command now offers a &lt;strong&gt;Simple&lt;/strong&gt; setup mode that applies recommended defaults and automatically creates the &lt;a href=&quot;https://developers.cloudflare.com/r2/buckets/&quot;&gt;R2 bucket&lt;/a&gt; and enables &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; if they do not already exist. Validation errors during setup prompt you to retry inline rather than restarting the entire process.&lt;/p&gt;
&lt;p&gt;For a full walkthrough, refer to the &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/getting-started/&quot;&gt;Getting started guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category><category>Workers</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog now supports automatic snapshot expiration</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-r2-data-catalog-snapshot-expiration/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-r2-data-catalog-snapshot-expiration/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; now supports automatic snapshot expiration for Apache Iceberg tables.&lt;/p&gt;
&lt;p&gt;In Apache Iceberg, a snapshot is metadata that represents the state of a table at a given point in time. Every mutation creates a new snapshot which enable powerful features like time travel queries and rollback capabilities but will accumulate over time.&lt;/p&gt;
&lt;p&gt;Without regular cleanup, these accumulated snapshots can lead to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Metadata overhead&lt;/li&gt;
&lt;li&gt;Slower table operations&lt;/li&gt;
&lt;li&gt;Increased storage costs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Snapshot expiration in R2 Data Catalog automatically removes old table snapshots based on your configured retention policy, improving performance and storage costs.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Enable catalog-level snapshot expiration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Expire snapshots older than 7 days, always retain at least 10 recent snapshots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; snapshot-expiration&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --older-than-days&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 7&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --retain-last&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Snapshot expiration uses two parameters to determine which snapshots to remove:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--older-than-days&lt;/code&gt;: age threshold in days&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--retain-last&lt;/code&gt;: minimum snapshot count to retain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both conditions must be met before a snapshot is expired, ensuring you always retain recent snapshots even if they exceed the age threshold.&lt;/p&gt;
&lt;p&gt;This feature complements &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;automatic compaction&lt;/a&gt;, which optimizes query performance by combining small data files into larger ones. Together, these automatic maintenance operations keep your Iceberg tables performant and cost-efficient without manual intervention.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;Table maintenance&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/manage-catalogs/&quot;&gt;Manage catalogs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin SQL, Basin - R2 SQL now supports aggregations and schema discovery</title><link>https://developers.cloudflare.com/changelog/post/2025-12-12-aggregation-support-and-more/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-12-aggregation-support-and-more/</guid><description>&lt;p&gt;R2 SQL now supports aggregation functions, &lt;code&gt;GROUP BY&lt;/code&gt;, &lt;code&gt;HAVING&lt;/code&gt;, along with schema discovery commands to make it easy to explore your data catalog.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;aggregation-functions&quot;&gt;Aggregation Functions&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#aggregation-functions&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You can now perform aggregations on Apache Iceberg tables in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; using standard SQL functions including &lt;code&gt;COUNT(*)&lt;/code&gt;, &lt;code&gt;SUM()&lt;/code&gt;, &lt;code&gt;AVG()&lt;/code&gt;, &lt;code&gt;MIN()&lt;/code&gt;, and &lt;code&gt;MAX()&lt;/code&gt;. Combine these with &lt;code&gt;GROUP BY&lt;/code&gt; to analyze data across dimensions, and use &lt;code&gt;HAVING&lt;/code&gt; to filter aggregated results.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Calculate average transaction amounts by department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; department, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;), &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;AVG&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(total_amount)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;North&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;HAVING&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 50&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; AVG&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(total_amount) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find high-value departments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; department, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(total_amount)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;HAVING&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; SUM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(total_amount) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 50000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;schema-discovery&quot;&gt;Schema Discovery&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#schema-discovery&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;New metadata commands make it easy to explore your data catalog and understand table structures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SHOW DATABASES&lt;/code&gt; or &lt;code&gt;SHOW NAMESPACES&lt;/code&gt; - List all available namespaces&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHOW TABLES IN namespace_name&lt;/code&gt; - List tables within a namespace&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESCRIBE namespace_name.table_name&lt;/code&gt; - View table schema and column types&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sql&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; query&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;{ACCOUNT_ID}_{BUCKET_NAME}&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;DESCRIBE default.sales_data;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ⛅️&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 4.54.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;─────────────────────────────────────────────&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;┌──────────────────┬────────────────┬──────────┬─────────────────┬───────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; column_name&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;           │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; required&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; initial_default&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; write_default&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; doc&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                                                                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;          │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; BIGINT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Unique&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; identifier&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; each&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sales&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; transaction&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale_timestamp&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; TIMESTAMPTZ&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Exact&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; date&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; time&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; when&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; occurred&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (used &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; partitioning&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; department&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; TEXT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;           │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Product&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; department&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (8 &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;categories:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Electronics,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Beauty,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Home,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Toys,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Sports,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Food,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Clothing,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Books&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; category&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; TEXT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;           │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Product&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; category&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; grouping&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (4 &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;categories:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Premium,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Standard,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Budget,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Clearance&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; region&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;           │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; TEXT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;           │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Geographic&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sales&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; region&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (5 &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;regions:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; North,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; South,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; East,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; West,&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Central&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; product_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; INT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;            │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Unique&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; identifier&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; product&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sold&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                                            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; quantity&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; INT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;            │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Number&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; of&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; units&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sold&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; transaction&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (range: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;1-50&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                                            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; unit_price&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; DECIMAL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;10,&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Price&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; per&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; unit&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; dollars&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (range: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$5&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.00-&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$500&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.00&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                                                  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; total_amount&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;     │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; DECIMAL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;10,&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Total&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; amount&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; before&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; tax&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (quantity &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; unit_price&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; with&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; discounts&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; applied&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; discount_percent&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; INT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;            │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Discount&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; percentage&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; applied&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (0-50%)                                                  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; tax_amount&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; DECIMAL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;10,&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Tax&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; amount&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; collected&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                                                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; profit_margin&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; DECIMAL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;10,&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Profit&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; margin&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; as&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; decimal&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; percentage&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                                │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; customer_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; INT&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;            │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Unique&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; identifier&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; customer&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; who&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; made&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; purchase&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; is_online_sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; BOOLEAN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Boolean&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flag&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; indicating&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; if&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; was&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; made&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; online&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (true) or in-store (&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;├──────────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale_date&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; DATE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;           │&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;                 │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;               │&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Calendar&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; date&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; of&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (extracted &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sale_timestamp&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)                                         │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;└──────────────────┴────────────────┴──────────┴─────────────────┴───────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Read&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; B&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; across&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; files&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; R2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;On&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; average,&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; B&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; /&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To learn more about the new aggregation capabilities and schema discovery commands, check out the &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. If you&apos;re new to R2 SQL, visit our &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/get-started/&quot;&gt;getting started guide&lt;/a&gt; to begin querying your data.&lt;/p&gt;</description><pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog table-level compaction</title><link>https://developers.cloudflare.com/changelog/post/2025-10-06-data-catalog-table-compaction/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-06-data-catalog-table-compaction/</guid><description>&lt;p&gt;You can now enable compaction for individual &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;, giving you fine-grained control over different workloads.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Enable compaction for a specific table (no token required)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; compaction&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;BUCKE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;NAMESPAC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;TABL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --target-size&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 256&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apply different target file sizes per table&lt;/li&gt;
&lt;li&gt;Disable compaction for specific tables&lt;/li&gt;
&lt;li&gt;Optimize based on table-specific access patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more at &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/manage-catalogs/&quot;&gt;Manage catalogs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Pipelines, Basin - Pipelines now supports SQL transformations and Apache Iceberg</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-pipelines-sql/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-pipelines-sql/</guid><description>
&lt;p&gt;Today, we are launching the new &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt;: a streaming data platform that ingests events, transforms them with &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/sql-reference/select-statements/&quot;&gt;SQL&lt;/a&gt;, and writes to &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables or Parquet files.&lt;/p&gt;
&lt;p&gt;Pipelines can receive events via &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/writing-to-streams/#send-via-http&quot;&gt;HTTP endpoints&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/streams/writing-to-streams/#send-via-workers&quot;&gt;Worker bindings&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;For example, here is a pipeline that ingests clickstream events and filters out bot traffic while extracting domain information:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;INSERT into&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; events_table&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  user_id,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  lower&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; event_type,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  to_timestamp_micros(ts_us) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; event_time,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  regexp_match(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;^https?://([^/]+)&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)[1]  &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; domain,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;  url&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  referrer,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  user_agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; events_json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; event&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;page_view&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;  AND&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; NOT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; regexp_like(user_agent, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;(?i)bot|spider&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Get started by creating a pipeline in the dashboard or running a single command in &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; setup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Check out our &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/getting-started/&quot;&gt;getting started guide&lt;/a&gt; to learn how to create a pipeline that delivers events to an &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;Iceberg table&lt;/a&gt; you can query with R2 SQL. Read more about today&apos;s announcement in our &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-data-platform&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;blog post&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 13:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category></item><item><title>Basin SQL, Basin - Announcing R2 SQL</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-announcing-r2-sql-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-announcing-r2-sql-open-beta/</guid><description>
&lt;p&gt;Today, we are launching the &lt;strong&gt;open beta&lt;/strong&gt; for &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/&quot;&gt;R2 SQL&lt;/a&gt;: A serverless, distributed query engine that can efficiently analyze petabytes of data in &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables managed by &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;R2 SQL is ideal for exploring analytical and time-series data stored in R2, such as logs, events from &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Pipelines&lt;/a&gt;, or clickstream and user behavior data.&lt;/p&gt;
&lt;p&gt;If you already have a table in R2 Data Catalog, running queries is as simple as:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sql&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; query&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; YOUR_WAREHOUSE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    user_id,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    event_type,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;FROM events.user_events&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;WHERE event_type = &apos;CHANGELOG&apos; or event_type = &apos;BLOG&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  AND __ingest_ts &amp;gt; &apos;2025-09-24T00:00:00Z&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;ORDER BY __ingest_ts DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;LIMIT 100&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To get started with R2 SQL, check out our &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/get-started/&quot;&gt;getting started guide&lt;/a&gt; or learn more about supported features in the &lt;a href=&quot;https://developers.cloudflare.com/basin-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For a technical deep dive into how we built R2 SQL, read our &lt;a href=&quot;https://blog.cloudflare.com/r2-sql-deep-dive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;blog post&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 13:00:00 GMT</pubDate><product>Basin SQL</product><category>Basin SQL</category><category>Basin</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog now supports compaction</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-data-catalog-compaction/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-data-catalog-compaction/</guid><description>
&lt;p&gt;You can now enable automatic compaction for &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; tables in &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; to improve query performance.&lt;/p&gt;
&lt;p&gt;Compaction is the process of taking a group of small files and combining them into fewer larger files. This is an important maintenance operation as it helps ensure that query performance remains consistent by reducing the number of files that needs to be scanned.&lt;/p&gt;
&lt;p&gt;To enable automatic compaction in R2 Data Catalog, find it under &lt;strong&gt;R2 Data Catalog&lt;/strong&gt; in your R2 bucket settings in the dashboard.&lt;/p&gt;
&lt;img src=&quot;https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=799,height=400,format=webp/_astro/compaction.MLojYuHL.png&quot; alt=&quot;compaction-dash&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;799&quot; height=&quot;400&quot;&gt;
&lt;p&gt;Or with &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, run:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; compaction&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;BUCKET_NAM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --target-size&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 128&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --token&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;API_TOKE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To get started with compaction, check out &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/manage-catalogs/&quot;&gt;manage catalogs&lt;/a&gt;. For best practices and limitations, refer to &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/table-maintenance/&quot;&gt;about compaction&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Catalog, Basin, R2 - R2 Data Catalog is a managed Apache Iceberg data catalog built directly into R2 buckets</title><link>https://developers.cloudflare.com/changelog/post/2025-04-10-r2-data-catalog-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-10-r2-data-catalog-beta/</guid><description>&lt;p&gt;Today, we are launching &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; in open beta, a managed Apache Iceberg catalog built directly into your &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;Cloudflare R2&lt;/a&gt; bucket.&lt;/p&gt;
&lt;p&gt;If you are not already familiar with it, &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗︎&lt;/span&gt;&lt;/a&gt; is an open table format designed to handle large-scale analytics datasets stored in object storage, offering ACID transactions and schema evolution. R2 Data Catalog exposes a standard Iceberg REST catalog interface, so you can connect engines like &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/snowflake/&quot;&gt;Snowflake&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/config-examples/pyiceberg/&quot;&gt;PyIceberg&lt;/a&gt; to start querying your tables using the tools you already know.&lt;/p&gt;
&lt;p&gt;To enable a data catalog on your R2 bucket, find &lt;strong&gt;R2 Data Catalog&lt;/strong&gt; in your buckets settings in the dashboard, or run:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;And that&apos;s it. You&apos;ll get a catalog URI and warehouse you can plug into your favorite Iceberg engines.&lt;/p&gt;
&lt;p&gt;Visit our &lt;a href=&quot;https://developers.cloudflare.com/basin-catalog/get-started/&quot;&gt;getting started guide&lt;/a&gt; for step-by-step instructions on enabling R2 Data Catalog, creating tables, and running your first queries.&lt;/p&gt;</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><product>Basin Catalog</product><category>Basin Catalog</category><category>Basin</category><category>R2</category></item><item><title>Basin Pipelines, Basin, R2, Workers - Cloudflare Pipelines now available in beta</title><link>https://developers.cloudflare.com/changelog/post/2025-04-10-launching-pipelines/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-10-launching-pipelines/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; is now available in beta, to all users with a &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/pricing/&quot;&gt;Workers Paid&lt;/a&gt; plan.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Worker&lt;/a&gt;. Ingested data is automatically batched, written to output files, and delivered to an &lt;a href=&quot;https://developers.cloudflare.com/r2&quot;&gt;R2 bucket&lt;/a&gt; in your account. You can use Pipelines to build a data lake of clickstream data, or to store events from a Worker.&lt;/p&gt;
&lt;p&gt;Create your first pipeline with a single command:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;Create a pipeline&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;bash&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler@latest&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-clickstream-pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --r2-bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🌀&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Authorizing&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; R2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my-bucket&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🌀&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Creating&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; named&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my-clickstream-pipeline&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;✅&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Successfully&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; created&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-clickstream-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Id:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    0e00c5ff09b34d018152af98d06f5a1xvc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Name:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  my-clickstream-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Sources:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  HTTP:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Endpoint:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Authentication:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  off&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Format:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;          JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Worker:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Format:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Destination:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Type:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         R2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Bucket:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       my-bucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Format:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       newline-delimited&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Compression:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  GZIP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Batch&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; hints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Max&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bytes:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     100&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; MB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Max&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; duration:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  300&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Max&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; records:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   100,000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🎉&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; You&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; can&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; now&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; send&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; your&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Send&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; your&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline&apos;s HTTP endpoint:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;curl &quot;https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/&quot; -d &apos;[{&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ...JSON_DATA...&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; }]&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;To send data to your pipeline from a Worker, add the following configuration to your config file:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  &quot;pipelines&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;pipeline&quot;: &quot;my-clickstream-pipeline&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;binding&quot;: &quot;PIPELINE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Head over to our &lt;a href=&quot;https://developers.cloudflare.com/basin-pipelines/getting-started/&quot;&gt;getting started guide&lt;/a&gt; for an in-depth tutorial to building with Pipelines.&lt;/p&gt;</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><product>Basin Pipelines</product><category>Basin Pipelines</category><category>Basin</category><category>R2</category><category>Workers</category></item></channel></rss>