函数名不区分大小写。
| 函数 | 描述 |
|---|---|
COUNT(*) 或 COUNT() |
统计匹配行或所代表的事件。不支持 COUNT(expression)。 |
SUM(expression) |
对数值表达式求和。 |
AVG(expression) |
计算数值表达式的算术平均值。 |
MIN(expression)、MAX(expression) |
在未采样数据集上返回精确极值。 |
APPROX_MIN(expression)、APPROX_MAX(expression) |
返回自适应采样数据集中已保留行观察到的最小或最大值。 |
countIf(condition) |
统计满足条件的行。 |
sumIf(expression, condition) |
对满足条件的行中的值求和。 |
avgIf(expression, condition) |
对满足条件的行中的值求平均。 |
first_value(expression)、last_value(expression) |
返回聚合输入中的第一个或最后一个值。 |
argMax(value, expression)、argMin(value, expression) |
返回具有最大或最小 expression 的行中的 value。 |
topK(expression) |
返回最频繁值的数组。支持 ClickHouse 风格参数,例如 topK(10)(expression)。 |
topKWeighted(expression, weight) |
使用显式权重返回最频繁的值。支持例如 topKWeighted(10)(expression, weight) 的参数。 |
quantileWeighted(level, expression, weight) |
计算加权分位数。level 必须介于 0 和 1 之间。 |
quantileExactWeighted(level)(expression, weight) |
quantileWeighted 的别名形式。 |
topK 在其值表达式之前最多接受三个可选参数。topKWeighted 在其值和权重表达式之前接受相同参数。请求的 top-k 大小和负载因子必须各自介于 1 和 100 之间。
表中从 countIf 到 quantileExactWeighted 的兼容性聚合由 ClickHouse 支持的数据集支持。Log Explorer 支持的数据集支持 COUNT、SUM、AVG、MIN、MAX、APPROX_MIN 和 APPROX_MAX。
对于自适应采样的事件和日志数据集,SQL API 会自动将采样权重应用于 COUNT、SUM、AVG、countIf、sumIf、avgIf 和 topK。对这些函数无需自行使用 sampleInterval。加权平均值会从分子和分母中排除空表达式值。
topKWeighted 和 quantileWeighted 使用查询提供的显式权重参数。当你希望该权重表示数据集的自适应采样时,请传入 sampleInterval。
SELECT countIf(edgeResponseStatus >= 500) AS server_errors
FROM events.httpRequests
WHERE accountTag = '<ACCOUNT_TAG>'
AND timestamp >= NOW() - INTERVAL '1' HOUR自适应采样的事件和日志数据集拒绝精确的 MIN 和 MAX。使用 APPROX_MIN 和 APPROX_MAX 从已保留的采样行计算极值。这些函数无法从采样未保留的事件中重建值。
argMax 和 argMin 在自适应采样数据集上也会被拒绝,Workers Analytics Engine 数据集除外,后者保留其现有兼容性行为。
ClickHouse 支持的未采样数据集支持以下形式:
COUNT(DISTINCT expression)
SUM(DISTINCT expression)
AVG(DISTINCT expression)不支持其他 DISTINCT 聚合和行级 SELECT DISTINCT。自适应采样数据集拒绝 DISTINCT 聚合,因为无法重建被省略的值。Workers Analytics Engine 数据集为兼容性保留 COUNT、SUM 和 AVG DISTINCT。
Log Explorer 支持的数据集支持 COUNT(DISTINCT expression) 和 SUM(DISTINCT expression),但不支持 AVG(DISTINCT expression)。
状态数据集行表示系统状态的观察,而不是唯一事件。不受限制的聚合可能产生误导或无意义的结果,因此每个状态数据集通过内省 暴露 valid_aggregations 列表。该列表可以包含 count、sum、avg、min 或 max。
countIf、sumIf 和 avgIf 需要对应的基础聚合。其他兼容性聚合(包括近似极值)在状态数据集上不受支持。
以下标量函数在 ClickHouse 支持的数据集上受支持。函数名不区分大小写。
| 类别 | 函数 |
|---|---|
| 条件 | if(condition, then, else) |
| 数值 | intDiv、round、ceil、floor、log、pow |
| 字符串 | length、isEmpty、toLower、toUpper、startsWith、endsWith、substring、position、format |
| 转换与表示 | toUInt8、toUInt32、bin、hex |
| 按位 | bitAnd、bitCount、bitHammingDistance、bitNot、bitOr、bitRotateLeft、bitRotateRight、bitShiftLeft、bitShiftRight、bitTest、bitXor |
| 日期部分 | date_part、EXTRACT、toYear、toMonth、toDayOfMonth、toDayOfWeek、toHour、toMinute、toSecond、toYYYYMM |
| 日期和时间转换 | toUnixTimestamp、formatDateTime、toDateTime、toDate、timezone |
| 时间桶 | toStartOfInterval、toStartOfDay、toStartOfMinute、toStartOfFiveMinutes、toStartOfTenMinutes、toStartOfFifteenMinutes、toStartOfHour、toStartOfWeek、toStartOfMonth、toStartOfYear |
| 间隔构造函数 | toIntervalSecond、toIntervalMinute、toIntervalHour、toIntervalDay、toIntervalWeek、toIntervalMonth、toIntervalQuarter、toIntervalYear |
受支持的别名包括 lengthUTF8、empty、lower、lowerUTF8、upper、upperUTF8、substr、strpos、ceiling、ln、dayOfWeek 和 toStartOfFiveMinute。
Log Explorer 支持的数据集仅支持这些函数的子集:if、isEmpty、startsWith、endsWith、pow、length、toLower、toUpper、position、单参数 ceil 和 floor、log、toYear、toMonth、toHour、toMinute、toSecond、toDayOfMonth、toDayOfWeek、toYYYYMM、toDate、toStartOfWeek、toStartOfMonth 和 toStartOfYear。当所选后端不支持某个函数时,API 返回 HTTP 422。
API 在规划查询时会一次性解析当前时间函数。同一查询中的重复使用表示同一时刻。
| 函数 | 描述 |
|---|---|
NOW() |
返回当前 UTC 时间戳。 |
CURRENT_TIMESTAMP() |
等同于 NOW()。 |
TODAY() |
返回当前 UTC 日的开始。 |
CURRENT_DATE() |
等同于 TODAY()。 |
SELECT CURRENT_TIMESTAMP() AS queried_at, COUNT(*) AS requests
FROM events.httpRequests
WHERE accountTag = '<ACCOUNT_TAG>'
AND timestamp >= TODAY()toStartOfInterval(timestamp, interval[, timezone]) 将 DateTime 或 DateTime64(3) 值向下取整到某个间隔的开始:
SELECT
toStartOfInterval(timestamp, INTERVAL '15' MINUTE) AS bucket,
COUNT(*) AS requests
FROM events.httpRequests
WHERE accountTag = '<ACCOUNT_TAG>'
AND timestamp >= NOW() - INTERVAL '1' DAY
GROUP BY bucket间隔必须包含正整数和以下单位之一:YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MILLISECOND、MICROSECOND 或 NANOSECOND。可选时区必须是字符串字面量。Log Explorer 支持的数据集不支持 toStartOfInterval。
向时间戳表达式加上或减去一个间隔:
NOW() - INTERVAL '15' MINUTE
NOW() - INTERVAL '7' DAYSQL API 会拒绝本页未列出的标量和聚合函数。