本文列举 CLS 支持的各类 SQL 函数、运算符及表达式。
通用聚合函数
函数名称 | 说明 |
随机返回目标列中一个非 NULL 的值。 | |
计算 KEY 的算数平均值。 | |
返回目标列汇所有值按位与运算(AND)的结果。 | |
返回目标列汇所有值按位或运算(OR)的结果。 | |
是否所有的日志都满足指定的条件,如果是则返回 TRUE ,否则返回 FALSE。 | |
是否有任意一条日志满足指定的条件,如果是则返回 TRUE ,否则返回 FALSE。 | |
计算目标列的校验和值,返回结果为二进制字符串。 | |
统计所有行的行数。 | |
COUNT(1) 等同于 COUNT(*),表示所有的行数。 | |
统计 KEY 列非 NULL 的行数。 | |
统计满足指定条件的行数。 | |
是否所有的日志都满足指定的条件,如果是则返回 TRUE ,否则返回 FALSE。 | |
计算 KEY 的几何平均数,KEY 不允许包含负数,否则结果为 NaN。 | |
查询 KEY 中最大值。 | |
返回 y 为最大值时对应的 x 值。 | |
返回最大的 n 个 y 值对应的 x 值,返回结果为 JSON 数组。 | |
查询 KEY 中最小值。 | |
返回 y 为最小值时对应的 x 值。 | |
返回最小的 n 个 y 值对应的 x 值。返回结果为 JSON 数组。 | |
计算 KEY 的总和。 |
逻辑运算符
算数及比较运算符
函数名称 | 说明 |
加法:运算符两边的值相加。 | |
减法:运算符左边减去运算符右边。 | |
乘法 - 把运算符两边的值相乘。 | |
除法 - 运算符左边除以运算符右边。 | |
取模 - 运算符左边除以运算符右边后得到的余数。 | |
判断运算符两边的值是否相等,如果相等则条件为真。 | |
判断运算符两边的值是否相等,如果不相等则条件为真。 | |
判断运算符两边的值是否相等,如果不相等则条件为真。 | |
判断运算符左边的值是否大于运算符右边的值,如果是则条件为真。 | |
判断运算符左边的值是否小于运算符右边的值,如果是则条件为真。 | |
判断运算符左边的值是否大于等于运算符右边的值,如果是则条件为真。 | |
判断运算符左边的值是否小于等于运算符右边的值,如果是则条件为真。 | |
IN 运算符用于把某个值与一系列指定列表的值进行比较。 | |
IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。 | |
BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。 | |
LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。%代表零个、一个或者多个字;_代表单个数字或者字符。 | |
NULL 运算符用于把某个值与 NULL 值进行比较,为空为真。 | |
NULL 运算符用于把某个值与 NULL 值进行比较,不为空为真。 | |
对比 x 和 y 是否相等。 | |
返回 x,y...中的最小值。 | |
返回 x,y...中的最大值。 | |
x 满足所有条件时,返回 true。 | |
x 满足任意一个条件时,返回 true。 |
估算函数
函数名称 | 说明 |
估算 KEY 列的唯一值的个数,估算结果标准误差为2.3%。 | |
对于 KEY 列进行正序排序,返回大约处于 percentage 位置的值。KEY 需为数值类型字段,percentage 取值范围为[0,1]。 |
同环比函数
函数名称 | 说明 |
对比当前时间周期内 x 的值与 n 秒之前时间周期内的值。 | |
对比当前时间周期内 x 的值与 n1 秒、n2 秒、n3 秒之前时间周期内的值。 | |
对比当前时间周期内 x 随时间的变化趋势与 n 秒之前时间周期内的变化趋势,time 为 x 变化趋势对应的时间列。 | |
对比当前时间周期内 x 随时间的变化趋势与 n1 秒、n2 秒、n3 秒之前时间周期内的变化趋势,time 为 x 变化趋势对应的时间列。 |
字符串函数
函数名称 | 说明 |
返回与输入参数指定的 ASCII 码位值匹配的字符。 | |
把 ASCII 码形式的字段值转换为 BigInt 类型。 | |
将多个字符串 KEY1,KEY2,KEY3,...,KEYN 拼接成一个字符串,与||连接符连接效果一致。 注意:任意字符串为 null 时,返回结果为 null,如需跳过 null,可使用 concat_ws。 | |
以 split_string 作为分隔符连接字符串 KEY1,KEY2,KEY3,...,KEYN,会跳过 KEY1,...,KEYN 中的 null 值。 | |
以 split_string 作为分隔符将数组内的元素连接为一个字符串。如果 split_string 为 null,则结果为 null,且会跳过数组中的 null 值。返回结果为 varchar 类型。
注意:此函数中 array(varchar)参数为一个数组,不是字符串。 | |
使用格式 format 对参数 args 进行格式化输出。 | |
将二进制字符串转为 UTF-8格式的字符串。非法的 UTF-8字符会被替换为 U+FFFD。 | |
将二进制字符串转为 UTF-8格式的字符串。非法的 UTF-8字符会被替换为 replace。 | |
返回 KEY1字符串与 KEY2字符串的汉明距离。注意两个字符串长度必须一致。 | |
计算字符串 KEY 的长度。 | |
返回 KEY1字符串与 KEY2字符串的编辑距离。 | |
将字符串 KEY 转换为小写形式。 | |
使用 padstring 对字符串KEY进行向左补全到size大小。如果 size 小于 KEY 的长度,则对字符串进行截断到 size 大小。size 必须为非负数,padstring 必须非空。 | |
移除字符串 KEY 左侧的空白字符。 | |
转化 string 为 NFC 标准格式。 | |
转化 string 为 form 格式。该函数 form 参数需要使用关键字(NFD,NFC,NFKD,NFKC),而非字符串。 | |
返回 substring 在字符串 KEY 中的位置,从1开始。如果没找到,则返回0。 | |
从字符串 KEY 中移除所有 substring 字符串 | |
将字符串 KEY 中所有 substring 替换为 replace。 | |
翻转字符串 KEY。 | |
使用 padstring 对字符串 KEY 进行向右补全到 size 大小。如果 size 小于 KEY 的长度,则对字符串进行截断到 size 大小。size 必须为非负数,padstring 必须非空。 | |
移除字符串 KEY 右侧的空白字符。 | |
使用指定的分隔符 delimiter 对字符串 KEY 进行分割,返回数组。 | |
使用指定的分隔符 delimiter 对字符串 KEY 进行分割,返回数组,数组长度最多为 limit。数组中最后一个元素始终为 key 中剩余的所有部分,limit 必须为正数。 | |
使用指定的分隔符 delimiter 对字符串 KEY 进行分割,返回数组中 index 位置的字符串。index 从1开始,如果 index 大于数组长度则返回 null。 | |
返回 substring 在字符串 KEY 中的位置,从1开始。如果没找到,则返回0。 | |
返回字符串 KEY 经 substring 分割后的第 instance 个实例在 string 中的位置。如果 instance 是负数,则从尾到头数。位置结果从1开始,如果没找到,则返回0。 | |
返回字符串中从 start 位置开始的剩余所有字符,位置从1开始算。如果 start 为负数,则是相对于尾部开始算。 | |
返回字符串从 start 开始的最多 length 长度的子串,位置从1开始算。如果 start 为负数,则是相对于尾部开始算。 | |
将 string 转化为 UTF-8格式的二进制字符串 varbinary。 | |
将 KEY 中出现在 from 中的字符全部替换为 to 中对应位置的字符。如果 from 包含重复字符,则只算第一个字符。如果 KEY 中没出现 from 中的字符,则 KEY 直接复制。如果 from 长度超过 to 的长度,则对应字符会被删除。 | |
删除字符串中前后的空白字符。 | |
将字符串 KEY 转换为大写形式。 | |
返回 word 的英语词根。 | |
返回 word 的 lang 语言词根。 |
日期和时间函数
函数名称 | 说明 |
返回当前日期,例如2022-12-28。 | |
返回当前时间,例如17:08:18。 | |
返回当前时间的时间戳(非 Unix 格式),例如2022-12-28T17:09:05.655+08:00[Asia/Shanghai]。 | |
返回当前时区,例如 Asia/Shanghai。 | |
在 timestamp 上加上 value 个时间单位(unit)。value为负数则为减法。unit 支持 millisecond,second,minute,hour,day,week,month,quarter,year。 | |
返回两个 timestamp 之间的时间差值。unit 支持 millisecond,second,minute,hour,day,week,month,quarter,year。 | |
把 TIMESTAMP 类型的日期时间转化为 format 格式的字符串,format 说明参见函数详细说明。 | |
把 format 格式的日期时间字符串 string 转化为 TIMESTAMP 类型,format 说明参见函数详细说明。 | |
将 timestamp 截断至 unit 单位,该函数常用于需要按照时间进行统计分析的场景。unit 支持unit,second,minute,hour,day,week,month,quarter,year。 | |
从 timestamp 中提取指定的时间部分(field),field 支持如下取值:year、quarter、month、week、day、day_of_month、day_of_week、dow、day_of_year、doy、year_of_week、yow、hour、minute、second。 | |
把 ISO8601格式的日期字符串转化为 DATE 类型的日期表达式。 | |
把 ISO8601格式的日期时间字符串转化为具有时区的 Timestamp 类型的日期时间表达式。 | |
把 Unix 时间戳转化为 TIMESTAMP 类型的日期时间表达式。 | |
把 Unix 时间戳转化为具有时区的 TIMESTAMP 类型的日期时间表达式。 | |
对时间列 time_column 按时间间隔 interval 分为多个组,并按该组对日志进行统计。time_column必须为毫秒的 LONG 类型 UNIX 时间戳或 TIMESTAMP 类型的日期时间表达式,interval支持单位为 SECOND(秒)、MINUTE(分)、HOUR(小时)、DAY(天)。 | |
将秒转换为易读的时间间隔字符串,例如1 minute, 36 seconds。 | |
返回 timestamp 所属月份最后一天。 | |
返回本地时间。 | |
返回本地的日期和时间。 | |
返回当前时间时间戳(非Unix格式)与 current_timestamp 函数同等用法,例如2022-12-28T17:09:05.655+08:00[Asia/Shanghai]。 | |
将字符串 string 转换为时间段表达式。 | |
对时间列 time_column 按时间间隔 interval 分为多个组,并按该组对日志进行统计,支持补全查询时间窗口内缺失的数据。time_column 必须为毫秒的 LONG 类型 UNIX 时间戳或 TIMESTAMP 类型的日期时间表达式,interval 支持单位为s(秒)、m(分)、h(小时)、d(天),format 为时间格式,推荐使用'%Y-%m-%dT%H:%i:%s+08:00',padding 为数据补全方式,详见函数详细说明。 | |
返回 TIMESTAMP 所属时区的小时偏移量。 | |
返回 TIMESTAMP 所属时区的分钟偏移量。 | |
将 DATE 类型或 TIMESTAMP 类型的日期和时间表达式转换为 ISO8601格式的日期和时间字符串。 | |
以毫秒为单位返回间隔的时间值。 | |
把 TIMESTAMP 类型的日期时间表达式转化为 Unix 时间戳。 |
IP 函数
函数名称 | 说明 |
获取目标 IP 地址的前缀。返回结果为子网掩码格式 IP 地址。 | |
获取 IP 网段中的最大 IP 地址。返回结果为 IP 地址。 | |
获取 IP 网段中的最小 IP 地址。返回结果为 IP 地址。 | |
获取 IP 网段范围。返回结果为 Array 类型的 IP 地址。 | |
分析目标 IP 地址所属城市。 | |
分析目标 IP 地址所属城市的代码。返回结果为城市的行政区规划代码,暂不支持中国台湾及国外城市。 | |
分析目标 IP 地址所属城市的经纬度。返回结果为城市的经纬度,暂不支持中国台湾及国外城市。 | |
分析目标 IP 地址所属国家或地区。 | |
分析目标 IP 地址所属国家或地区的代码。 | |
分析目标 IP 地址所属国家或地区的经纬度。 | |
判断目标 IP 地址是内网地址还是外网地址。内网则返回 intranet,外网则返回 internet,非法 IP 地址则返回 invalid。 | |
分析目标 IP 地址对应的网络运营商。 | |
分析目标 IP 地址所属省份。 | |
分析目标 IP 地址所属省份的代码。 | |
分析目标 IP 地址所属省份的经纬度。 | |
判断目标网段是否为某网段的子网。 | |
判断目标 IP 地址是否在某网段内。 |
URL 函数
函数名称 | 说明 |
对 URL 进行解码。 | |
对 KEY 进行 URL 转义编码。 | |
提取出 URL 中的 fragment。 | |
提取出 URL 中的 host。 | |
提取出 URL 中的 query 对应的参数值。 | |
提取出 URL 中的 path。 | |
提取出 URL 中的端口。 | |
提取出 URL 中的协议。 | |
提取出 URL 中的 query。 |
JSON 函数
函数名称 | 说明 |
判断 JSON 数组中是否包含某个值。 | |
获取 JSON 数组中某个下标对应的元素。 | |
计算 JSON 数组中元素的数量。x 不是 JSON 数组时,返回 null。 | |
使用 json_path 从 JSON 对象或 JSON 数组中提取一组 JSON 值(数组或对象),不支持需要遍历数组元素的 json_path 语法,例如 $.store.book[*].author。 | |
使用 json_path 从JSON 对象或 JSON 数组中提取一组标量值(字符串、整数或布尔值),不支持需要遍历数组元素的 json_path 语法,例如 $.store.book[*].author。 | |
将 JSON 类型转化成字符串类型。 | |
将字符串类型转化成 JSON 类型,判断是否符合 JSON 格式。 | |
计算 JSON 对象或 JSON 数组中元素的数量。 |
正则式函数
函数名称 | 说明 |
提取并返回目标字符串 KEY 中符合正则表达式的第一个子串。 | |
提取目标字符串 KEY 中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。n 代表第 n 个捕获组,n 为从1开始的整数。 | |
提取目标字符串 KEY 中符合正则表达式的子串,并返回所有子串的合集。 | |
提取目标字符串 KEY 中符合正则表达式的子串,并返回与目标捕获组匹配的子串合集。n 代表第 n 个捕获组,n 为从1开始的整数。 | |
判断目标字符串 KEY 是否符合正则表达式。 | |
替换目标字符串 KEY 中符合正则表达式的子串,返回被替换后的字符串。 | |
删除目标字符串 KEY 中符合正则表达式的子串。 | |
使用正则表达式分割目标字符串,返回被分割后的子串合集。 |
数组函数
函数名称 | 说明 |
以数组形式返回 KEY 中的所有值。 | |
删除数组中重复的元素,仅保留唯一值。 | |
计算两个数组的差集。 | |
计算两个数组的交集。 | |
使用指定的连接符 delimiter 将数组中的元素拼接为一个字符串。如果数组中包含 null 元素,则 null 元素将被忽略。 | |
使用指定的连接符将数组中的元素拼接为一个字符串。如果数组中包含 null 元素,则 null 元素将被替换为 null_replacement。 | |
获取数组中的最大值。 | |
获取数组中的最小值。 | |
获取指定元素的下标,下标从1开始。如果指定元素不存在,则返回0。 | |
删除数组中指定的元素。 | |
对数组元素进行升序排序。 | |
计算两个数组的并集。 | |
计算数组中元素的个数。 | |
判断数组中是否包含指定元素。如果包含,则返回 true。 | |
返回数组中的第 y 个元素,y 从1开始。 | |
和 Lambda 表达式结合,用于过滤数组中的元素。只返回满足 Lambda 表达式的元素。 | |
将二维数组转换为一维数组。 | |
根据 Lambda 表达式中的定义,对数组中的各个元素进行相加计算,然后返回计算结果。 | |
通过指定的起始值x返回一个数组,其元素为x~y内一组连续且递增的值。 | |
通过指定的起始值x返回一个数组,其元素为x~y内一组连续且递增的值(间隔为step)。 | |
对数组元素进行随机排列。 | |
返回数组x的子集,start指定索引开始的位置,length指定子集中元素的个数。 | |
将 Lambda 表达式应用到数组的每个元素中。 | |
将多个数组合并为一个二维数组,且各个数组中下标相同的元素组成一个新的数组。 | |
根据 Lambda 表达式中的定义将两个数组合并为一个数组。 |
类型转换函数
函数名称 | 说明 |
转换字段 KEY 的数据类型,如果某个值转换失败,将终止整个查询,如需跳过失败请使用 try_cast。type 可选值为 bigint、varchar、double、boolean、timestamp、decimal、array 或 map。 | |
转换字段 KEY 的数据类型,如果某个值转换失败,该值返回null,并跳过该值继续处理 type 可选值为 bigint、varchar、double、boolean、timestamp、decimal、array 或 map。 | |
返回 x 的数据类型。 |
条件表达式
函数名称 | 说明 |
通过条件判断,对数据进行归类。 | |
获取多个表达式中的第一个非 NULL 值。 | |
如果 condition 为 true,则返回 result1,否则返回 null。 | |
如果 condition 为 true,则返回 result1,否则返回 result2。 | |
比较两个表达式的值是否相等。如果相等,则返回 null,否则返回第一个表达式的值。 | |
捕获异常信息,使得系统继续执行查询和分析操作。 |
数学计算函数
函数名称 | 说明 |
计算数字的绝对值。 | |
计算数字的反余弦。 | |
计算数字的反正弦。 | |
计算数字的反正切。 | |
计算两个数字相除的结果的反正切。 | |
计算数字的立方根。 | |
向上取整数。 | |
计算数字的余弦。 | |
计算数字的双曲余弦。 | |
计算向量 x 和 y 之间的余弦相似度。 | |
将弧度转换为度。 | |
计算数字的自然对数。 | |
返回自然对数的指数。 | |
向下取整数。 | |
根据 BASE 编码将字符串string转为radix进制的数字。 | |
返回正无穷的数值。 | |
判断目标值 KEY是否为 NaN(Not a Number)。 | |
计算数字的自然对数。 | |
计算以 b 为底的对数。 | |
计算以10为底的对数。 | |
计算以2为底的对数。 | |
用于计算 x 与 y 相除的余数。 | |
返回一个 NaN 值(Not a Number)。 | |
返回包含14个小数位的 π 值。 | |
计算数字的 b 次幂。 | |
将度转换为弧度。 | |
返回随机数。 | |
返回[0,n)之间的随机数。 | |
返回 double 四舍五入后的整数。 | |
保留 double 的 n 位小数。 | |
返回number的符号,通过1、0、-1表示。 | |
计算数字的正弦。 | |
计算数字的平方根。 | |
计算数字的正切。 | |
计算数字的双曲正切。 | |
根据 BASE 编码将x转为radix进制的字符串。 | |
截断数字的小数部分。 | |
使用数组(bins)指定 Bucket 的范围,返回 number 所属的 Bucket。 | |
将一段数值(bound1 - bound2)划分成大小相同的 n 个 Bucket,返回 number 所属的 Bucket。 |
数学统计函数
函数名称 | 说明 |
计算两列的相关度。计算结果范围为[0,1]。 | |
计算两列的总体协方差。 | |
计算两列的样本协方差。 | |
返回输入值的线性回归截距。key1 是依赖值,key2 是独立值。 | |
返回输入值的线性回归斜率。key1 是依赖值,key2 是独立值。 | |
计算 key 列的样本标准差。与 stddev_samp 函数同义。 | |
返回 key 列的总体标准差。 | |
计算 key 列的样本标准差。 | |
计算 key 列的总体方差。 | |
计算 key 列的样本方差。 | |
计算 key 列的样本方差,与 var_samp 函数同义。 |
二进制字符串函数
函数名称 | 说明 |
把 base64 转换成二进制字符串。 | |
从 URL 安全的 base64 转化成二进制字符串。 | |
把大端表示的二进制字符串转化成数字。 | |
从十六进制转化成二进制。 | |
计算二进制字符串的 md5。 | |
计算二进制字符串的 sha1。 | |
计算二进制字符串的 sha256 hash。 | |
计算二进制字符串的 sha512 hash。 | |
把二进制字符串转换成 base64。 | |
把二进制字符串转化成 URL 安全的 base64。 | |
把数字转化成大端表示的二进制。 | |
把二进制字符串转化成十六进制表示。 | |
计算二进制字符串的 xxhash64。 |
位运算函数
函数名称 | 说明 |
统计 x 的二进制表示中1的个数。 | |
以二进制的形式对 x,y 进行与运算。 | |
以二进制的形式对 x 的所有位进行取反运算。 | |
以二进制形式对 x,y 进行或运算。 | |
以二进制形式对 x,y 进行异或运算。 |