<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | Workers Analytics Engine</title><description>Cloudflare changelogs for Workers Analytics Engine</description><link>https://developers.stormtrust.net/changelog/</link><item><title>Workers Analytics Engine, Workers - Workers Analytics Engine SQL now supports filtering using HAVING and LIKE</title><link>https://developers.stormtrust.net/changelog/post/2026-01-07-analytics-engine-support-for-like-and-having/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-01-07-analytics-engine-support-for-like-and-having/</guid><description>&lt;p&gt;You can now use the &lt;code&gt;HAVING&lt;/code&gt; clause and &lt;code&gt;LIKE&lt;/code&gt; pattern matching operators in &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Workers Analytics Engine&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Workers Analytics Engine allows you to ingest and store high-cardinality data at scale and query your data through a simple SQL API.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;filtering-using-having&quot;&gt;Filtering using &lt;code&gt;HAVING&lt;/code&gt;&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#filtering-using-having&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;The &lt;code&gt;HAVING&lt;/code&gt; clause complements the &lt;code&gt;WHERE&lt;/code&gt; clause by enabling you to filter groups based on aggregate values. While &lt;code&gt;WHERE&lt;/code&gt; filters rows before aggregation, &lt;code&gt;HAVING&lt;/code&gt; filters groups after aggregation is complete.&lt;/p&gt;
&lt;p&gt;You can use &lt;code&gt;HAVING&lt;/code&gt; to filter groups where the average exceeds a threshold:&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;    blob1 &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; probe_name,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    avg&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(double1) &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; average_temp&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; temperature_readings&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; probe_name&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-140thh&quot;&gt; average_temp &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&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;You can also filter groups based on aggregates such as the number of items in the group:&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;    blob1 &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; probe_name,&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;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; num_readings&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; temperature_readings&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; probe_name&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-140thh&quot;&gt; num_readings &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;/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;pattern-matching-using-like&quot;&gt;Pattern matching using &lt;code&gt;LIKE&lt;/code&gt;&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#pattern-matching-using-like&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;The new pattern matching operators enable you to search for strings that match specific patterns using wildcard characters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LIKE&lt;/code&gt; - case-sensitive pattern matching&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT LIKE&lt;/code&gt; - case-sensitive pattern exclusion&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ILIKE&lt;/code&gt; - case-insensitive pattern matching&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT ILIKE&lt;/code&gt; - case-insensitive pattern exclusion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pattern matching supports two wildcard characters: &lt;code&gt;%&lt;/code&gt; (matches zero or more characters) and &lt;code&gt;_&lt;/code&gt; (matches exactly one character).&lt;/p&gt;
&lt;p&gt;You can match strings starting with a prefix:&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 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-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; logs&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; blob1 &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIKE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;error%&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;You can also match file extensions (case-insensitive):&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 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-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; requests&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; blob2 ILIKE &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;%.jpg&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Another example is excluding strings containing specific text:&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 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-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; 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; blob3 &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; ILIKE &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;%debug%&apos;&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;ready-to-get-started&quot;&gt;Ready to get started?&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#ready-to-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;Learn more about the &lt;a href=&quot;https://developers.stormtrust.net/analytics/analytics-engine/sql-reference/statements/#having-clause&quot;&gt;&lt;code&gt;HAVING&lt;/code&gt; clause&lt;/a&gt; or &lt;a href=&quot;https://developers.stormtrust.net/analytics/analytics-engine/sql-reference/operators/#pattern-matching-operators&quot;&gt;pattern matching operators&lt;/a&gt; in the Workers Analytics Engine SQL reference documentation.&lt;/p&gt;</description><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><product>Workers Analytics Engine</product><category>Workers Analytics Engine</category><category>Workers</category></item><item><title>Workers Analytics Engine, Workers - More SQL aggregate, date and time functions available in Workers Analytics Engine</title><link>https://developers.stormtrust.net/changelog/post/2025-11-12-analytics-engine-further-sql-enhancements/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-11-12-analytics-engine-further-sql-enhancements/</guid><description>&lt;p&gt;You can now perform more powerful queries directly in &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Workers Analytics Engine&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; with a major expansion of our SQL function library.&lt;/p&gt;
&lt;p&gt;Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API.&lt;/p&gt;
&lt;p&gt;Today, we&apos;ve expanded Workers Analytics Engine&apos;s SQL capabilities with several new functions:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New aggregate functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;countIf()&lt;/code&gt; - count the number of rows which satisfy a provided condition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sumIf()&lt;/code&gt; - calculate a sum from rows which satisfy a provided condition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;avgIf()&lt;/code&gt; - calculate an average from rows which satisfy a provided condition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/date-time-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New date and time functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;toYear()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toMonth()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toDayOfMonth()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toDayOfWeek()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toHour()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toMinute()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toSecond()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfYear()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfMonth()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfWeek()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfDay()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfHour()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfFifteenMinutes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfTenMinutes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfFiveMinutes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfMinute()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;today()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toYYYYMM()&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;ready-to-get-started&quot;&gt;Ready to get started?&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#ready-to-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;Whether you&apos;re building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. &lt;a href=&quot;https://developers.stormtrust.net/analytics/analytics-engine/get-started/&quot;&gt;Get started &lt;/a&gt; with Workers Analytics Engine and explore all available functions in our &lt;a href=&quot;https://developers.stormtrust.net/analytics/analytics-engine/sql-reference/&quot;&gt;SQL reference documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><product>Workers Analytics Engine</product><category>Workers Analytics Engine</category><category>Workers</category></item><item><title>Workers Analytics Engine, Workers - Workers Analytics Engine adds supports for new SQL functions</title><link>https://developers.stormtrust.net/changelog/post/2025-09-26-analytics-engine-sql-enhancements/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-09-26-analytics-engine-sql-enhancements/</guid><description>&lt;p&gt;You can now perform more powerful queries directly in &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Workers Analytics Engine&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; with a major expansion of our SQL function library.&lt;/p&gt;
&lt;p&gt;Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API.&lt;/p&gt;
&lt;p&gt;Today, we&apos;ve expanded Workers Analytics Engine&apos;s SQL capabilities with several new functions:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New aggregate functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;argMin()&lt;/code&gt; - Returns the value associated with the minimum in a group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;argMax()&lt;/code&gt; - Returns the value associated with the maximum in a group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;topK()&lt;/code&gt; - Returns an array of the most frequent values in a group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;topKWeighted()&lt;/code&gt; - Returns an array of the most frequent values in a group using weights&lt;/li&gt;
&lt;li&gt;&lt;code&gt;first_value()&lt;/code&gt; - Returns the first value in an ordered set of values within a partition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;last_value()&lt;/code&gt; - Returns the last value in an ordered set of values within a partition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/bit-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New bit functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitAnd()&lt;/code&gt; - Returns the bitwise AND of two expressions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitCount()&lt;/code&gt; - Returns the number of bits set to one in the binary representation of a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitHammingDistance()&lt;/code&gt; - Returns the number of bits that differ between two numbers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitNot()&lt;/code&gt; - Returns a number with all bits flipped&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitOr()&lt;/code&gt; - Returns the inclusive bitwise OR of two expressions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitRotateLeft()&lt;/code&gt; - Rotates all bits in a number left by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitRotateRight()&lt;/code&gt; - Rotates all bits in a number right by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitShiftLeft()&lt;/code&gt; - Shifts all bits in a number left by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitShiftRight()&lt;/code&gt; - Shifts all bits in a number right by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitTest()&lt;/code&gt; - Returns the value of a specific bit in a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitXor()&lt;/code&gt; - Returns the bitwise exclusive-or of two expressions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/mathematical-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New mathematical functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;abs()&lt;/code&gt; - Returns the absolute value of a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log()&lt;/code&gt; - Computes the natural logarithm of a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;round()&lt;/code&gt; - Rounds a number to a specified number of decimal places&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ceil()&lt;/code&gt; - Rounds a number up to the nearest integer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;floor()&lt;/code&gt; - Rounds a number down to the nearest integer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pow()&lt;/code&gt; - Returns a number raised to the power of another number&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/string-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New string functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lowerUTF8()&lt;/code&gt; - Converts a string to lowercase using UTF-8 encoding&lt;/li&gt;
&lt;li&gt;&lt;code&gt;upperUTF8()&lt;/code&gt; - Converts a string to uppercase using UTF-8 encoding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/encoding-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New encoding functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hex()&lt;/code&gt; - Converts a number to its hexadecimal representation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bin()&lt;/code&gt; - Converts a string to its binary representation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/type-conversion-functions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;New type conversion functions:&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;toUInt8()&lt;/code&gt; - Converts any numeric expression, or expression resulting in a string representation of a decimal, into an unsigned 8 bit integer&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;ready-to-get-started&quot;&gt;Ready to get started?&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#ready-to-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;Whether you&apos;re building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. &lt;a href=&quot;https://developers.stormtrust.net/analytics/analytics-engine/get-started/&quot;&gt;Get started &lt;/a&gt; with Workers Analytics Engine and explore all available functions in our &lt;a href=&quot;https://developers.stormtrust.net/analytics/analytics-engine/sql-reference/&quot;&gt;SQL reference documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><product>Workers Analytics Engine</product><category>Workers Analytics Engine</category><category>Workers</category></item></channel></rss>