其他函数
以下函数文档是从 system.functions 系统表生成的。
FQDN
首次引入于:v20.1
返回 ClickHouse 服务器的完全限定域名(FQDN,Fully Qualified Domain Name)。
语法
别名: fullHostName
参数
- 无参数。
返回值
返回 ClickHouse 服务器的完全限定域名。String
示例
使用示例
MACNumToString
引入版本:v1.1
将一个 UInt64 数值按大端字节序解释为 MAC 地址。
以字符串形式返回对应的 MAC 地址,格式为 AA:BB:CC:DD:EE:FF(以冒号分隔的十六进制数)。
语法
参数
num— UInt64 无符号整数值。UInt64
返回值
返回格式为 AA:BB:CC:DD:EE:FF 的 MAC 地址字符串。String
示例
用法示例
MACStringToNum
引入自:v1.1
MACNumToString 的反向函数。如果 MAC 地址格式无效,则返回 0。
语法
参数
s— MAC 地址字符串。String
返回值
返回一个 UInt64 数值。UInt64
示例
用法示例
MACStringToOUI
引入版本:v1.1
给定一个格式为 AA:BB:CC:DD:EE:FF(以冒号分隔的十六进制数字)的 MAC 地址,返回其前三个字节,并将其表示为一个 UInt64 整数。如果 MAC 地址格式无效,则返回 0。
语法
参数
s— MAC 地址字符串。String
返回值
前三个字节对应的 UInt64 数值。UInt64
示例
用法示例
authenticatedUser
引入于:v25.11
如果会话 USER 已通过 EXECUTE AS 命令被切换,则此函数返回最初用于身份验证并创建会话的原始 USER 名称。
别名:authUser()
语法
别名:authUser
参数
- 无。
返回值
已通过身份验证用户的名称。String
示例
用法示例
bar
引入版本:v1.1
用于构建柱状图。 绘制一个带状条,其宽度与 (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
返回包含该行的块的单调递增编号。 返回的块编号按尽力而为原则更新,因此可能并非完全精确。
语法
参数
- 无。
返回值
该行所在数据块的序列号。UInt64
示例
基本用法
blockSerializedSize
引入自:v20.3
返回磁盘上一个值块未压缩后的大小(以字节为单位)。
语法
参数
x1[, x2, ...]— 任意数量的值,用于获取包含这些值的数据块在未压缩时的大小。Any
返回值
返回在不使用压缩的情况下,包含这些值的数据块写入磁盘时占用的字节数。UInt64
示例
用法示例
blockSize
引入版本:v1.1
在 ClickHouse 中,查询是按块(chunk)进行处理的。 此函数返回调用该函数所在块的大小(行数)。
语法
参数
- 无。
返回值
返回当前数据块中的行数。UInt64
示例
使用示例
buildId
引入于:v20.5
返回编译器为当前运行的 ClickHouse 服务器二进制文件生成的构建 ID。 如果在分布式表的上下文中执行,该函数会生成一个普通列,其中的值对应各个分片。 否则,它会生成一个常量值。
语法
参数
- 无。
返回值
返回构建 ID。String
示例
用法示例
byteSize
引入版本:v21.1
返回对其参数在内存中未压缩字节大小的估计值。
对于 String 参数,函数返回字符串长度 + 8(用于存储长度的信息)。
如果函数有多个参数,则函数会累加它们的字节大小。
语法
参数
arg1[, arg2, ...]— 任意数据类型的值,用于估算其未压缩的字节大小。Any
返回值
返回对参数在内存中字节大小的估算值。UInt64
示例
用法示例
多个参数
catboostEvaluate
引入版本:v22.9
评估外部 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
将颜色从 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
将 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
将以 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 引入
将以 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
返回提交当前查询的客户端的连接 ID。
此函数在调试场景中最为有用。
它是为了兼容 MySQL 的 CONNECTION_ID 函数而创建的。
在生产查询中通常不会使用。
语法
参数
- 无。
返回值
返回当前客户端的连接 ID。UInt64
示例
用法示例
countDigits
引入于:v20.8
返回表示一个值所需的十进制位数。
该函数会考虑十进制值的 scale,也就是说,它是在底层整数类型 (value * scale) 上计算结果。
例如:
countDigits(42) = 2countDigits(42.000) = 5countDigits(0.04200) = 4
可以使用 countDigits(x) > 18 来检查 Decimal64 是否发生溢出,
尽管它比 isDecimalOverflow 要慢。
语法
参数
返回值
返回表示 x 所需的位数。UInt8
示例
用法示例
currentDatabase
引入自:v1.1 版本
返回当前数据库的名称。
在 CREATE TABLE 查询中需要在表引擎参数里指定数据库时非常有用。
另请参阅 SET 语句。
语法
别名: current_database, SCHEMA, DATABASE
参数
- 无。
返回值
返回当前数据库的名称。String
示例
使用示例
currentProfiles
引入版本:v21.9
返回当前用户的设置配置文件数组。
语法
参数
- 无。
返回值
返回一个包含当前用户所有设置配置文件名称的数组。Array(String)
示例
用法示例
currentQueryID
引入版本:v25.2
返回当前查询 ID。
语法
别名: current_query_id
参数
- 无
返回值
示例
示例
currentRoles
自 v21.9 版本引入
返回一个数组,包含授予当前用户的所有角色。
语法
参数
- 无。
返回值
返回一个数组,其中包含授予当前用户的角色。Array(String)
示例
使用示例
currentSchemas
引入于:v23.7
与函数 currentDatabase 相同,但:
- 接受一个会被忽略的布尔类型参数
- 以仅包含一个值的数组形式返回数据库名称。
函数 currentSchemas 仅为与 PostgreSQL 兼容而存在。
请使用 currentDatabase 替代。
另请参阅 SET 语句。
语法
别名:current_schemas
参数
bool— 一个布尔值,将被忽略。Bool
返回值
返回一个仅包含当前数据库名称的单元素数组。Array(String)
示例
用法示例
currentUser
引入于:v20.1
返回当前用户的名称。 在分布式查询中,返回发起该查询的用户的名称。
语法
别名: current_user, user
参数
- 无。
返回值
返回当前用户的名称;否则返回发起该查询的用户的登录名。String
示例
使用示例
defaultProfiles
引入版本:v21.9
返回当前用户的默认设置配置文件名称数组。
语法
参数
- 无。
返回值
返回当前用户默认设置配置文件名称的数组。Array(String)
示例
用法示例
defaultRoles
自 v21.9 引入
返回当前用户的默认角色数组。
语法
参数
- 无。
返回值
返回当前用户的默认角色组成的数组。Array(String)
示例
使用示例
defaultValueOfArgumentType
自 v1.1 起提供
返回给定数据类型的默认值。 不包括用户为自定义列设置的默认值。
语法
参数
expression— 任意类型的值,或其计算结果为任意类型值的表达式。Any
返回值
对数值返回 0,对字符串返回空字符串,对 Nullable 类型返回 NULL。UInt8 或 String 或 NULL
示例
用法示例
Nullable 示例
defaultValueOfTypeName
首次引入于:v1.1
返回指定类型名称的默认值。
语法
参数
type— 表示类型名的字符串。String
返回值
返回给定类型名的默认值:数值类型为 0,字符串类型为空字符串,对于 Nullable 的 UInt8 或 String 或 NULL 则返回 NULL。
示例
用法示例
Nullable 示例
displayName
自 v22.11 引入
返回 config 中的 display_name 值;如果未设置,则返回服务器的完全限定域名(FQDN)。
语法
参数
- 无。
返回值
返回配置中的 display_name 值;如果未设置,则返回服务器的 FQDN(完全限定域名)。String
示例
用法示例
dumpColumnStructure
引入版本:v1.1
输出某个列的数据类型及其内部结构的详细描述。
语法
参数
x— 要获取其结构描述的值。Any
返回值
返回用于表示该值的列结构的描述。String
示例
用法示例
enabledProfiles
引入版本:v21.9
返回一个数组,其中包含当前用户已启用的设置配置文件的名称。
语法
参数
- 无。
返回值
返回一个数组,包含当前 USER 已启用的设置配置文件名称。Array(String)
示例
用法示例
enabledRoles
自 v21.9 起引入
返回一个数组,列出当前用户已启用的角色。
语法
参数
- 无。
返回值
返回一个包含为当前用户启用的角色名称的数组。Array(String)
示例
使用示例
errorCodeToName
引入于:v20.12
返回数值型 ClickHouse 错误码对应的文本名称。 数值错误码与错误名称之间的映射可在此处查看。
语法
参数
返回值
返回 error_code 的文本形式名称。String
示例
用法示例
file
引入于:v21.3
以字符串形式读取文件,并将数据加载到指定的列中。 文件内容不会被解析。
另请参阅 file 表函数。
语法
参数
path— 相对于user_files_path的文件路径。支持通配符*、**、?、{abc,def}和{N..M},其中N、M为数字,'abc'、'def'为字符串。Stringdefault— 当文件不存在或无法访问时返回的值。String或NULL
返回值
以字符串形式返回文件内容。String
示例
将文件插入到表中
filesystemAvailable
引入版本:v20.1
返回承载数据库持久化数据的文件系统中的可用空间。
返回值始终小于文件系统的总可用空间(filesystemUnreserved),因为一部分空间会被预留给操作系统。
语法
参数
disk_name— 可选。要查询其可用空间的磁盘名。未指定时使用默认磁盘。String或FixedString
返回值
返回剩余可用空间的字节数。UInt64
示例
使用示例
filesystemCapacity
自 v20.1 引入
返回文件系统的容量(字节数)。 需要在配置中设置指向数据目录的 path。
语法
参数
disk_name— 可选。要获取容量的磁盘名称。如果省略,则使用默认磁盘。String或FixedString
返回值
返回文件系统的容量(字节)。UInt64
示例
用法示例
filesystemUnreserved
自 v22.12 引入
返回用于数据库持久化的文件系统上的空闲空间总量(此前为 filesystemFree)。
另请参见 filesystemAvailable。
语法
参数
disk_name— 可选。要查询其总可用空间的磁盘名称。如果省略,则使用默认磁盘。String或FixedString
返回值
返回可用空间的字节数。UInt64
示例
使用示例
finalizeAggregation
引入自:v1.1
在给定聚合状态的情况下,该函数返回聚合结果(或在使用 -State 组合器时返回最终状态)。
语法
参数
state— 聚合状态。AggregateFunction
返回值
返回聚合操作的最终结果。Any
示例
使用示例
与 initializeAggregation 配合使用
flipCoordinates
引入于:v25.10
对几何对象的 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
返回给定 SQL 查询的格式化版本,可能为多行格式。解析出错时将抛出异常。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询。String
返回值
格式化后的查询 String
示例
多行
formatQueryOrNull
引入于:v23.11
返回给定 SQL 查询的格式化结果,可能为多行。若解析出错,则返回 NULL。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询语句。String
返回值
格式化后的查询 String
示例
多行
formatQuerySingleLine
引入版本:v23.10
类似于 formatQuery(),但返回的格式化字符串不包含换行符。解析出错时抛出异常。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询。String
返回值
格式化后的查询 String
示例
multiline
formatQuerySingleLineOrNull
引入于:v23.11
与 formatQuery() 类似,但返回的格式化字符串不包含换行符。若解析出错,则返回 NULL。 [example:multiline]
语法
参数
query— 要格式化的 SQL 查询。String
返回值
格式化后的 SQL 查询 String
示例
多行
formatReadableDecimalSize
自 v22.11 起引入。
给定一个大小(字节数)后,此函数返回一个带有后缀(KB、MB 等)、经过四舍五入的可读大小字符串。
与此函数相反的操作为 parseReadableSize。
语法
参数
x— 以字节为单位的大小。UInt64
返回值
返回一个带后缀的、已四舍五入的人类可读大小字符串。String
示例
格式化文件大小
formatReadableQuantity
引入版本:v20.10
给定一个数字,此函数返回一个四舍五入后的、带有后缀(thousand、million、billion 等)的数值字符串。
此函数接受任意数值类型作为输入,但在内部会将其转换为 Float64 类型。
对于较大的数值,结果可能并不理想。
语法
参数
x— 要格式化的数字。UInt64
返回值
以字符串形式返回带有后缀的四舍五入数字。String
示例
使用后缀格式化数字
formatReadableSize
引入于:v1.1
给定一个大小(字节数),此函数返回一个可读的、四舍五入后的大小,并带有后缀(KiB、MiB 等),以字符串形式表示。
与此函数相反的操作为 parseReadableSize、parseReadableSizeOrZero 和 parseReadableSizeOrNull。
此函数接受任意数值类型作为输入,但在内部会将它们转换为 Float64。对于非常大的值,结果可能不是最优的。
语法
别名: FORMAT_BYTES
参数
x— 以字节为单位的大小。UInt64
返回值
返回一个四舍五入后并带有后缀的易读大小字符串。String
示例
格式化文件大小
formatReadableTimeDelta
引入版本:v20.12
给定以秒为单位的时间间隔(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
解析给定的查询字符串,并对其应用随机的 AST 变异(fuzzing)。返回变异后的查询字符串。该函数是非确定性的:每次调用都可能产生不同结果。需要设置 allow_fuzz_query_functions = 1。
语法
参数
query— 要进行模糊测试的 SQL 查询。String
返回值
模糊后的查询字符串 String
示例
基本示例
generateRandomStructure
引入版本:v23.5
生成格式为 column1_name column1_type, column2_name column2_type, ... 的随机表结构。
语法
参数
number_of_columns— 结果表结构中期望的列数量。如果设置为 0 或Null,列数将在 1 到 128 之间随机生成。默认值:Null。UInt64seed— 用于生成稳定结果的随机种子。如果未指定 seed 或将其设置为Null,则会随机生成。UInt64
返回值
随机生成的表结构。String
示例
用法示例
具有指定列数
使用指定种子
generateSerialID
引入版本:v25.1
生成并返回从上一个计数器值开始的连续数字。
此函数接受一个字符串参数(序列标识符)以及一个可选的起始值。
服务器需要配置 Keeper。
各序列存储在 Keeper 节点下的路径中,该路径可在服务器配置中的 series_keeper_path 进行配置。
语法
参数
series_identifier— 序列标识符const Stringstart_value— 可选。计数器的起始值,默认为 0。注意:该值仅在创建新序列时生效;如果序列已存在,则会被忽略UInt*
返回值
返回从前一个计数器值递增产生的连续编号。UInt64
示例
第一次调用
第二次调用
按列调用
带 start 参数
指定 start 值时的第二次调用
getClientHTTPHeader
引入版本:v24.5
获取指定 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
从服务器配置文件中返回某个宏的值。
宏在配置文件的 <macros> 部分中定义,可用于通过易于识别的名称区分服务器,即使它们具有复杂的主机名。
如果在分布式表的上下文中执行该函数,它会生成一个普通列,其值分别对应于各个分片。
语法
参数
name— 要获取的宏名称。const String
返回值
返回指定宏的值。String
示例
基本用法
getMaxTableNameLengthForDatabase
引入版本:v25.1
返回指定数据库中表名的最大长度限制。
语法
参数
database_name— 指定数据库的名称。String
返回值
返回最大表名的长度,类型为 Integer。
示例
典型用法
getMergeTreeSetting
引入版本:v25.6
返回指定 MergeTree 设置的当前值。
语法
参数
setting_name— 设置名称。String
返回值
返回该 MergeTree 设置的当前值。
示例
用法示例
getOSKernelVersion
自 v21.11 起引入
返回一个表示操作系统内核版本的字符串。
语法
参数
- 无。
返回值
返回当前操作系统内核版本。String
示例
用法示例
getServerPort
自 v21.10 引入
返回给定协议对应的服务器的端口号。
语法
参数
port_name— 端口名称。String
返回值
返回服务器端口号。UInt16
示例
使用示例
getServerSetting
引入版本:v25.6
返回指定服务器设置名称对应的当前值。
语法
参数
setting_name— 服务器设置项名称。String
返回值
返回服务器设置的当前值。Any
示例
用法示例
getSetting
引入版本:v20.7
返回指定设置项的当前值。
语法
参数
setting_Name— 设置名称。const String
返回值
返回该设置的当前值。Any
示例
用法示例
getSettingOrDefault
自 v24.10 引入
返回指定设置的当前值;如果在当前配置概要中未设置该项,则返回第二个参数中指定的默认值。
语法
参数
setting_name— 设置名称。Stringdefault_value— 当未设置custom_setting时返回的值。该值可以是任意数据类型或 Null。
返回值
返回指定设置的当前值;如果该设置未配置,则返回 default_value。
示例
用法示例
getSizeOfEnumType
引入版本:v1.1
返回给定 Enum 中枚举成员的数量。
语法
参数
x— 类型为Enum的值。Enum
返回值
返回具有 Enum 类型输入值的字段数量。UInt8/16
示例
用法示例
getSubcolumn
自 v23.3 版本引入。
接收一个表达式或标识符,以及一个包含子列名称的常量字符串作为参数。
返回从该表达式中提取的指定子列。
语法
参数
- 无。
返回值
示例
getSubcolumn
getTypeSerializationStreams
引入版本:v22.6
枚举某个数据类型的流路径。 该 FUNCTION 主要用于开发用途。
语法
参数
col— 将从中检测数据类型的列,或某数据类型的字符串表示形式。Any
返回值
返回包含所有序列化子流路径的数组。Array(String)
示例
tuple
map
globalVariable
引入版本:v20.5
接受一个常量字符串参数,并返回具有该名称的全局变量的值。此函数仅用于与 MySQL 的兼容性,对于 ClickHouse 的正常运行既非必需,也无实际用途。仅定义了少量用于占位的全局变量。
语法
参数
name— 全局变量名称。String
返回值
返回变量 name 的值。Any
示例
globalVariable
hasColumnInTable
引入版本:v1.1
检查数据库表中是否存在指定的列。
对于嵌套数据结构中的元素,该函数会检查对应列是否存在。
对于嵌套数据结构本身,该函数返回 0。
语法
参数
database— 数据库名称。const Stringtable— 表名。const Stringcolumn— 列名。const Stringhostname— 可选。要在其上执行检查的远程服务器名。const Stringusername— 可选。远程服务器的用户名。const Stringpassword— 可选。远程服务器的密码。const String
返回值
如果指定的列存在,则返回 1,否则返回 0。UInt8
示例
检查一个已存在的列
检查不存在的列
hasThreadFuzzer
引入于:v20.6
返回是否启用了线程 fuzzer。 此 FUNCTION 仅在测试和调试时有用。
语法
参数
- 无。
返回值
返回 Thread Fuzzer 是否已启用,类型为 UInt8
示例
检查 Thread Fuzzer 状态
hostName
引入版本:v20.5
返回执行此函数的主机名。 如果函数在远程服务器上执行(分布式处理),则返回远程服务器的名称。 如果函数在分布式表的上下文中执行,它会生成一个普通列,列中包含与各个分片对应的值。 否则,它会生成一个常量值。
语法
别名: hostname
参数
- 无。
返回值
返回主机名。String
示例
使用示例
icebergBucket
自 v25.5 版本引入
实现了 Iceberg bucket transform 的逻辑。
语法
参数
N— 桶的数量(模数)。const (U)Int*value— 要转换的源值。(U)Int*或Bool或Decimal或Float*或String或FixedString或UUID或Date或Time或DateTime
返回值
返回源值的 32 位哈希值。Int32
示例
示例
icebergTruncate
在 v25.3 中引入
实现 Iceberg truncate 变换的逻辑:https://iceberg.apache.org/spec/#truncate-transform-details。
语法
参数
返回值
与参数类型相同
示例
示例
identity
引入自:v1.1
此函数返回传入的参数,在调试和测试时非常有用。它可以让你绕过索引的使用,从而观察全表扫描时的性能。在查找可用索引时,查询分析器会忽略 identity 函数内部的所有内容,并且还会禁用常量折叠。
语法
参数
x— 输入值。Any
返回值
返回保持不变的输入值。Any
示例
使用示例
ignore
在 v1.1 版本中引入
接受任意参数并无条件返回 0。
语法
参数
x— 不会被实际使用,仅用于避免语法错误的输入值。Any
返回值
始终返回 0。UInt8
示例
用法示例
indexHint
引入版本:v1.1
此函数用于调试和内部分析(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
返回初始当前查询的 ID。
查询的其他参数可以从 system.query_log 表中的 initial_query_id 字段中提取。
与 queryID 函数相比,initialQueryID 在不同分片上返回相同的结果。
语法
别名: initial_query_id
参数
- 无。
返回值
返回当前初始查询的 ID。String
示例
用法示例
initialQueryStartTime
引入版本:v25.4
返回与当前查询对应的初始查询的开始时间。
initialQueryStartTime 在不同分片上返回相同的结果。
语法
别名: initial_query_start_time
参数
- 无。
返回值
返回当前初始查询的开始时间,类型为 DateTime
示例
用法示例
initializeAggregation
引入于:v20.6
基于单个值计算聚合函数的结果。
此函数可用于通过组合器 -State 初始化聚合函数。
可以创建聚合函数的状态并将其插入到 AggregateFunction 类型的列中,或者将初始化后的聚合状态用作默认值。
语法
参数
返回值
针对传递给该函数的每一行返回聚合结果。返回类型与 initializeAggregation 所接收的第一个参数(该函数)的返回类型相同。Any
示例
使用 uniqState 的基本示例
与 sumState 和 finalizeAggregation 搭配使用
isConstant
引入自:v20.3
返回参数是否为常量表达式。 常量表达式是指其结果在查询分析阶段(即执行之前)就已知的表达式。 例如,基于字面量的表达式就是常量表达式。 此函数主要用于开发、调试和演示。
语法
参数
x— 要检查的表达式。Any
返回值
如果 x 是常量,返回 1;如果 x 不是常量,返回 0。UInt8
示例
常量表达式
带函数的常量
非常量表达式
now() 函数的行为
isDecimalOverflow
引入于:v20.8
检查一个十进制数的位数是否过多,因而无法在给定精度的 Decimal 数据类型中被正确表示。
语法
参数
返回值
如果该 Decimal 值的数字位数超过其精度允许的范围,则返回 1;如果该 Decimal 值满足指定精度,则返回 0。UInt8
示例
使用示例
joinGet
引入版本:v18.16
允许像从字典中提取数据那样从表中提取数据。 使用指定的 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
允许像从字典中一样从表中提取数据。
使用指定的 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
返回 LowCardinality 列的字典中某个值的位置。位置从 1 开始计数。由于 LowCardinality 列在每个分区片段上都有独立字典,此函数在不同分区片段中对相同值可能返回不同的位置。
语法
参数
col— 低基数列。LowCardinality
返回值
该值在当前数据部分的字典中的位置。UInt64
示例
使用示例
lowCardinalityKeys
引入于:v18.12
返回 LowCardinality 列的字典值。 如果数据块大小小于或大于字典大小,结果将分别被截断或用默认值填充扩展。 由于 LowCardinality 为每个分区片段维护独立字典,此函数在不同分区片段中可能返回不同的字典值。
语法
参数
col— 一个低基数列。LowCardinality
返回值
返回字典的键。UInt64
示例
lowCardinalityKeys
materialize
引入于:v1.1
将一个常量转换为包含单个值的普通列。 在内存中,普通列和常量的表示方式不同。 函数通常会针对普通参数和常量参数执行不同的代码,尽管结果通常应该相同。 此函数可用于调试这种行为。
语法
参数
x— 常量。Any
返回值
返回一个包含该常量值的整列。Any
示例
用法示例
minSampleSizeContinuous
引入于:v23.10
计算在 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
计算在 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
返回同一列中相对于当前行指定偏移量处的值。 该函数已被弃用且容易出错,因为它基于数据块的物理顺序进行操作,而这可能与用户期望的逻辑顺序不一致。 建议改用合适的窗口函数。
可以通过设置 allow_deprecated_error_prone_window_functions = 1 来启用该函数。
语法
参数
column— 源列。Anyoffset— 相对于当前行的偏移量。正值向前查找,负值向后查找。Integerdefault_value— 可选。偏移超出数据范围时要返回的值。如果未指定,则使用该列类型的默认值。Any
返回值
从指定偏移位置返回一个值,若越界则返回默认值。Any
示例
用法示例
含默认值
normalizeQuery
引入版本:v20.8
将字面量、字面量序列以及复杂别名(包含空格、超过两位数字,或长度至少为 36 字节(如 UUID))替换为占位符 ?。
语法
参数
x— 字符序列。String
返回值
返回带有占位符的给定字符序列。String
示例
使用示例
normalizeQueryKeepNames
引入版本:v21.2
将字面量和字面量序列替换为占位符 ?,但不会替换复杂别名(包括包含空白字符、数字位数多于两位,或长度至少为 36 字节(例如 UUID) 的别名)。
这有助于更好地分析复杂的查询日志。
语法
参数
x— 字符序列。String
返回值
返回包含占位符的指定字符序列。String
示例
用法示例
normalizedQueryHash
引入于:v20.8
对于类似的查询,在不考虑字面量具体取值的情况下,返回相同的 64 位哈希值。 可用于分析查询日志。
语法
参数
x— 字符序列。String
返回值
返回一个 64 位的哈希值。UInt64
示例
使用示例
normalizedQueryHashKeepNames
引入于:v21.2
与 normalizedQueryHash 类似,它在对相似查询进行哈希时,会返回相同的 64 位哈希值,并且忽略字面量的值,但在哈希之前不会将复杂别名(包含空格、超过两位数字,或长度至少为 36 字节(例如 UUID))替换为占位符。
在分析查询日志时可能会很有用。
语法
参数
x— 字符序列。String
返回值
返回 64 位哈希值。UInt64
示例
用法示例
parseReadableSize
引入于:v24.6
给定一个字符串,该字符串包含字节大小以及单位(如 B、KiB、KB、MiB、MB 等,既可以是 ISO/IEC 80000-13 中规定的二进制前缀,也可以是十进制字节单位),该函数返回对应的字节数。
如果函数无法解析输入值,则会抛出异常。
该函数的反向函数是 formatReadableSize 和 formatReadableDecimalSize。
语法
参数
x— 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小。String
返回值
返回以字节为单位的字节数,向上取整到最接近的整数。UInt64
示例
用法示例
parseReadableSizeOrNull
引入版本:v24.6
给定一个包含字节大小以及 B、KiB、KB、MiB、MB 等作为单位的字符串(即 ISO/IEC 80000-13 或十进制字节单位),该函数返回对应的字节数。
如果函数无法解析输入值,则返回 NULL。
该函数的逆操作是 formatReadableSize 和 formatReadableDecimalSize。
语法
参数
x— 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小。String
返回值
返回按字节计的数值,向上取整到最接近的整数;如果无法解析输入,则返回 NULL。Nullable(UInt64)
示例
用法示例
parseReadableSizeOrZero
引入版本:v24.6
给定一个字符串,其中包含以 B、KiB、KB、MiB、MB 等作为单位表示的字节大小(即 ISO/IEC 80000-13 或十进制字节单位),此函数返回对应的字节数。
如果函数无法解析输入值,则返回 0。
此函数的逆操作为 formatReadableSize 和 formatReadableDecimalSize。
语法
参数
x— 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小值。String
返回值
返回字节数,向上取整为最接近的整数;如果无法解析输入,则返回 0。UInt64
示例
使用示例
parseTimeDelta
引入版本:v22.7
解析由一串数字后接类似时间单位的部分组成的字符串。
时间间隔字符串使用如下时间单位标记:
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
计算分区 ID。
此函数较慢,不应对大量行调用。
语法
别名: partitionID
参数
column1, column2, ...— 需要返回其分区 ID 的列。
返回值
返回该行所属的分区 ID。String
示例
使用示例
queryID
引入于:v21.9
返回当前查询的 ID。
查询的其他参数可以从 system.query_log 表中的 query_id 字段中提取。
与 initialQueryID 函数不同,queryID 在不同分片上可能会返回不同的结果。
语法
别名: query_id
参数
- 无。
返回值
返回当前查询的 ID。String
示例
用法示例
revision
引入自:v22.7
返回当前 ClickHouse 服务器的修订版本号。
语法
参数
- 无。
返回值
返回当前 ClickHouse 服务器的版本号。UInt32
示例
用法示例
rowNumberInAllBlocks
自 v1.1 版本引入
为每个被处理的行返回一个唯一的行号。
语法
参数
- 无。
返回值
返回数据块中行的序号,从 0 开始计数。UInt64
示例
用法示例
rowNumberInBlock
引入版本:v1.1
对于由 rowNumberInBlock 处理的每个块,返回当前行的行号。
在每个块中,返回值从 0 开始计数。
语法
参数
- 无。
返回值
返回数据块中行的序号,从 0 开始。UInt64
示例
用法示例
runningAccumulate
自 v1.1 引入
对数据块中每一行累积聚合函数的状态。
对于每个新的数据块,状态都会被重置。
由于这种易出错的行为,此函数已弃用,建议改用窗口函数。
您可以通过设置 allow_deprecated_error_prone_window_functions 来允许继续使用该函数。
语法
参数
agg_state— 聚合函数的状态。AggregateFunctiongrouping— 可选。分组键。当grouping的值发生变化时,函数的状态会被重置。可以是任意支持相等运算符的数据类型。Any
返回值
为每行返回累计结果。Any
示例
initializeAggregation 的用法示例
runningConcurrency
引入于:v21.3
计算并发事件的数量。 每个事件都有开始时间和结束时间。 开始时间包含在事件的持续区间内,而结束时间不包含在事件内。 具有开始时间和结束时间的列必须是相同的数据类型。 该函数针对每个事件的开始时间计算活动(并发)事件的总数。
事件必须按开始时间升序排序。 如果不满足此要求,函数会抛出异常。 每个数据块都会被单独处理。 如果来自不同数据块的事件在时间上有重叠,则可能无法被正确处理。
建议改为使用 window functions。
语法
参数
start— 包含事件开始时间的列。Date或DateTime或DateTime64end— 包含事件结束时间的列。Date或DateTime或DateTime64
返回值
返回在每个事件开始时的并发事件数量。UInt32
示例
用法示例
runningDifference
引入版本:v1.1
计算数据块中两个相邻行的值之间的差值。
对于第一行返回 0,对于后续各行返回其与前一行之间的差值。
只会返回当前正在处理的数据块内部的差值。 由于这种容易出错的行为,该函数已被弃用。 建议改用 window functions。
你可以通过设置 allow_deprecated_error_prone_window_functions 来允许使用该函数。
函数的结果取决于相关数据块以及块内数据的顺序。
在计算 runningDifference() 时,行的顺序可能与返回给用户时的行顺序不同。
为避免这种情况,你可以先创建一个带有 ORDER BY 的子查询,并在子查询外部调用该函数。
请注意,块大小会影响结果。
runningDifference 的内部状态在每个新块上都会被重置。
语法
参数
x— 要计算逐行差分的列。Any
返回值
返回相邻行值之间的差值,首行的结果为 0。
示例
使用示例
块大小影响的示例
runningDifferenceStartingWithFirstValue
引入版本:v1.1
计算数据块中相邻行值之间的差值,但与 runningDifference 不同的是,它返回第一行的实际值,而不是 0。
仅在当前正在处理的数据块内返回差值。 由于这种易出错的行为,该函数已被弃用。 建议改用窗口函数。
你可以通过设置项 allow_deprecated_error_prone_window_functions 来允许使用该函数。
语法
参数
x— 要计算运行差值的列。Any
返回值
返回相邻值之间的差值,第一行返回自身的值。Any
示例
使用示例
serverUUID
自 v20.1 引入
返回服务器首次启动时生成的随机且唯一的 UUID(v4)。 该 UUID 会被持久化,即在第二次、第三次及后续服务器启动时都会返回同一个 UUID。
语法
参数
- 无。
返回值
返回该服务器的随机 UUID。UUID
示例
使用示例
shardCount
自 v21.9 起引入
返回分布式查询的分片总数。
如果查询不是分布式查询,则返回常量值 0。
语法
参数
- 无。
返回值
返回分片总数,或 0。UInt32
示例
用法示例
shardNum
引入自:v21.9
返回在分布式查询中处理部分数据的分片的索引值。
索引从 1 开始。
如果查询不是分布式的,则返回常量值 0。
语法
参数
- 无。
返回值
返回分片索引或常量 0,类型为 UInt32。
示例
使用示例
showCertificate
引入于:v22.6
在已配置的情况下,会显示当前服务器的安全套接字层(SSL)证书的信息。 关于如何配置 ClickHouse 使用 OpenSSL 证书来验证连接的详细信息,请参阅 Configuring TLS。
语法
参数
- 无。
返回值
返回一个包含已配置 SSL 证书相关键值对的映射。Map(String, String)
示例
用法示例
sleep
自 v1.1 引入
按指定的秒数暂停查询的执行。 该函数主要用于测试和调试。
在生产环境中通常不应使用 sleep() 函数,因为它会对查询性能和系统响应能力产生负面影响。
不过,在以下场景中它可能会很有用:
- 测试:在测试或基准测试 ClickHouse 时,可能希望模拟延迟或引入暂停,以观察系统在特定条件下的行为。
- 调试:如果需要在某个特定时间点检查系统状态或查询执行情况,可以使用
sleep()引入暂停,从而检查或收集相关信息。 - 模拟:在某些情况下,可能希望模拟实际场景中出现延迟或暂停的情况,例如网络延迟或对外部系统的依赖。
务必谨慎且仅在必要时使用 sleep() 函数,因为它可能会影响 ClickHouse 系统的整体性能和响应能力。
出于安全原因,该函数只能在默认用户配置文件中执行(且已启用 allow_sleep)。
语法
参数
seconds— 暂停查询执行的秒数,最大为 3 秒。可以是浮点数值以指定小数秒。const UInt*或const Float*
返回值
返回 0。UInt8
示例
用法示例
sleepEachRow
引入版本:v1.1
使查询在结果集的每一行上暂停执行指定的秒数。
sleepEachRow() 函数主要用于测试和调试,与 sleep() 函数类似。
它允许在处理每一行时模拟延迟或引入暂停,这在以下场景中可能很有用:
- 测试:在特定条件下测试或基准测试 ClickHouse 的性能时,可以使用
sleepEachRow()为每一行的处理模拟延迟或引入暂停。 - 调试:如果需要检查系统状态或每一行的查询执行情况,可以使用
sleepEachRow()引入暂停,以便检查或收集相关信息。 - 仿真:在某些情况下,可能希望模拟现实场景,即在处理每一行时都会产生延迟或暂停,例如与外部系统交互或存在网络延迟时。
与 sleep() 函数一样,应谨慎且仅在必要时使用 sleepEachRow(),因为它可能会显著影响 ClickHouse 系统的整体性能和响应能力,特别是在处理大型结果集时。
语法
参数
seconds— 对结果集中的每一行暂停查询执行的秒数,最大为 3 秒。可以是浮点数,以指定小数秒。const UInt*或const Float*
返回值
对结果集中的每一行返回 0。UInt8
示例
用法示例
structureToCapnProtoSchema
引入版本:v23.8
用于将 ClickHouse 表结构转换为 CapnProto 格式 schema 的函数
语法
参数
- 无。
返回值
示例
random
structureToProtobufSchema
引入版本:v23.8
将 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
返回服务器监听的 native interface TCP 端口号。 如果在分布式表的上下文中执行,该函数会生成一个普通列,其中的值对应各个分片。 否则,它会生成一个常量值。
语法
参数
- 无。
返回值
返回 TCP 端口号。UInt16
示例
用法示例
throwIf
引入自:v1.1 版本
如果参数 x 为 true,则抛出异常。
要使用 error_code 参数,必须启用配置参数 allow_custom_error_code_in_throw。
语法
参数
x— 要检查的条件。Anymessage— 可选。自定义错误信息。const Stringerror_code— 可选。自定义错误码。const Int8/16/32
返回值
当条件为假时返回 0,当条件为真时抛出异常。UInt8
示例
用法示例
toColumnTypeName
引入自:v1.1
返回给定值对应数据类型的内部名称。
与函数 toTypeName 不同,返回的数据类型可能还包含内部包装列,例如 Const 和 LowCardinality。
语法
参数
value— 要确定其内部数据类型的值。Any
返回值
返回用于表示该值的内部数据类型名称。String
示例
使用示例
toTypeName
自 v1.1 起提供
返回传入参数的类型名称。
如果传入 NULL,函数返回类型 Nullable(Nothing),这对应于 ClickHouse 的内部 NULL 表示。
语法
参数
x— 任意类型的值。Any
返回值
返回输入值的数据类型名称。String
示例
用法示例
transactionID
引入版本:v22.6
返回事务 ID。
语法
参数
- 无。
返回值
返回一个由 start_csn、local_tid 和 host_id 组成的元组。
start_csn:全局顺序号,即在该事务开始时观测到的最新提交时间戳。local_tid:在特定start_csn下,由本地主机为其启动的每个事务生成的唯一本地顺序号。host_id:启动此事务的主机的 UUID。Tuple(UInt64, UInt64, UUID)
示例
用法示例
transactionLatestSnapshot
引入版本:v22.6
返回某个可读事务的最新快照(提交序列号,Commit Sequence Number)。
语法
参数
- 无。
返回值
返回事务的最新快照(CSN)。UInt64
示例
使用示例
transactionOldestSnapshot
引入版本:v22.6
返回某个正在运行的事务可见的最旧快照(提交序列号,Commit Sequence Number)。
语法
参数
- 无。
返回值
返回事务的最早快照(CSN)。UInt64
示例
用法示例
transform
引入版本:v1.1
根据显式定义的若干元素到其他元素的映射来转换一个值。
该函数有两种变体:
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
对两个 uniqThetaSketch 对象执行交集运算(集合运算 ∩),结果为一个新的 uniqThetaSketch。
语法
参数
uniqThetaSketch— uniqThetaSketch 对象。Tuple或Array或Date或DateTime或String或(U)Int*或Float*或Decimal
返回值
包含交集结果的新 uniqThetaSketch。UInt64
示例
用法示例
uniqThetaNot
引入版本:v22.9
对两个 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 引入
对两个 uniqThetaSketch 对象执行并集运算(集合运算 ∪),结果是一个新的 uniqThetaSketch。
语法
参数
uniqThetaSketch— uniqThetaSketch 对象。Tuple或Array或Date或DateTime或String或(U)Int*或Float*或Decimal
返回值
返回一个包含并集结果的新的 uniqThetaSketch 对象。UInt64
示例
用法示例
uptime
引入版本:v1.1
返回服务器的运行时间(以秒为单位)。 如果在分布式表的上下文中执行,则此函数会生成一个普通列(非常量列),其中的值对应各个分片。 否则它会生成一个常量值。
语法
参数
- 无。
返回值
返回服务器的运行时间,单位为秒。UInt32
示例
用法示例
variantElement
引入版本:v25.2
从 Variant 列中提取指定类型的列。
语法
参数
variant— Variant 列。Varianttype_name— 要提取的 Variant 类型名称。Stringdefault_value— 当 Variant 中不包含指定类型的 Variant 时使用的默认值。可以为任意类型。可选参数。Any
返回值
返回一个列,其中包含从 Variant 列中提取出的指定 Variant 类型值。Any
示例
用法示例
variantType
引入版本:v24.2
返回 Variant 列中每一行对应的变体类型名称。如果某一行包含 NULL,则为其返回 'None'。
语法
参数
variant— Variant 列。Variant
返回值
返回一个 Enum 列,其中每一行包含对应的 Variant 类型名称。Enum
示例
使用示例
version
引入于:v1.1
以字符串形式返回当前 ClickHouse 版本号,格式为:major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release。
如果在分布式表的上下文中执行,此函数会生成一个普通列,其值对应各个分片。
否则,它会生成一个常量值。
语法
参数
- 无。
返回值
返回当前 ClickHouse 的版本。String
示例
使用示例
visibleWidth
引入版本:v1.1
计算以文本格式(制表符分隔)将值输出到控制台时的大致显示宽度。
系统使用此函数来实现 Pretty 格式。
在 Pretty 格式中,NULL 表示为与 NULL 对应的字符串。
语法
参数
x— 任意数据类型的值。Any
返回值
返回该值以文本格式输出时的大致宽度。UInt64
示例
计算 NULL 的可见宽度
zookeeperSessionUptime
自 v21.11 引入
返回当前 ZooKeeper 会话的运行时长(以秒为单位)。
语法
参数
- 无。
返回值
返回当前 ZooKeeper 会话已运行的时间(单位:秒)。UInt32
示例
用法示例