跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

函数

最后更新 查看 MarkdownAgent 设置

函数名不区分大小写。

聚合函数

函数 描述
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 数据集除外,后者保留其现有兼容性行为。

DISTINCT 聚合

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' DAY

SQL API 会拒绝本页未列出的标量和聚合函数。

这篇文档对您有帮助吗?