Statements
SHOW TABLES
can be used to list the tables on your account. The table name is the name you specified as dataset
when configuring the workers binding (refer to Get started with Workers Analytics Engine, for more information). The table is automatically created when you write event data in your worker.
SHOW TABLES[FORMAT <format>]
Refer to FORMAT clause for the available FORMAT
options.
SHOW TIMEZONES
can be used to list all of the timezones supported by the SQL API. Most common timezones are supported.
SHOW TIMEZONES[FORMAT <format>]
SHOW TIMEZONE
responds with the current default timezone in use by SQL API. This should always be Etc/UTC
.
SHOW TIMEZONE[FORMAT <format>]
SELECT
is used to query tables.
Usage:
SELECT <expression_list>[FROM <table>|(<subquery>)][WHERE <expression>][GROUP BY <expression>, ...][ORDER BY <expression_list>][LIMIT <n>|ALL][FORMAT <format>]
Below you can find the syntax of each clause. Refer to the SQL API documentation for some example queries.
The SELECT
clause specifies the list of columns to be included in the result.
Columns can be aliased using the AS
keyword.
Usage:
SELECT <expression> [AS <alias>], ...
Examples:
-- return the named columnsSELECT blob2, double3
-- return all columnsSELECT *
-- alias columns to more descriptive namesSELECT blob2 AS probe_name, double3 AS temperature
Additionally, expressions using supported functions and operators can be used in place of column names:
SELECT blob2 AS probe_name, double3 AS temp_c, double3*1.8+32 AS temp_f -- compute a value
SELECT blob2 AS probe_name, if(double3 <= 0, 'FREEZING', 'NOT FREEZING') AS description -- use of functions
SELECT blob2 AS probe_name, avg(double3) AS avg_temp -- aggregation function
FROM
is used to specify the source of the data for the query.
Usage:
FROM <table_name>|(subquery)
Examples:
-- query data written to a workers dataset called "temperatures"FROM temperatures
-- use a subquery to manipulate the tableFROM ( SELECT blob1 AS probe_name, count() as num_readings FROM temperatures GROUP BY probe_name)
Note that queries can only operate on a single table. UNION
, JOIN
etc. are not currently supported.
WHERE
is used to filter the rows returned by a query.
Usage:
WHERE <condition>
<condition>
can be any expression that evaluates to a boolean.
Comparison operators can be used to compare values and boolean operators can be used to combine conditions.
Expressions containing functions and operators are supported.
Examples:
-- simple comparisonsWHERE blob1 = 'test'WHERE double1 = 4
-- inequalitiesWHERE double1 > 4
-- use of operators (see below for supported operator list)WHERE double1 + double2 > 4WHERE blob1 = 'test1' OR blob2 = 'test2'
-- expression using inequalities, functions and operatorsWHERE if(unit = 'f', (temp-32)/1.8, temp) <= 0
When using aggregate functions, GROUP BY
specifies the groups over which the aggregation is run.
Usage:
GROUP BY <expression>, ...
For example, if you had a table of temperature readings:
-- return the average temperature for each probeSELECT blob1 AS probe_name, avg(double1) AS average_tempFROM temperature_readingsGROUP BY probe_name
In the usual case the <expression>
can just be a column name but it is also possible to supply a complex expression here. Multiple expressions or column names can be supplied separated by commas.
ORDER BY
can be used to control the order in which rows are returned.
Usage:
ORDER BY <expression> [ASC|DESC], ...
<expression>
can just be a column name.
ASC
or DESC
determines if the ordering is ascending or descending. ASC
is the default, and can be omitted.
Examples:
-- order by double2 then double3, both in ascending orderORDER BY double2, double3
-- order by double2 in ascending order then double3 is descending orderORDER BY double2, double3 DESC
LIMIT
specifies a maximum number of rows to return.
Usage:
LIMIT <n>|ALL
Supply the maximum number of rows to return or ALL
for no restriction.
For example:
LIMIT 10 -- return at most 10 rows
OFFSET
specifies a number of rows to skip in the query result.
Usage:
OFFSET <n>
For example:
OFFSET 10 -- skip the first 10 result rows
FORMAT
controls how to the returned data is encoded.
Usage:
FORMAT [JSON|JSONEachRow|TabSeparated]
If no format clause is included then the default format of JSON
will be used.
Override the default by setting a format. For example:
FORMAT JSONEachRow
The following formats are supported:
Data is returned as a single JSON object with schema data included:
{ "meta": [ { "name": "<column 1 name>", "type": "<column 1 type>" }, { "name": "<column 2 name>", "type": "<column 2 type>" }, ... ], "data": [ { "<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>", ... }, { "<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>", ... }, ... ], "rows": 10}
Data is returned with a separate JSON object per row. Rows are newline separated and there is no header line or schema data:
{"<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>"}{"<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>"}...
Data is returned with newline separated rows. Columns are separated with tabs. There is no header.
column 1 value column 2 valuecolumn 1 value column 2 value...
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Directory
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark
-