This page explains the restrictions, resource limits, and permissions for analytics queries.
Only SELECT Allowed#
Only SELECT queries are permitted. All other SQL statement types return an invalid_analytics_query_type error.
Allowed query patterns:
SELECTstatementsWITH(Common Table Expressions)UNIONEXCEPT- Subqueries
- Aggregations
- Window functions
Not allowed: INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, TRUNCATE, GRANT, REVOKE
Table Access Control#
Queries must reference analytics data through the public, versioned table aliases listed in the endpoint schema reference. Physical ClickHouse table names under default.* are unsupported, including when nested in a CTE or subquery. Attempts to use physical names or other tables such as system.* and information_schema.* return an invalid_analytics_table error.
Function Allow List#
Only explicitly approved functions are allowed. Any function not on this list will be rejected with an invalid_analytics_function error.
Allowed Functions#
Aggregates
count, sum, avg, min, max, any, groupArray, groupUniqArray,
uniq, uniqExact, quantile, countIf, sumIf
Date/Time
now, now64, today, toDate, toDateTime, toDateTime64,
toStartOfDay, toStartOfWeek, toStartOfMonth, toStartOfYear,
toStartOfHour, toStartOfMinute, date_trunc, formatDateTime,
fromUnixTimestamp64Milli, toUnixTimestamp64Milli, toIntervalDay,
toIntervalWeek, toIntervalMonth, toIntervalYear, toIntervalHour,
toIntervalMinute, toIntervalSecond, toIntervalMillisecond,
toIntervalMicrosecond, toIntervalNanosecond, toIntervalQuarter
String
lower, upper, substring, concat, length, trim, startsWith,
endsWith
JSON
JSONExtractStringMath
round, floor, ceil, absConditional
if, case, coalesceType Conversion
toString, toInt32, toInt64, toFloat64
Array
has, hasAny, hasAll, arrayJoin, arrayFilter
If you need a function that's not listed, please contact us at support@unkey.com and we'll review it for inclusion.
Resource Limits#
To ensure fair usage and prevent abuse, queries are subject to resource limits:
Execution Limits#
| Resource | Limit | Purpose |
|---|---|---|
| Max execution time | 30 seconds | Prevent long-running queries |
| Max execution time (per window) | 1800 seconds (30 min) | Total execution time per hour |
| Max memory usage | 1 GB | Prevent memory exhaustion |
| Max result rows | 10 million | Limit result set size |
Query Quotas#
| Quota | Limit | Window |
|---|---|---|
| Queries per workspace | 1000 | Per hour |
If you need higher limits for your use case, please contact us at support@unkey.com with details about your specific requirements and expected query volume.
Error Codes#
When limits are exceeded, you'll receive specific error codes:
| Error Code | Description | Solution |
|---|---|---|
query_execution_timeout | Query took longer than 30 seconds | Add more filters, reduce time range, use aggregated tables |
query_memory_limit_exceeded | Query used more than 1GB memory | Reduce result set size, add LIMIT clause, use aggregation |
query_result_rows_exceeded | Query returned more than 10M rows | Add LIMIT clause, use aggregation, reduce time range |
query_quota_exceeded | Exceeded 1000 queries per hour | Wait for quota to reset, optimize query frequency |