其他函数
以下函数文档是从 system.functions 系统表生成的。
FQDN
首次引入于:v20.1.0
返回 ClickHouse 服务器的完全限定域名 (FQDN,Fully Qualified Domain Name) 。
语法
别名: fullHostName
参数
- 无参数。
返回值
返回 ClickHouse 服务器的完全限定域名。String
示例
使用示例
MACNumToString
引入版本:v1.1.0
将一个 UInt64 数值按大端字节序解释为 MAC 地址。
以字符串形式返回对应的 MAC 地址,格式为 AA:BB:CC:DD:EE:FF (以冒号分隔的十六进制数) 。
语法
参数
num— UInt64 无符号整数值。UInt64
返回值
返回格式为 AA:BB:CC:DD:EE:FF 的 MAC 地址字符串。String
示例
用法示例
MACStringToNum
引入自:v1.1.0
MACNumToString 的反向函数。如果 MAC 地址格式无效,则返回 0。
语法
参数
s— MAC 地址字符串。String
返回值
返回一个 UInt64 数值。UInt64
示例
用法示例
MACStringToOUI
引入版本:v1.1.0
给定一个格式为 AA:BB:CC:DD:EE:FF (以冒号分隔的十六进制数字) 的 MAC 地址,返回其前三个字节,并将其表示为一个 UInt64 整数。如果 MAC 地址格式无效,则返回 0。
语法
参数
s— MAC 地址字符串。String
返回值
前三个字节对应的 UInt64 数值。UInt64
示例
用法示例
authenticatedUser
引入于:v25.11.0
如果会话 USER 已通过 EXECUTE AS 命令被切换,则此函数返回最初用于身份验证并创建会话的原始 USER 名称。
别名:authUser()
语法
别名:authUser
参数
- 无。
返回值
已通过身份验证用户的名称。String
示例
用法示例
bar
引入版本:v1.1.0
用于构建柱状图。 绘制一个带状条,其宽度与 (x - min) 成正比;当 x = max 时,其宽度为 width 个字符。 该带状条的绘制精度可细化到字符宽度的八分之一。
语法
参数
x— 要显示的数值大小。(U)Int*或Float*或Decimalmin— 最小值。(U)Int*或Float*或Decimalmax— 最大值。(U)Int*或Float*或Decimalwidth— 可选。条形的宽度 (按字符数计) 。默认值为80。const (U)Int*或const Float*或const Decimal
返回值
返回一个使用 Unicode 绘制的条形字符串。String
示例
用法示例
blockNumber
引入版本:v1.1.0
返回包含该行的块的单调递增编号。 返回的块编号按尽力而为原则更新,因此可能并非完全精确。
语法
参数
- 无。
返回值
该行所在数据块的序列号。UInt64
示例
基本用法
blockSerializedSize
引入自:v20.3.0
返回磁盘上一个值块未压缩时的大小 (以字节为单位) 。
语法
参数
x1[, x2, ...]— 任意数量的值,用于获取包含这些值的数据块在未压缩时的大小。Any
返回值
返回在不使用压缩的情况下,包含这些值的数据块写入磁盘时占用的字节数。UInt64
示例
用法示例
blockSize
引入版本:v1.1.0
在 ClickHouse 中,查询是按块 (chunk) 进行处理的。 此函数返回调用该函数所在块的大小 (行数) 。
语法
参数
- 无。
返回值
返回当前数据块中的行数。UInt64
示例
使用示例
buildId
引入于:v20.5.0
返回编译器为当前运行的 ClickHouse 服务器二进制文件生成的构建 ID。 如果在分布式表的上下文中执行,该函数会生成一个普通列,其中的值对应各个分片。 否则,它会生成一个常量值。
语法
参数
- 无。
返回值
返回构建 ID。String
示例
用法示例
byteSize
引入版本:v21.1.0
返回对其参数在内存中未压缩字节大小的估计值。
对于 String 参数,函数返回字符串长度 + 8 (用于存储长度的信息) 。
如果函数有多个参数,则函数会累加它们的字节大小。
语法
参数
arg1[, arg2, ...]— 任意数据类型的值,用于估算其未压缩的字节大小。Any
返回值
返回对参数在内存中字节大小的估算值。UInt64
示例
用法示例
多个参数
catboostEvaluate
引入版本:v22.9.0
评估外部 catboost 模型。CatBoost 是由 Yandex 开发的开源梯度提升库,用于机器学习。 此函数接受 catboost 模型的路径以及模型参数 (特征) 。
先决条件
- 构建 catboost 评估库
在对 catboost 模型进行评估之前,必须先提供 libcatboostmodel.<so|dylib> 库。有关如何编译该库,请参阅 CatBoost 文档。
接下来,在 ClickHouse 配置中指定 libcatboostmodel.<so|dylib> 的路径:
出于安全性和隔离性的考虑,模型评估不会在服务器进程中执行,而是在 clickhouse-library-bridge 进程中执行。
在第一次执行 catboostEvaluate() 时,如果库桥接进程尚未运行,服务器会启动该进程。两个进程之间通过 HTTP 接口进行通信。默认使用端口 9012。如果端口
9012 已经被其他服务占用,可以按如下方式指定一个不同的端口。
- 使用 libcatboost 训练 catboost 模型
有关如何基于训练数据集训练 catboost 模型,请参阅 Training and applying models。
语法
参数
path_to_model— CatBoost 模型的路径。const Stringfeature— 一个或多个模型特征/参数。Float*
返回值
返回模型评估结果。Float64
示例
catboostEvaluate
colorOKLABToSRGB
引入版本:v26.2.0
将颜色从 OKLab 知觉色彩空间转换为 sRGB 色彩空间。
输入颜色在 OKLab 色彩空间中指定。如果输入值超出 典型的 OKLab 取值范围,则结果由具体实现决定。
OKLab 使用三个分量:
- L:知觉亮度 (通常在 [0..1] 范围内)
- a:绿-红对立轴
- b:蓝-黄对立轴
a 和 b 分量在理论上不受限制,但在实践中通常介于 -0.4 到 0.4 之间。 OKLab 旨在在保持计算成本较低的同时, 实现知觉上的均匀性。
该转换设计为 colorSRGBToOKLAB 的逆变换,并包括以下阶段:
- 从 OKLab 转换为线性 sRGB。 2) 从线性 sRGB 转换为伽马编码的 sRGB。
可选参数 gamma 指定从线性 sRGB 转换为伽马编码 RGB 值时使用的指数。 如果未指定,则使用默认的 gamma 值,以与 colorSRGBToOKLAB 保持一致。
有关 OKLab 色彩空间及其与 sRGB 关系的更多信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/oklab 。
语法
参数
tuple— 一个包含三个数值L、a、b的元组,其中L的取值范围为[0...1]。Tuple(Float64, Float64, Float64)gamma— 可选参数。用于通过对每个通道x应用(x ^ (1 / gamma)) * 255,将线性 sRGB 转换回 sRGB 的指数。默认值为2.2。Float64
返回值
返回一个表示 sRGB 颜色值的元组 (R, G, B)。Tuple(Float64, Float64, Float64)
示例
将 OKLAB 转换为 sRGB (浮点型)
将 OKLAB 转换为 sRGB (UInt8)
colorOKLCHToSRGB
引入版本:v25.7.0
将 OKLCH 感知色彩空间中的颜色转换为常用的 sRGB 色彩空间中的颜色。
如果 L 超出 [0...1] 范围、C 为负数,或者 H 超出 [0...360] 范围,则结果由具体实现决定。
OKLCH 是 OKLab 色彩空间的圆柱坐标版本。
它的三个坐标分别是 L (亮度,范围 [0...1]) 、C (色度,>= 0) 和 H (色相,单位为度,范围 [0...360]) 。
OKLab/OKLCH 旨在在计算开销较低的同时保持感知上的均匀性。
该转换是 colorSRGBToOKLCH 的逆过程:
- OKLCH 转换为 OKLab。 2) OKLab 转换为线性 sRGB 3) 线性 sRGB 转换为 sRGB
第二个参数 gamma 用于最后一个阶段。
关于 OKLCH 空间中的颜色示例及其与 sRGB 颜色的对应关系,请参阅 https://oklch.com/。
语法
参数
tuple— 由三个数值L、C、H组成的元组,其中L的取值范围为[0...1],C >= 0,H的取值范围为[0...360]。Tuple(Float64, Float64, Float64)gamma— 可选。用于通过对每个通道x应用(x ^ (1 / gamma)) * 255将线性 sRGB 转换回 sRGB 的指数。默认值为2.2。Float64
返回值
返回一个表示 sRGB 颜色值的元组 (R, G, B)。Tuple(Float64, Float64, Float64)
示例
将 OKLCH 转换为 sRGB
将 OKLCH 转换为 sRGB (UInt8)
colorSRGBToOKLAB
引入于:v26.2.0
将以 sRGB 色彩空间编码的颜色转换为感知均匀的 OKLAB 色彩空间。
如果任一输入通道超出 [0...255] 范围,或 gamma 值为非正数,其行为由具体实现决定。
OKLAB 是一种感知均匀的色彩空间。
它的三个坐标分别是 L (亮度,范围为 [0...1]) 、a (Green-Red axis) 和 b (Blue-Yellow axis)。
OKLab 的设计目标是在保持感知均匀的同时,尽量降低计算成本。
转换过程由两个阶段组成:
- sRGB 到 Linear sRGB 2) Linear sRGB 到 OKLab
语法
参数
tuple— 由三个取值范围为[0...255]的 R、G、B 组成的元组。Tuple(UInt8, UInt8, UInt8)gamma— 可选。用于通过对每个通道x应用(x / 255)^gamma来线性化 sRGB 的指数。默认值为2.2。Float64
返回值
返回一个 (L, a, b) 元组,表示 OKLAB 颜色空间的值。Tuple(Float64, Float64, Float64)
示例
将 sRGB 转换为 OKLAB
colorSRGBToOKLCH
自 v25.7.0 引入
将以 sRGB 色彩空间编码的颜色转换为感知均匀的 OKLCH 色彩空间。
如果任一输入通道超出 [0...255] 范围或 gamma 值小于等于 0,则行为由具体实现自行定义。
OKLCH 是 OKLab 色彩空间的圆柱坐标形式。
它的三个坐标分别为 L (亮度,范围 [0...1]) 、C (色度,>= 0) 和 H (色相,角度范围 [0...360]) 。
OKLab/OKLCH 的设计目标是在保持计算开销较低的同时,实现感知上的均匀性。
转换由三个阶段组成:
- sRGB 到线性 sRGB 2) 线性 sRGB 到 OKLab 3) OKLab 到 OKLCH。
有关 OKLCH 空间中的颜色及其与 sRGB 颜色对应关系的参考,请参见 https://OKLCH.com/。
语法
参数
tuple— 由三个值 R、G、B 组成的元组,取值范围为[0...255]。Tuple(UInt8, UInt8, UInt8)gamma— 可选。用于线性化 sRGB 的指数,通过对每个通道值x应用(x / 255)^gamma来实现。默认值为2.2。Float64
返回值
返回一个元组 (L, C, H),表示 OKLCH 颜色空间的值。Tuple(Float64, Float64, Float64)
示例
将 sRGB 转换为 OKLCH
connectionId
引入于:v21.3.0
返回提交当前查询的客户端的连接 ID。
此函数在调试场景中最为有用。
它是为了兼容 MySQL 的 CONNECTION_ID 函数而创建的。
在生产查询中通常不会使用。
语法
参数
- 无。
返回值
返回当前客户端的连接 ID。UInt64
示例
用法示例
countDigits
引入于:v20.8.0
返回表示一个值所需的十进制位数。
该函数会考虑十进制值的 scale,也就是说,它是在底层整数类型 (value * scale) 上计算结果。
例如:
countDigits(42) = 2countDigits(42.000) = 5countDigits(0.04200) = 4
可以使用 countDigits(x) > 18 来检查 Decimal64 是否发生溢出,
尽管它比 isDecimalOverflow 要慢。
语法
参数
返回值
返回表示 x 所需的位数。UInt8
示例
用法示例
currentDatabase
引入自:v1.1.0 版本
返回当前数据库的名称。
在 CREATE TABLE 查询中需要在表引擎参数里指定数据库时非常有用。
另请参阅 SET 语句。
语法
别名: current_database, SCHEMA, DATABASE
参数
- 无。
返回值
返回当前数据库的名称。String
示例
使用示例
无需括号的 SQL 标准语法
currentProfiles
引入版本:v21.9.0
返回当前用户的设置配置文件数组。
语法
参数
- 无。
返回值
返回一个包含当前用户所有设置配置文件名称的数组。Array(String)
示例
用法示例
currentQueryID
引入版本:v25.2.0
返回当前查询 ID。
语法
别名: current_query_id
参数
- 无
返回值
示例
示例
currentRoles
自 v21.9.0 版本引入
返回一个数组,包含授予当前用户的所有角色。
语法
参数
- 无。
返回值
返回一个数组,其中包含授予当前用户的角色。Array(String)
示例
使用示例
currentSchemas
引入于:v23.7.0
与函数 currentDatabase 相同,但:
- 接受一个会被忽略的布尔类型参数
- 以仅包含一个值的数组形式返回数据库名称。
函数 currentSchemas 仅为与 PostgreSQL 兼容而存在。
请使用 currentDatabase 替代。
另请参阅 SET 语句。
语法
别名:current_schemas
参数
bool— 一个布尔值,将被忽略。Bool
返回值
返回一个仅包含当前数据库名称的单元素数组。Array(String)
示例
用法示例
currentUser
引入于:v20.1.0
返回当前用户的名称。 在分布式查询中,返回发起该查询的用户的名称。
语法
别名: current_user, user
参数
- 无。
返回值
返回当前用户的名称;否则返回发起该查询的用户的登录名。String
示例
使用示例
无需括号的 SQL 标准语法
defaultProfiles
引入版本:v21.9.0
返回当前用户的默认设置配置文件名称数组。
语法
参数
- 无。
返回值
返回当前用户默认设置配置文件名称的数组。Array(String)
示例
用法示例
defaultRoles
自 v21.9.0 引入
返回当前用户的默认角色数组。
语法
参数
- 无。
返回值
返回当前用户的默认角色组成的数组。Array(String)
示例
使用示例
defaultValueOfArgumentType
自 v1.1.0 起提供
返回给定数据类型的默认值。 不包括用户为自定义列设置的默认值。
语法
参数
expression— 任意类型的值,或其计算结果为任意类型值的表达式。Any
返回值
对数值返回 0,对字符串返回空字符串,对 Nullable 类型返回 NULL。UInt8 或 String 或 NULL
示例
用法示例
Nullable 示例
defaultValueOfTypeName
首次引入于:v1.1.0
返回指定类型名称的默认值。
语法
参数
type— 表示类型名的字符串。String
返回值
返回给定类型名的默认值:数值类型为 0,字符串类型为空字符串,对于 Nullable 的 UInt8 或 String 或 NULL 则返回 NULL。
示例
用法示例
Nullable 示例
displayName
自 v22.11.0 引入
返回 config 中的 display_name 值;如果未设置,则返回服务器的完全限定域名 (FQDN) 。
语法
参数
- 无。
返回值
返回配置中的 display_name 值;如果未设置,则返回服务器的 FQDN (完全限定域名) 。String
示例
用法示例
dumpColumnStructure
引入版本:v1.1.0
输出某个列的数据类型及其内部结构的详细描述。
语法
参数
x— 要获取其结构描述的值。Any
返回值
返回用于表示该值的列结构的描述。String
示例
用法示例
enabledProfiles
引入版本:v21.9.0
返回一个数组,其中包含当前用户已启用的设置配置文件的名称。
语法
参数
- 无。
返回值
返回一个数组,包含当前 USER 已启用的设置配置文件名称。Array(String)
示例
用法示例
enabledRoles
自 v21.9.0 起引入
返回一个数组,列出当前用户已启用的角色。
语法
参数
- 无。
返回值
返回一个包含为当前用户启用的角色名称的数组。Array(String)
示例
使用示例
errorCodeToName
引入于:v20.12.0
返回数值型 ClickHouse 错误码对应的文本名称。 数值错误码与错误名称之间的映射可在此处查看。
语法
参数
返回值
返回 error_code 的文本形式名称。String
示例
用法示例
file
引入于:v21.3.0
以字符串形式读取文件,并将数据加载到指定的列中。 文件内容不会被解析。
另请参阅 file 表函数。
语法
参数
path— 相对于user_files_path的文件路径。支持通配符*、**、?、{abc,def}和{N..M},其中N、M为数字,'abc'、'def'为字符串。Stringdefault— 当文件不存在或无法访问时返回的值。String或NULL
返回值
以字符串形式返回文件内容。String
示例
将文件插入到表中
filesystemAvailable
引入版本:v20.1.0
返回承载数据库持久化数据的文件系统中的可用空间。
返回值始终小于文件系统的总可用空间 (filesystemUnreserved) ,因为一部分空间会被预留给操作系统。
语法
参数
disk_name— 可选。要查询其可用空间的磁盘名。未指定时使用默认磁盘。String或FixedString
返回值
返回剩余可用空间的字节数。UInt64
示例
使用示例
filesystemCapacity
自 v20.1.0 引入
返回文件系统的容量 (字节数) 。 需要在配置中设置指向数据目录的 path。
语法
参数
disk_name— 可选。要获取容量的磁盘名称。如果省略,则使用默认磁盘。String或FixedString
返回值
返回文件系统的容量 (字节) 。UInt64
示例
用法示例
filesystemUnreserved
自 v22.12.0 引入
返回用于数据库持久化的文件系统上的空闲空间总量 (此前为 filesystemFree) 。
另请参见 filesystemAvailable。
语法
参数
disk_name— 可选。要查询其总可用空间的磁盘名称。如果省略,则使用默认磁盘。String或FixedString
返回值
返回可用空间的字节数。UInt64
示例
使用示例
finalizeAggregation
引入自:v1.1.0
在给定聚合状态的情况下,该函数返回聚合结果 (或在使用 -State 组合器时返回最终状态) 。
语法
参数
state— 聚合状态。AggregateFunction
返回值
返回聚合操作的最终结果。Any
示例
使用示例
与 initializeAggregation 配合使用
flipCoordinates
引入于:v25.10.0
对几何对象的 x 和 y 坐标进行翻转。该操作会交换纬度和经度,这对于在不同坐标系之间转换或纠正坐标顺序非常有用。
对于 Point,它会交换 x 和 y 坐标。对于复杂几何对象 (LineString、Polygon、MultiPolygon、Ring、MultiLineString) ,它会递归地对每一对坐标应用此变换。
该函数同时支持各个几何类型 (Point、Ring、Polygon、MultiPolygon、LineString、MultiLineString) 以及 Geometry 变体类型。
语法
参数
geometry— 要变换的几何对象。支持的类型:Point (Tuple(Float64, Float64))、Ring (Array(Point))、Polygon (Array(Ring))、MultiPolygon (Array(Polygon))、LineString (Array(Point))、MultiLineString (Array(LineString)) 或 Geometry (包含上述任一类型的 variant 类型) 。
返回值
坐标被翻转后的几何对象。返回类型与输入类型相同。Point 或 Ring 或 Polygon 或 MultiPolygon 或 LineString 或 MultiLineString 或 Geometry
示例
basic_point
ring
多边形
geometry_wkt
geometry_polygon_wkt
formatQuery
引入于:v23.10.0
返回给定 SQL 查询的格式化版本,可能为多行格式。解析出错时将抛出异常。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询。String
返回值
格式化后的查询 String
示例
多行
formatQueryOrNull
引入于:v23.11.0
返回给定 SQL 查询的格式化结果,可能为多行。若解析出错,则返回 NULL。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询语句。String
返回值
格式化后的查询 String
示例
多行
formatQuerySingleLine
引入版本:v23.10.0
类似于 formatQuery(),但返回的格式化字符串不包含换行符。解析出错时抛出异常。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询。String
返回值
格式化后的查询 String
示例
multiline
formatQuerySingleLineOrNull
引入于:v23.11.0
与 formatQuery() 类似,但返回的格式化字符串不包含换行符。若解析出错,则返回 NULL。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询。String
返回值
格式化后的 SQL 查询 String
示例
多行
formatReadableDecimalSize
自 v22.11.0 起引入。
给定一个大小 (字节数) 后,此函数返回一个带有后缀 (KB、MB 等)、经过四舍五入的可读大小字符串。
与此函数相反的操作为 parseReadableSize。
语法
参数
x— 以字节为单位的大小。UInt64
返回值
返回一个带后缀的、已四舍五入的人类可读大小字符串。String
示例
格式化文件大小
formatReadableQuantity
引入版本:v20.10.0
给定一个数字,此函数返回一个四舍五入后的、带有后缀 (thousand、million、billion 等) 的数值字符串。
此函数接受任意数值类型作为输入,但在内部会将其转换为 Float64 类型。
对于较大的数值,结果可能并不理想。
语法
参数
x— 要格式化的数字。UInt64
返回值
以字符串形式返回带有后缀的四舍五入数字。String
示例
使用后缀格式化数字
formatReadableSize
引入于:v1.1.0
给定一个大小 (字节数) ,此函数返回一个可读的、四舍五入后的大小,并带有后缀 (KiB、MiB 等) ,以字符串形式表示。
与此函数相反的操作为 parseReadableSize、parseReadableSizeOrZero 和 parseReadableSizeOrNull。
此函数接受任意数值类型作为输入,但在内部会将它们转换为 Float64。对于非常大的值,结果可能不是最优的。
语法
别名: FORMAT_BYTES
参数
x— 以字节为单位的大小。UInt64
返回值
返回一个四舍五入后并带有后缀的易读大小字符串。String
示例
格式化文件大小
formatReadableTimeDelta
引入版本:v20.12.0
给定以秒为单位的时间间隔 (delta) ,此函数返回以字符串形式表示的时间差,包含年/月/日/时/分/秒/毫秒/微秒/纳秒。
该函数接受任意数值类型作为输入,但在内部会将输入转换为 Float64。对于较大的数值,结果可能不够理想。
语法
参数
column— 包含数值类型时间差的列。Float64maximum_unit— 可选。显示的最大单位。可接受的值:nanoseconds、microseconds、milliseconds、seconds、minutes、hours、days、months、years。默认值:years。const Stringminimum_unit— 可选。显示的最小单位。所有更小的单位都会被截断。可接受的值:nanoseconds、microseconds、milliseconds、seconds、minutes、hours、days、months、years。如果显式指定的值大于maximum_unit,将抛出异常。默认值:当maximum_unit为seconds或更大单位时为seconds,否则为nanoseconds。const String
返回值
以字符串形式返回时间差。String
示例
用法示例
指定最大单位
fuzzQuery
引入于:v26.2.0
解析给定的查询字符串,并对其应用随机的 AST 变异 (fuzzing) 。返回变异后的查询字符串。该函数是非确定性的:每次调用都可能产生不同结果。需要设置 allow_fuzz_query_functions = 1。
语法
参数
query— 要进行模糊测试的 SQL 查询。String
返回值
模糊后的查询字符串 String
示例
基本示例
generateRandomStructure
引入版本:v23.5.0
生成格式为 column1_name column1_type, column2_name column2_type, ... 的随机表结构。
语法
参数
number_of_columns— 结果表结构中期望的列数量。如果设置为 0 或Null,列数将在 1 到 128 之间随机生成。默认值:Null。UInt64seed— 用于生成稳定结果的随机种子。如果未指定 seed 或将其设置为Null,则会随机生成。UInt64
返回值
随机生成的表结构。String
示例
用法示例
具有指定列数
使用指定种子
generateSerialID
引入版本:v25.1.0
生成并返回从上一个计数器值开始的连续数字。
此函数接受一个字符串参数 (序列标识符) 以及一个可选的起始值。
服务器需要配置 Keeper。
各序列存储在 Keeper 节点下的路径中,该路径可在服务器配置中的 series_keeper_path 进行配置。
语法
参数
series_identifier— 序列标识符const Stringstart_value— 可选。计数器的起始值,默认为 0。注意:该值仅在创建新序列时生效;如果序列已存在,则会被忽略UInt*
返回值
返回从前一个计数器值递增产生的连续编号。UInt64
示例
第一次调用
第二次调用
按列调用
带 start 参数
带 start 值的第二次调用
getClientHTTPHeader
引入版本:v24.5.0
获取指定 HTTP 头的值。
如果该头不存在,或者当前请求不是通过 HTTP 接口执行的,函数会返回空字符串。
某些 HTTP 头 (例如 Authentication 和 X-ClickHouse-*) 是受限的。
allow_get_client_http_header 设置使用该函数必须启用设置 allow_get_client_http_header。
出于安全原因,该设置默认未启用,因为某些头 (例如 Cookie) 可能包含敏感信息。
对于此函数,HTTP 头名是区分大小写的。 如果在分布式查询的上下文中使用该函数,它只会在发起查询的节点上返回非空结果。
语法
参数
name— HTTP 头名称。String
返回值
返回该 HTTP 头的值。String
示例
用法示例
getMacro
引入于:v20.1.0
从服务器配置文件中返回某个宏的值。
宏在配置文件的 <macros> 部分中定义,可用于通过易于识别的名称区分服务器,即使它们具有复杂的主机名。
如果在分布式表的上下文中执行该函数,它会生成一个普通列,其值分别对应于各个分片。
语法
参数
name— 要获取的宏名称。const String
返回值
返回指定宏的值。String
示例
基本用法
getMaxTableNameLengthForDatabase
引入版本:v25.1.0
返回指定数据库中表名的最大长度限制。
语法
参数
database_name— 指定数据库的名称。String
返回值
返回最大表名的长度,类型为 Integer。
示例
典型用法
getMergeTreeSetting
引入版本:v25.6.0
返回指定 MergeTree 设置的当前值。
语法
参数
setting_name— 设置名称。String
返回值
返回该 MergeTree 设置的当前值。
示例
用法示例
getOSKernelVersion
自 v21.11.0 起引入
返回一个表示操作系统内核版本的字符串。
语法
参数
- 无。
返回值
返回当前操作系统内核版本。String
示例
用法示例
getServerPort
自 v21.10.0 引入
返回给定协议对应的服务器的端口号。
语法
参数
port_name— 端口名称。String
返回值
返回服务器端口号。UInt16
示例
使用示例
getServerSetting
引入版本:v25.6.0
返回指定服务器设置名称对应的当前值。
语法
参数
setting_name— 服务器设置项名称。String
返回值
返回服务器设置的当前值。Any
示例
用法示例
getSetting
引入版本:v20.7.0
返回指定设置项的当前值。
语法
参数
setting_Name— 设置名称。const String
返回值
返回该设置的当前值。Any
示例
用法示例
getSettingOrDefault
自 v24.10.0 引入
返回指定设置的当前值;如果在当前配置概要中未设置该项,则返回第二个参数中指定的默认值。
语法
参数
setting_name— 设置名称。Stringdefault_value— 当未设置custom_setting时返回的值。该值可以是任意数据类型或 Null。
返回值
返回指定设置的当前值;如果该设置未配置,则返回 default_value。
示例
用法示例
getSizeOfEnumType
引入版本:v1.1.0
返回给定 Enum 中枚举成员的数量。
语法
参数
x— 类型为Enum的值。Enum
返回值
返回具有 Enum 类型输入值的字段数量。UInt8/16
示例
用法示例
getSubcolumn
自 v23.3.0 版本引入。
接收一个表达式或标识符,以及一个包含子列名称的常量字符串作为参数。
返回从该表达式中提取的指定子列。
语法
参数
- 无。
返回值
示例
getSubcolumn
getTypeSerializationStreams
引入版本:v22.6.0
枚举某个数据类型的流路径。 该 FUNCTION 主要用于开发用途。
语法
参数
col— 将从中检测数据类型的列,或某数据类型的字符串表示形式。Any
返回值
返回包含所有序列化子流路径的数组。Array(String)
示例
tuple
map
globalVariable
引入版本:v20.5.0
接受一个常量字符串参数,并返回具有该名称的全局变量的值。此函数仅用于与 MySQL 的兼容性,对于 ClickHouse 的正常运行既非必需,也无实际用途。仅定义了少量用于占位的全局变量。
语法
参数
name— 全局变量名称。String
返回值
返回变量 name 的值。Any
示例
globalVariable
hasColumnInTable
引入版本:v1.1.0
检查数据库表中是否存在指定的列。
对于嵌套数据结构中的元素,该函数会检查对应列是否存在。
对于嵌套数据结构本身,该函数返回 0。
语法
参数
database— 数据库名称。const Stringtable— 表名。const Stringcolumn— 列名。const Stringhostname— 可选。要在其上执行检查的远程服务器名。const Stringusername— 可选。远程服务器的用户名。const Stringpassword— 可选。远程服务器的密码。const String
返回值
如果指定的列存在,则返回 1,否则返回 0。UInt8
示例
检查一个已存在的列
检查不存在的列
hasThreadFuzzer
引入于:v20.6.0
返回是否启用了线程 fuzzer。 此 FUNCTION 仅在测试和调试时有用。
语法
参数
- 无。
返回值
返回 Thread Fuzzer 是否已启用,类型为 UInt8
示例
检查 Thread Fuzzer 状态
hostName
引入版本:v20.5.0
返回执行此函数的主机名。 如果函数在远程服务器上执行 (分布式处理) ,则返回远程服务器的名称。 如果函数在分布式表的上下文中执行,它会生成一个普通列,列中包含与各个分片对应的值。 否则,它会生成一个常量值。
语法
别名: hostname
参数
- 无。
返回值
返回主机名。String
示例
使用示例
icebergBucket
自 v25.5.0 版本引入
实现了 Iceberg bucket transform 的逻辑。
语法
参数
N— 桶的数量 (模数) 。const (U)Int*value— 要转换的源值。(U)Int*或Bool或Decimal或Float*或String或FixedString或UUID或Date或Time或DateTime
返回值
返回源值的 32 位哈希值。Int32
示例
示例
icebergTruncate
在 v25.3.0 中引入
实现 Iceberg truncate 变换的逻辑:https://iceberg.apache.org/spec/#truncate-transform-details。
语法
参数
返回值
与参数类型相同
示例
示例
identity
引入自:v1.1.0
此函数返回传入的参数,在调试和测试时非常有用。它可以让你绕过索引的使用,从而观察全表扫描时的性能。在查找可用索引时,查询分析器会忽略 identity 函数内部的所有内容,并且还会禁用常量折叠。
语法
参数
x— 输入值。Any
返回值
返回保持不变的输入值。Any
示例
使用示例
ignore
在 v1.1.0 版本中引入
接受任意参数并无条件返回 0。
语法
参数
x— 不会被实际使用,仅用于避免语法错误的输入值。Any
返回值
始终返回 0。UInt8
示例
用法示例
indexHint
引入版本:v1.1.0
此函数用于调试和内部分析 (introspection) 。 它会忽略其参数并始终返回 1。 参数不会被求值。
在索引分析期间,假定此函数的参数未被 indexHint 包裹。
这使你可以根据相应条件在索引范围内选择数据,但不会再基于该条件进行进一步过滤。
ClickHouse 中的索引是稀疏的,使用 indexHint 返回的数据会比直接指定相同条件更多。
Explanation
当你运行:
ClickHouse 会做两件事:
- 使用索引查找哪些 granule (约 8192 行的块) 可能包含
key = 123 - 读取这些 granule,并逐行过滤,只返回满足
key = 123的行
因此即使它从磁盘读取了 8,192 行,也只会返回实际匹配的那 1 行。
使用 indexHint 时,当你运行:
ClickHouse 只会做一件事:
- 使用索引查找哪些 granule 可能包含
key = 123,并从这些 granule 中返回所有行,不进行过滤。
它会返回全部 8,192 行,包括 key = 456、key = 789 等行。 (即所有恰好存储在同一 granule 中的内容。)
indexHint() 并非用于性能优化,而是用于调试并理解 ClickHouse 索引的工作方式:
- 我的条件选择了哪些 granule?
- 这些 granule 中有多少行?
- 我的索引是否被有效使用?
注意:无法使用 indexHint 函数来优化查询。indexHint 函数不会优化查询,因为它不会为查询分析提供任何额外信息。将某个表达式放到 indexHint 函数内部,并不比不使用 indexHint 函数更好。indexHint 函数只能用于内部分析和调试目的,并不会提升性能。如果你看到除了 ClickHouse 贡献者之外的其他人在使用 indexHint,这很可能是一个错误,你应该将其移除。
语法
参数
expression— 用于索引范围选择的任意表达式。Expression
返回值
在所有情况下都返回 1。UInt8
示例
结合日期过滤的使用示例
initialQueryID
引入于:v1.1.0
返回初始当前查询的 ID。
查询的其他参数可以从 system.query_log 表中的 initial_query_id 字段中提取。
与 queryID 函数相比,initialQueryID 在不同分片上返回相同的结果。
语法
别名: initial_query_id
参数
- 无。
返回值
返回当前初始查询的 ID。String
示例
用法示例
initialQueryStartTime
引入版本:v25.4.0
返回与当前查询对应的初始查询的开始时间。
initialQueryStartTime 在不同分片上返回相同的结果。
语法
别名: initial_query_start_time
参数
- 无。
返回值
返回当前初始查询的开始时间,类型为 DateTime
示例
用法示例
initializeAggregation
引入于:v20.6.0
基于单个值计算聚合函数的结果。
此函数可用于通过组合器 -State 初始化聚合函数。
可以创建聚合函数的状态并将其插入到 AggregateFunction 类型的列中,或者将初始化后的聚合状态用作默认值。
语法
参数
返回值
针对传递给该函数的每一行返回聚合结果。返回类型与 initializeAggregation 所接收的第一个参数 (该函数) 的返回类型相同。Any
示例
使用 uniqState 的基本示例
与 sumState 和 finalizeAggregation 搭配使用
isConstant
引入自:v20.3.0
返回参数是否为常量表达式。 常量表达式是指其结果在查询分析阶段 (即执行之前) 就已知的表达式。 例如,基于字面量的表达式就是常量表达式。 此函数主要用于开发、调试和演示。
语法
参数
x— 要检查的表达式。Any
返回值
如果 x 是常量,返回 1;如果 x 不是常量,返回 0。UInt8
示例
常量表达式
带函数的常量
非常量表达式
now() 函数的行为
isDecimalOverflow
引入于:v20.8.0
检查一个十进制数的位数是否过多,因而无法在给定精度的 Decimal 数据类型中被正确表示。
语法
参数
返回值
如果该 Decimal 值的数字位数超过其精度允许的范围,则返回 1;如果该 Decimal 值满足指定精度,则返回 0。UInt8
示例
使用示例
joinGet
引入版本:v18.16.0
允许像从字典中提取数据那样从表中提取数据。 使用指定的 JOIN 键从 Join 表中获取数据。
仅支持使用 ENGINE = Join(ANY, LEFT, <join_keys>) 语句 创建的表。
语法
参数
join_storage_table_name— 指示在何处执行搜索的标识符。该标识符会在默认数据库中进行查找 (参见配置文件中的default_database参数) 。要更改默认数据库,请使用USE database_name查询,或通过点号同时指定数据库和表,例如database_name.table_name。Stringvalue_column— 表中包含所需数据的列名。const Stringjoin_keys— 连接键的列表。Any
返回值
返回与键列表相对应的值列表。Any
示例
使用示例
在当前数据库中的表的用法
将数组用作 JOIN 键
joinGetOrNull
引入版本:v20.4.0
允许像从字典中一样从表中提取数据。
使用指定的 JOIN 键从 JOIN 表中获取数据。
与 joinGet 不同,当键不存在时返回 NULL。
仅支持使用 ENGINE = Join(ANY, LEFT, <join_keys>) 语句创建的表。
语法
参数
join_storage_table_name— 指示在何处执行查找的标识符。该标识符会在默认数据库中进行查找 (参见配置文件中的参数 default_database) 。若要更改默认数据库,请使用USE database_name查询,或通过点号同时指定数据库和表,例如database_name.table_name。Stringvalue_column— 表中包含所需数据的列名。const Stringjoin_keys— 关联键列表。Any
返回值
返回与键列表相对应的值列表,如果某个键未找到,则返回 NULL。Any
示例
用法示例
lowCardinalityIndices
引入版本:v18.12.0
返回 LowCardinality 列的字典中某个值的位置。位置从 1 开始计数。由于 LowCardinality 列在每个分区片段上都有独立字典,此函数在不同分区片段中对相同值可能返回不同的位置。
语法
参数
col— 低基数列。LowCardinality
返回值
该值在当前数据部分的字典中的位置。UInt64
示例
使用示例
lowCardinalityKeys
引入于:v18.12.0
返回 LowCardinality 列的字典值。 如果数据块大小小于或大于字典大小,结果将分别被截断或用默认值填充扩展。 由于 LowCardinality 为每个分区片段维护独立字典,此函数在不同分区片段中可能返回不同的字典值。
语法
参数
col— 一个低基数列。LowCardinality
返回值
返回字典的键。UInt64
示例
lowCardinalityKeys
materialize
引入于:v1.1.0
将一个常量转换为包含单个值的普通列。 在内存中,普通列和常量的表示方式不同。 函数通常会针对普通参数和常量参数执行不同的代码,尽管结果通常应该相同。 此函数可用于调试这种行为。
语法
参数
x— 常量。Any
返回值
返回一个包含该常量值的整列。Any
示例
用法示例
minSampleSizeContinuous
引入于:v23.10.0
计算在 A/B 测试中比较两个样本的某个连续型指标均值时所需的最小样本量。
使用这篇文章中给出的公式。 假设实验组和对照组的样本量相等。 返回的是单个组所需的样本量 (即整个实验所需的总样本量是返回值的两倍) 。 同时假设实验组和对照组中该测试指标的方差相等。
语法
别名: minSampleSizeContinous
参数
baseline— 指标的基线值。(U)Int*或Float*sigma— 指标的基线标准差。(U)Int*或Float*mde— 相对于基线值的最小可检测效应量 (MDE) ,以百分比表示 (例如,对于基线值 112.25,当 MDE 为 0.03 时,表示预期变化为 112.25 ± 112.25*0.03) 。(U)Int*或Float*power— 检验所需的检验功效 (1 - Ⅱ类错误的概率) 。(U)Int*或Float*alpha— 检验所需的显著性水平 (Ⅰ类错误的概率) 。(U)Int*或Float*
返回值
返回包含 3 个元素的命名 Tuple:minimum_sample_size、detect_range_lower 和 detect_range_upper。它们分别表示:所需的样本量;在该样本量下无法检测到的取值范围下界,计算为 baseline * (1 - mde);以及在该样本量下无法检测到的取值范围上界,计算为 baseline * (1 + mde) (Float64) 。Tuple(Float64, Float64, Float64)
示例
minSampleSizeContinuous
minSampleSizeConversion
引入版本:v22.6.0
计算在 A/B 测试中比较两组转化率 (比例) 时所需的最小样本量。
使用这篇文章中描述的公式。假设实验组和对照组的样本量相等。返回的是单个实验组所需的样本量 (即整个实验所需的总样本量为返回值的两倍) 。
语法
参数
baseline— 基线转化率。Float*mde— 最小可检测效应 (MDE) ,以百分点表示 (例如,对于基线转化率 0.25,MDE 为 0.03 表示预期变化为 0.25 ± 0.03) 。Float*power— 所需检验统计功效 (1 - II 类错误概率) 。Float*alpha— 所需检验显著性水平 (I 类错误概率) 。Float*
返回值
返回一个包含 3 个元素的具名 Tuple:minimum_sample_size、detect_range_lower、detect_range_upper。它们分别表示:所需的样本量;在该样本量下无法检测到的取值区间下界,计算为 baseline - mde;在该样本量下无法检测到的取值区间上界,计算为 baseline + mde。Tuple(Float64, Float64, Float64)
示例
minSampleSizeConversion
neighbor
引入版本:v20.1.0
返回同一列中相对于当前行指定偏移量处的值。 该函数已被弃用且容易出错,因为它基于数据块的物理顺序进行操作,而这可能与用户期望的逻辑顺序不一致。 建议改用合适的窗口函数。
可以通过设置 allow_deprecated_error_prone_window_functions = 1 来启用该函数。
语法
参数
column— 源列。Anyoffset— 相对于当前行的偏移量。正值向前查找,负值向后查找。Integerdefault_value— 可选。偏移超出数据范围时要返回的值。如果未指定,则使用该列类型的默认值。Any
返回值
从指定偏移位置返回一个值,若越界则返回默认值。Any
示例
用法示例
使用默认值
normalizeQuery
引入版本:v20.8.0
将字面量、字面量序列以及复杂别名 (包含空格、超过两位数字,或长度至少为 36 字节 (如 UUID) ) 替换为占位符 ?。
语法
参数
x— 字符序列。String
返回值
返回带有占位符的给定字符序列。String
示例
使用示例
normalizeQueryKeepNames
引入版本:v21.2.0
将字面量和字面量序列替换为占位符 ?,但不会替换复杂别名 (包括包含空白字符、数字位数多于两位,或长度至少为 36 字节 (例如 UUID) 的别名) 。
这有助于更好地分析复杂的查询日志。
语法
参数
x— 字符序列。String
返回值
返回包含占位符的指定字符序列。String
示例
用法示例
normalizedQueryHash
引入于:v20.8.0
对于类似的查询,在不考虑字面量具体取值的情况下,返回相同的 64 位哈希值。 可用于分析查询日志。
语法
参数
x— 字符序列。String
返回值
返回一个 64 位的哈希值。UInt64
示例
使用示例
normalizedQueryHashKeepNames
引入于:v21.2.0
与 normalizedQueryHash 类似,它在对相似查询进行哈希时,会返回相同的 64 位哈希值,并且忽略字面量的值,但在哈希之前不会将复杂别名 (包含空格、超过两位数字,或长度至少为 36 字节 (例如 UUID) ) 替换为占位符。
在分析查询日志时可能会很有用。
语法
参数
x— 字符序列。String
返回值
返回 64 位哈希值。UInt64
示例
用法示例
parseReadableSize
引入于:v24.6.0
给定一个字符串,该字符串包含字节大小以及单位 (如 B、KiB、KB、MiB、MB 等,既可以是 ISO/IEC 80000-13 中规定的二进制前缀,也可以是十进制字节单位) ,该函数返回对应的字节数。
如果函数无法解析输入值,则会抛出异常。
该函数的反向函数是 formatReadableSize 和 formatReadableDecimalSize。
语法
参数
x— 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小。String
返回值
返回以字节为单位的字节数,向上取整到最接近的整数。UInt64
示例
用法示例
parseReadableSizeOrNull
引入版本:v24.6.0
给定一个包含字节大小以及 B、KiB、KB、MiB、MB 等作为单位的字符串 (即 ISO/IEC 80000-13 或十进制字节单位) ,该函数返回对应的字节数。
如果函数无法解析输入值,则返回 NULL。
该函数的逆操作是 formatReadableSize 和 formatReadableDecimalSize。
语法
参数
x— 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小。String
返回值
返回按字节计的数值,向上取整到最接近的整数;如果无法解析输入,则返回 NULL。Nullable(UInt64)
示例
用法示例
parseReadableSizeOrZero
引入版本:v24.6.0
给定一个字符串,其中包含以 B、KiB、KB、MiB、MB 等作为单位表示的字节大小 (即 ISO/IEC 80000-13 或十进制字节单位) ,此函数返回对应的字节数。
如果函数无法解析输入值,则返回 0。
此函数的逆操作为 formatReadableSize 和 formatReadableDecimalSize。
语法
parseReadableSizeOrZero(x)
参数
x — 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小值。String
返回值
返回字节数,向上取整为最接近的整数;如果无法解析输入,则返回 0。UInt64
示例
使用示例
SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrZero(readable_sizes) AS sizes;
┌─readable_sizes─┬───sizes─┐ │ 1 B │ 1 │ │ 1 KiB │ 1024 │ │ 3 MB │ 3000000 │ │ 5.314 KiB │ 5442 │ │ invalid │ 0 │ └────────────────┴─────────┘
参数
x— 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小值。String
返回值
返回字节数,向上取整为最接近的整数;如果无法解析输入,则返回 0。UInt64
示例
使用示例
parseTimeDelta
引入版本:v22.7.0
解析由一串数字后接类似时间单位的部分组成的字符串。
时间间隔字符串使用如下时间单位标记:
years,year,yr,ymonths,month,moweeks,week,wdays,day,dhours,hour,hr,hminutes,minute,min,mseconds,second,sec,smilliseconds,millisecond,millisec,msmicroseconds,microsecond,microsec,μs,µs,usnanoseconds,nanosecond,nanosec,ns
多个时间单位可以通过分隔符组合 (空格、;、-、+、,、:) 。
这里的年和月长度为近似值:year 为 365 天,month 为 30.5 天。
语法
参数
timestr— 一串数字,后跟类似时间单位的标记。String
返回值
以秒为单位的数值。Float64
示例
用法示例
复杂时间单位
partitionId
引入于:v21.4.0
计算分区 ID。
此函数较慢,不应对大量行调用。
语法
别名: partitionID
参数
column1, column2, ...— 需要返回其分区 ID 的列。
返回值
返回该行所属的分区 ID。String
示例
使用示例
queryID
引入于:v21.9.0
返回当前查询的 ID。
查询的其他参数可以从 system.query_log 表中的 query_id 字段中提取。
与 initialQueryID 函数不同,queryID 在不同分片上可能会返回不同的结果。
语法
别名: query_id
参数
- 无。
返回值
返回当前查询的 ID。String
示例
用法示例
revision
引入自:v22.7.0
返回当前 ClickHouse 服务器的修订版本号。
语法
参数
- 无。
返回值
返回当前 ClickHouse 服务器的版本号。UInt32
示例
用法示例
rowNumberInAllBlocks
自 v1.1.0 版本引入
为每个被处理的行返回一个唯一的行号。
语法
参数
- 无。
返回值
返回数据块中行的序号,从 0 开始计数。UInt64
示例
用法示例
rowNumberInBlock
引入版本:v1.1.0
对于由 rowNumberInBlock 处理的每个块,返回当前行的行号。
在每个块中,返回值从 0 开始计数。
语法
参数
- 无。
返回值
返回数据块中行的序号,从 0 开始。UInt64
示例
用法示例
runningAccumulate
自 v1.1.0 引入
对数据块中每一行累积聚合函数的状态。
对于每个新的数据块,状态都会被重置。
由于这种易出错的行为,此函数已弃用,建议改用窗口函数。
您可以通过设置 allow_deprecated_error_prone_window_functions 来允许继续使用该函数。
语法
参数
agg_state— 聚合函数的状态。AggregateFunctiongrouping— 可选。分组键。当grouping的值发生变化时,函数的状态会被重置。可以是任意支持相等运算符的数据类型。Any
返回值
为每行返回累计结果。Any
示例
initializeAggregation 的用法示例
runningConcurrency
引入于:v21.3.0
计算并发事件的数量。 每个事件都有开始时间和结束时间。 开始时间包含在事件的持续区间内,而结束时间不包含在事件内。 具有开始时间和结束时间的列必须是相同的数据类型。 该函数针对每个事件的开始时间计算活动 (并发) 事件的总数。
事件必须按开始时间升序排序。 如果不满足此要求,函数会抛出异常。 每个数据块都会被单独处理。 如果来自不同数据块的事件在时间上有重叠,则可能无法被正确处理。
建议改为使用 window functions。
语法
参数
start— 包含事件开始时间的列。Date或DateTime或DateTime64end— 包含事件结束时间的列。Date或DateTime或DateTime64
返回值
返回在每个事件开始时的并发事件数量。UInt32
示例
用法示例
runningDifference
引入版本:v1.1.0
计算数据块中两个相邻行的值之间的差值。
对于第一行返回 0,对于后续各行返回其与前一行之间的差值。
只会返回当前正在处理的数据块内部的差值。 由于这种容易出错的行为,该函数已被弃用。 建议改用 window functions。
你可以通过设置 allow_deprecated_error_prone_window_functions 来允许使用该函数。
函数的结果取决于相关数据块以及块内数据的顺序。
在计算 runningDifference() 时,行的顺序可能与返回给用户时的行顺序不同。
为避免这种情况,你可以先创建一个带有 ORDER BY 的子查询,并在子查询外部调用该函数。
请注意,块大小会影响结果。
runningDifference 的内部状态在每个新块上都会被重置。
语法
参数
x— 要计算逐行差分的列。Any
返回值
返回相邻行值之间的差值,首行的结果为 0。
示例
使用示例
块大小影响的示例
runningDifferenceStartingWithFirstValue
引入版本:v1.1.0
计算数据块中相邻行值之间的差值,但与 runningDifference 不同的是,它返回第一行的实际值,而不是 0。
仅在当前正在处理的数据块内返回差值。 由于这种易出错的行为,该函数已被弃用。 建议改用窗口函数。
你可以通过设置项 allow_deprecated_error_prone_window_functions 来允许使用该函数。
语法
参数
x— 要计算运行差值的列。Any
返回值
返回相邻值之间的差值,第一行返回自身的值。Any
示例
使用示例
serverUUID
自 v20.1.0 引入
返回服务器首次启动时生成的随机且唯一的 UUID (v4) 。 该 UUID 会被持久化,即在第二次、第三次及后续服务器启动时都会返回同一个 UUID。
语法
参数
- 无。
返回值
返回该服务器的随机 UUID。UUID
示例
使用示例
shardCount
自 v21.9.0 起引入
返回分布式查询的分片总数。
如果查询不是分布式查询,则返回常量值 0。
语法
参数
- 无。
返回值
返回分片总数,或 0。UInt32
示例
用法示例
shardNum
引入自:v21.9.0
返回在分布式查询中处理部分数据的分片的索引值。
索引从 1 开始。
如果查询不是分布式的,则返回常量值 0。
语法
参数
- 无。
返回值
返回分片索引或常量 0,类型为 UInt32。
示例
使用示例
showCertificate
引入于:v22.6.0
在已配置的情况下,会显示当前服务器的安全套接字层 (SSL) 证书的信息。 关于如何配置 ClickHouse 使用 OpenSSL 证书来验证连接的详细信息,请参阅 Configuring TLS。
语法
参数
- 无。
返回值
返回一个包含已配置 SSL 证书相关键值对的映射。Map(String, String)
示例
用法示例
sleep
自 v1.1.0 引入
按指定的秒数暂停查询的执行。 该函数主要用于测试和调试。
在生产环境中通常不应使用 sleep() 函数,因为它会对查询性能和系统响应能力产生负面影响。
不过,在以下场景中它可能会很有用:
- 测试:在测试或基准测试 ClickHouse 时,可能希望模拟延迟或引入暂停,以观察系统在特定条件下的行为。
- 调试:如果需要在某个特定时间点检查系统状态或查询执行情况,可以使用
sleep()引入暂停,从而检查或收集相关信息。 - 模拟:在某些情况下,可能希望模拟实际场景中出现延迟或暂停的情况,例如网络延迟或对外部系统的依赖。
务必谨慎且仅在必要时使用 sleep() 函数,因为它可能会影响 ClickHouse 系统的整体性能和响应能力。
出于安全原因,该函数只能在默认用户配置文件中执行 (且已启用 allow_sleep) 。
语法
参数
seconds— 暂停查询执行的秒数,最大为 3 秒。可以是浮点数值以指定小数秒。const UInt*或const Float*
返回值
返回 0。UInt8
示例
用法示例
sleepEachRow
引入版本:v1.1.0
使查询在结果集的每一行上暂停执行指定的秒数。
sleepEachRow() 函数主要用于测试和调试,与 sleep() 函数类似。
它允许在处理每一行时模拟延迟或引入暂停,这在以下场景中可能很有用:
- 测试:在特定条件下测试或基准测试 ClickHouse 的性能时,可以使用
sleepEachRow()为每一行的处理模拟延迟或引入暂停。 - 调试:如果需要检查系统状态或每一行的查询执行情况,可以使用
sleepEachRow()引入暂停,以便检查或收集相关信息。 - 仿真:在某些情况下,可能希望模拟现实场景,即在处理每一行时都会产生延迟或暂停,例如与外部系统交互或存在网络延迟时。
与 sleep() 函数一样,应谨慎且仅在必要时使用 sleepEachRow(),因为它可能会显著影响 ClickHouse 系统的整体性能和响应能力,特别是在处理大型结果集时。
语法
参数
seconds— 对结果集中的每一行暂停查询执行的秒数,最大为 3 秒。可以是浮点数,以指定小数秒。const UInt*或const Float*
返回值
对结果集中的每一行返回 0。UInt8
示例
用法示例
structureToCapnProtoSchema
引入版本:v23.8.0
用于将 ClickHouse 表结构转换为 CapnProto 格式 schema 的函数
语法
参数
- 无。
返回值
示例
random
structureToProtobufSchema
引入版本:v23.8.0
将 ClickHouse 表结构转换为 Protobuf 格式的 schema。
该函数接受一个 ClickHouse 表结构定义,并将其转换为使用 proto3 语法的 Protocol Buffers (Protobuf) schema 定义。这对于生成与 ClickHouse 表结构相匹配、用于数据交换的 Protobuf schema 非常有用。
语法
参数
structure— 以字符串形式表示的 ClickHouse 表结构定义 (例如,'column1 Type1, column2 Type2') 。Stringmessage_name— 在生成的 schema 中用于 Protobuf 消息类型的名称。String
返回值
返回与输入的 ClickHouse 结构相对应、采用 proto3 语法的 Protobuf schema 定义。String
示例
将 ClickHouse 结构转换为 Protobuf schema
tcpPort
引入于:v20.12.0
返回服务器监听的 native interface TCP 端口号。 如果在分布式表的上下文中执行,该函数会生成一个普通列,其中的值对应各个分片。 否则,它会生成一个常量值。
语法
参数
- 无。
返回值
返回 TCP 端口号。UInt16
示例
用法示例
throwIf
引入自:v1.1.0 版本
如果参数 x 为 true,则抛出异常。
要使用 error_code 参数,必须启用配置参数 allow_custom_error_code_in_throw。
语法
参数
x— 要检查的条件。Anymessage— 可选。自定义错误信息。const Stringerror_code— 可选。自定义错误码。const Int8/16/32
返回值
当条件为假时返回 0,当条件为真时抛出异常。UInt8
示例
用法示例
toColumnTypeName
引入自:v1.1.0
返回给定值对应数据类型的内部名称。
与函数 toTypeName 不同,返回的数据类型可能还包含内部包装列,例如 Const 和 LowCardinality。
语法
参数
value— 要确定其内部数据类型的值。Any
返回值
返回用于表示该值的内部数据类型名称。String
示例
使用示例
toTypeName
自 v1.1.0 起提供
返回传入参数的类型名称。
如果传入 NULL,函数返回类型 Nullable(Nothing),这对应于 ClickHouse 的内部 NULL 表示。
语法
参数
x— 任意类型的值。Any
返回值
返回输入值的数据类型名称。String
示例
用法示例
transactionID
引入版本:v22.6.0
返回事务 ID。
语法
参数
- 无。
返回值
返回一个由 start_csn、local_tid 和 host_id 组成的元组。
start_csn:全局顺序号,即在该事务开始时观测到的最新提交时间戳。local_tid:在特定start_csn下,由本地主机为其启动的每个事务生成的唯一本地顺序号。host_id:启动此事务的主机的 UUID。Tuple(UInt64, UInt64, UUID)
示例
用法示例
transactionLatestSnapshot
引入版本:v22.6.0
返回某个可读事务的最新快照 (提交序列号,Commit Sequence Number) 。
语法
参数
- 无。
返回值
返回事务的最新快照 (CSN) 。UInt64
示例
使用示例
transactionOldestSnapshot
引入版本:v22.6.0
返回某个正在运行的事务可见的最旧快照 (提交序列号,Commit Sequence Number) 。
语法
参数
- 无。
返回值
返回事务的最早快照 (CSN) 。UInt64
示例
用法示例
transform
引入版本:v1.1.0
根据显式定义的若干元素到其他元素的映射来转换一个值。
该函数有两种变体:
transform(x, array_from, array_to, default)- 使用带有默认值的映射数组来转换x,默认值用于未匹配的元素transform(x, array_from, array_to)- 执行相同的转换,但在未找到匹配项时返回原始的x
函数在 array_from 中查找 x,并返回 array_to 中相同索引位置的对应元素。
如果在 array_from 中未找到 x,则返回 default 值 (4 参数版本) 或原始的 x (3 参数版本) 。
如果在 array_from 中存在多个匹配元素,则返回第一个匹配项对应的元素。
要求:
array_from和array_to必须具有相同数量的元素- 对于 4 参数版本:
transform(T, Array(T), Array(U), U) -> U,其中T和U可以是不同但兼容的类型 - 对于 3 参数版本:
transform(T, Array(T), Array(T)) -> T,其中所有类型必须相同
语法
参数
x— 要转换的值。(U)Int*或Decimal或Float*或String或Date或DateTimearray_from— 用于查找匹配项的常量数组。Array((U)Int*)或Array(Decimal)或Array(Float*)或Array(String)或Array(Date)或Array(DateTime)array_to— 当在array_from中找到对应匹配项时要返回的常量数组。Array((U)Int*)或Array(Decimal)或Array(Float*)或Array(String)或Array(Date)或Array(DateTime)default— 可选。当在array_from中找不到x时要返回的值。如果省略,则返回未修改的x。(U)Int*或Decimal或Float*或String或Date或DateTime
返回值
如果 x 与 array_from 中的某个元素匹配,则返回 array_to 中对应的值;否则返回 default (如果提供) 或 x (如果未提供 default) 。Any
示例
transform(T, Array(T), Array(U), U) -> U
transform(T, Array(T), Array(T)) -> T
uniqThetaIntersect
引入版本:v22.9.0
对两个 uniqThetaSketch 对象执行交集运算 (集合运算 ∩) ,结果为一个新的 uniqThetaSketch。
语法
参数
uniqThetaSketch— uniqThetaSketch 对象。Tuple或Array或Date或DateTime或String或(U)Int*或Float*或Decimal
返回值
包含交集结果的新 uniqThetaSketch。UInt64
示例
用法示例
uniqThetaNot
引入版本:v22.9.0
对两个 uniqThetaSketch 对象执行 a_not_b 计算 (Set 操作 ×) ,返回一个新的 uniqThetaSketch。
语法
参数
uniqThetaSketch— uniqThetaSketch 对象。类型可以是Tuple、Array、Date、DateTime、String、(U)Int*、Float*或Decimal
返回值
返回一个新的 uniqThetaSketch,其中包含 a_not_b 结果。UInt64
示例
用法示例
uniqThetaUnion
自 v22.9.0 引入
对两个 uniqThetaSketch 对象执行并集运算 (集合运算 ∪) ,结果是一个新的 uniqThetaSketch。
语法
参数
uniqThetaSketch— uniqThetaSketch 对象。Tuple或Array或Date或DateTime或String或(U)Int*或Float*或Decimal
返回值
返回一个包含并集结果的新的 uniqThetaSketch 对象。UInt64
示例
用法示例
uptime
引入版本:v1.1.0
返回服务器的运行时间 (以秒为单位) 。 如果在分布式表的上下文中执行,则此函数会生成一个普通列 (非常量列) ,其中的值对应各个分片。 否则它会生成一个常量值。
语法
参数
- 无。
返回值
返回服务器的运行时间,单位为秒。UInt32
示例
用法示例
variantElement
引入版本:v25.2.0
从 Variant 列中提取指定类型的列。
语法
参数
variant— Variant 列。Varianttype_name— 要提取的 Variant 类型名称。Stringdefault_value— 当 Variant 中不包含指定类型的 Variant 时使用的默认值。可以为任意类型。可选参数。Any
返回值
返回一个列,其中包含从 Variant 列中提取出的指定 Variant 类型值。Any
示例
用法示例
variantType
引入版本:v24.2.0
返回 Variant 列中每一行对应的变体类型名称。如果某一行包含 NULL,则为其返回 'None'。
语法
参数
variant— Variant 列。Variant
返回值
返回一个 Enum 列,其中每一行包含对应的 Variant 类型名称。Enum
示例
使用示例
version
引入于:v1.1.0
以字符串形式返回当前 ClickHouse 版本号,格式为:major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release。
如果在分布式表的上下文中执行,此函数会生成一个普通列,其值对应各个分片。
否则,它会生成一个常量值。
语法
参数
- 无。
返回值
返回当前 ClickHouse 的版本。String
示例
使用示例
visibleWidth
引入版本:v1.1.0
计算以文本格式 (制表符分隔) 将值输出到控制台时的大致显示宽度。
系统使用此函数来实现 Pretty 格式。
在 Pretty 格式中,NULL 表示为与 NULL 对应的字符串。
语法
参数
x— 任意数据类型的值。Any
返回值
返回该值以文本格式输出时的大致宽度。UInt64
示例
计算 NULL 的可见宽度
zookeeperSessionUptime
自 v21.11.0 引入
返回当前 ZooKeeper 会话的运行时长 (以秒为单位) 。
语法
参数
- 无。
返回值
返回当前 ZooKeeper 会话已运行的时间 (单位:秒) 。UInt32
示例
用法示例