<?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.cloudflare.com/changelog/</link><item><title>Workers Analytics Engine, Workers - Workers Analytics Engine SQL now supports filtering using HAVING and LIKE</title><link>https://developers.cloudflare.com/changelog/post/2026-01-07-analytics-engine-support-for-like-and-having/</link><guid isPermaLink="true">https://developers.cloudflare.com/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;&gt;Workers Analytics Engine&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;h4&gt;Filtering using &lt;code&gt;HAVING&lt;/code&gt;&lt;/h4&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blob1 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; probe_name,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;avg&lt;/span&gt;&lt;span&gt;(double1) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; average_temp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; temperature_readings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; probe_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HAVING&lt;/span&gt;&lt;span&gt; average_temp &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blob1 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; probe_name,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; num_readings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; temperature_readings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; probe_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HAVING&lt;/span&gt;&lt;span&gt; num_readings &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Pattern matching using &lt;code&gt;LIKE&lt;/code&gt;&lt;/h4&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; logs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; blob1 &lt;/span&gt;&lt;span&gt;LIKE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;error%&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can also match file extensions (case-insensitive):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; blob2 ILIKE &lt;/span&gt;&lt;span&gt;&apos;%.jpg&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Another example is excluding strings containing specific text:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; events&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; blob3 &lt;/span&gt;&lt;span&gt;NOT&lt;/span&gt;&lt;span&gt; ILIKE &lt;/span&gt;&lt;span&gt;&apos;%debug%&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Ready to get started?&lt;/h4&gt;
&lt;p&gt;Learn more about the &lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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.cloudflare.com/changelog/post/2025-11-12-analytics-engine-further-sql-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/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;&gt;Workers Analytics Engine&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;&gt;&lt;strong&gt;New aggregate functions:&lt;/strong&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;&gt;&lt;strong&gt;New date and time functions:&lt;/strong&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;h4&gt;Ready to get started?&lt;/h4&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.cloudflare.com/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.cloudflare.com/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.cloudflare.com/changelog/post/2025-09-26-analytics-engine-sql-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/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;&gt;Workers Analytics Engine&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;&gt;&lt;strong&gt;New aggregate functions:&lt;/strong&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;&gt;&lt;strong&gt;New bit functions:&lt;/strong&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;&gt;&lt;strong&gt;New mathematical functions:&lt;/strong&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;&gt;&lt;strong&gt;New string functions:&lt;/strong&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;&gt;&lt;strong&gt;New encoding functions:&lt;/strong&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;&gt;&lt;strong&gt;New type conversion functions:&lt;/strong&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;h4&gt;Ready to get started?&lt;/h4&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.cloudflare.com/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.cloudflare.com/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>