You need to enable JavaScript to run this app.
导航

常用函数介绍

最近更新时间2024.05.07 14:46:43

首次发布时间2021.02.23 10:42:00

1. 概述

产品支持多种函数,包括数值、文本、时间、数组等,在使用过程中,可以在数据集、仪表盘中通过添加公式/函数的方式,进行多样化的计算。由于,产品提供基于 ClickHouse 的数据导入和查询服务,因此本文仅介绍相关 ClickHouse 函数常用语法。
更多参考资料:
ClickHouse 官方函数文档
LOD 表达式
表计算函数

2. 聚合函数

2.1 常用函数快速入门

聚合函数用于快速根据想要的逻辑进行指标聚合计算,如求和、计数等。

2.1.1 计数

格式:count(xxx),即对 xxx 计数
示例:

字段A

1

1

3

4

计算count(字段A),得到聚合结果 4。若想去重计数,可使用count(distinct 字段A),则得到结果 3。

2.1.2 求和

格式:sum(xxx),即对 xxx 求和
示例:

字段A

1

1

3

4

计算sum(字段A),得到聚合结果 9。
扩展: SUM(字段A/字段B)与 SUM(字段A)/SUM(字段B)的区别,我们用 2 个案例说明

  • 案例一:如果有一张明细数据如下的表,当我们将"维度"作为维度,对 SUM(字段A/字段B) 和 SUM(字段A)/SUM(字段B) 分别作聚合运算时

    维度

    字段A

    字段B

    字段A/字段B

    维度项 1

    1

    2

    0.5

    维度项 1

    1

    2

    0.5

    维度项 1

    2

    2

    1

    维度项 1

    1

    4

    0.25

    维度项 2

    3

    3

    1

    维度项 2

    2

    4

    0.5

    维度项 2

    1

    5

    0.2

    聚合结果:
    SUM(字段A/字段B)计算的是原始数据中 A/B 值之和,为先除后加;而SUM(字段A)/SUM(字段B)计算的是字段A 与字段B 总值之商,为先加后除;得到的结果也可能大相径庭。

    维度

    SUM(字段A)

    SUM(字段B)

    SUM(字段A/字段B)

    SUM(字段A)/SUM(字段B)

    维度项 1

    5

    10

    2.25

    0.5

    维度项 2

    6

    12

    1.7

    0.5

  • 案例二: 与产品的合计功能结合应用
    如果我们将表达式改为 SUM(字段A)/SUM(字段B) ,使用分析-合计功能中的 自动 ,则计算结果为 SUM(字段A)/SUM(字段B) ,即对 A、B 分别求和后,再作除法。一般用于统计整体的转化率等。

    维度

    字段A

    字段B

    字段A/字段B

    合计

    3

    10

    0.3

    维度项 1

    1

    5

    0.2

    维度项 2

    2

    5

    0.4

2.1.3求平均

格式:average(xxx),即对 xxx 求均值
示例:

字段A

1

1

3

4

计算 average(字段A),得到聚合结果 2.25。

2.1.4 求最大/最小值

格式:最大值 max(xxx),最小值 min(xxx)
示例:

字段A

1

1

3

4

计算 max(字段A),得到 4;计算 min(字段A),得到 1。

2.1.5 分位数

格式:quantile(level)(xxx)或 quantileExact(level)(xxx),即返回 xxx 中 level 分位数。后者为精确值,前者有一定误差,但性能更优。
示例:

字段A

1

1

3

4

计算 quantile(0.75)(字段A),得到字段A 的 75% 分位数 3。

2.2 功能详解

函数名称

函数格式

用途

示例

avg

avg(x)

返回表达式中所有值的平均值。只能用于数值字段

avg( profit ) 返回利润平均值

max

max(x)

返回表达式中所有值的最大值。只能用于数值字段

max( profit ) 返回利润最大值

min

min(x)

返回表达式中所有值的最小值。只能用于数值字段

min( profit ) 返回利润最小值

count

count(x)

计数,求行数

count( p_date ) 返回总天数

sum

sum(x)

返回表达式中所有值的总和。只能用于数值字段

sum( profit ) 返回利润总和

uniqCombined

uniqCombined(HLL_precision)(x[, ...])

计算不同参数值的近似数目。对于大集合(2 亿或更多元素),由于散列函数的选择不好,估计误差将大于理论值。

quantile

quantile(level)(x)

返回表达式中所有值的分位数。只能用于数值字段。level 范围 0-1

quantile(0.5)(x) 返回 x 的 0.5 分位数

uniq

uniq(x)

计数不同。与 count(distinct) 作用相同,精确度上存在 0.5% 的误差。如需精确值,请使用count(distinct),但其查询耗时较长,可能因为超时而查不出数,不建议使用。

argMax

argMax(arg,val)

根据字段 val 计算其最大值. 然后取其最大值所在记录行字段Arg 的值

groupArray

groupArray(n)(fieldname)

取前 n 条记录 . 结果为一个数组

any

any(x)

选择第一个遇到的值

quantileExact

quantileExact(level)(x)

返回表达式中所有值的分位数。只能用于数值字段。level 范围 0-1。 与 quantile 作用相同,是精确查询。使用 quantileExact 时查询耗时较长,可能因为超时而查不出数,不建议使用。

quantileExact(0.5)(x) 返回 x 的 0.5 分位数

3. 日期函数

3.1 常用函数快速入门

日期函数用于作时间格式转换、时间处理、获取指定日期等。

3.1.1 将文本转换为时间或日期

格式:

  • toDate(xxx)和 to_date(xxx),将 yyyymmdd 或 yyyy-mm-dd 样式的字符串字段转换成日期格式
  • toDateTime(xxx),将 yyyy-mm-dd hh:mm:ss 样式的字符串转换成时间格式
  • toDateOrNull(xxx) 和 toDateTimeOrNull(xxx),功能与上述 1 和 2 相同,适用于字段中存在脏数据的情况,会将脏数据转换成空值

示例:

字段A

toDate(字段A)

toDateTime(字段A)

2020/12/21

2020/12/21

2020/12/21 0:00

20201221

2020/12/21

2020/12/21 0:00

2020/12/21 18:00

2020/12/21

2020/12/21 18:00

字段A为字符串类型,toDate(字段A)和 toDateTime(字段A)为时间格式

3.1.2 时间与时间戳相互转换

格式:将时间或文本类型的时间转换成时间戳 toUnixTimestamp(xxx),即将 yyyy-mm-dd hh:mm:ss 转换成时间戳
示例:

字段A

toUnixTimestamp(字段A)

扩展:toDateTime(toUnixTimestamp(字段A)+28800)

2020/12/21 18:00

1608544800

2020/12/22 2:00

扩展:对转换后的时间戳,加上 8 小时对应的时间戳差值 28800,完成从 UTC+0 到 UTC+8 的转换,然后再通过 toDateTime 函数转换成可读性更强的时间格式。

3.1.3 返回当前日期

格式:now(),生成一个随系统实时时间变化的动态参数
示例:现在时间是 2020-12-21 18:00:00,写下 now()作为一个字段,则这个字段当前值为 2020-12-21 18:00:00,一小时后为 2020-12-21 19:00:00

3.1.4 返回本周周一的日期

格式:toMonday(xx),对日期字段向前取到本周一对应的日期
示例:

字段A

toMonday(字段A)

2020/12/22

2020/12/21

3.2 功能详解

函数名称

函数格式

用途

示例

toDateTime

toDateTime(x)

将字符型时间日期转化为时间日期型

toDateTime('2018-12-24 10:10:00')

toStartOfFiveMinute

toStartOfFiveMinute(x)

截取时间日期到最近的 5 的倍数分钟(之后归零),返回日期

toStartOfFiveMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:10:00

now

now()

生成当前时间日期

now( ) 返回 2018-12-13 10:10:12

toStartOfFifteenMinutes

toStartOfFifteenMinutes(x)

截取时间日期到最近的 15 的倍数分钟(之后归零),返回日期

toStartOfFifteenMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:00:00

toStartOfInterval

toStartOfInterval(time_or_data, INTERVAL x unit [, time_zone])

这是名为 toStartOf*的所有函数的通用函数。例如,toStartOfInterval(t,INTERVAL 1 year)返回与 toStartOfYear(t)相同的结果,toStartOfInterval(t,INTERVAL 1 month)返回与 toStartOfMonth(t)相同的结果, toStartOfInterval(t,INTERVAL 1 day)返回与 toStartOfDay(t)相同的结果, toStartOfInterval(t,INTERVAL 15 minute)返回与 toStartOfFifteenMinutes(t)相同的结果。

toStartOfInterval(toDateTime('2019-10-10 09:09:20'),INTERVAL 1 year) 返回 2019-01-01

toIntervalDay

toIntervalDay(x)

日期转化为时间戳,天级别

toIntervalDay(toDateTime('2019-08-12 11:12:13')) 返回 1565579533

toIntervalMinute

toIntervalMinute(x)

日期转化为时间戳,分钟级别

toIntervalMinute(toDateTime('2019-08-14 11:12:13')) 返回 1565579533

toIntervalHour

toIntervalHour(x)

日期转化为时间戳,小时级别

toIntervalHour(toDateTime('2019-08-14 11:12:13')) 返回 1565579533

toMonday

toMonday(x)

将 Date 或 DateTime 向前取整到本周的星期一。 返回 Date 类型。

toMonday(toDateTime('2019-08-14 11:12:13')) 返回 2019-08-12

toStartOfHour

toStartOfHour(x)

将DateTime向前取整到当前小时的开始。

toStartOfHour(toDateTime('2018-12-11 11:12:13')) 返回 11

today

today( )

生成今天的日期

today( ) 返回 2018-12-13

toHour

toHour(x)

取时间日期的小时

toHour(toDateTime('2018-12-11 11:12:13')) 返回 11

toStartOfTenMinutes

toStartOfTenMinutes(x)

将 DateTime 以十分钟为单位向前取整到最接近的时间点

toStartOfTenMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:00:00

toStartOfDay

toStartOfMinute(string date time)

将 DateTime 向前取整到当日的开始。

toYear

toYear(string date)

返回日期中的年

toRelativeWeekNum

toRelativeWeekNum(date)

将 Date 或 DateTime 转换为星期数,从过去的某个固定时间点开始。

toMonth

toMonth(string date)

返回日期中的月

toStartOfMinute

toStartOfMinute( )

截取时间日期到分钟(之后归零),返回日期

toStartOfMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:12:00

toUnixTimestamp

toUnixTimestamp( )

将 DateTime 转换为 unix 时间戳

addDays

addDays(date_time,int)

函数将一段时间间隔添加到 Date/DateTime,然后返回 Date/DateTim

toRelativeYearNum

toRelativeYearNum(date_time)

将 Date 或 DateTime 转换为年份的编号,从过去的某个固定时间点开始

year

year(Date/DateTime/String date)

返回日期中的年

year(toDateTime('2018-12-11 11:12:13'))返回 2018

month

month(Date/DateTime/String date)

返回日期中的月

month(toDateTime('2018-12-11 11:12:13'))返回 12

quarter

quarter(Date/DateTime/String date)

返回日期中的季度数

quarter(toDateTime('2018-12-11 11:12:13'))返回 12

day

day(Date/DateTime/String)

返回 dayOfMonth

day('2019-09-12') 返回 12

last_day

last_day(Date/DateTime/String date)

返回日期所在的月份的最后一天

last_day(toDateTime('2018-12-11 11:12:13'))返回 2018-12-31

next_day

next_day(Date/DateTime/String date, string day_of_week)

返回日期中的下一个星期day_of_week

next_day(toDate('2015-01-14'), 'TU') 返回 2015-01-20

dateDiff

dateDiff(Date/DateTime date1, Date/DateTime date2 [, String timezone]); dateDiff(String unit, Date/DateTime date1, Date/DateTime date2 [, String timezone])

返回两个日期的差值

dateDiff(now(), yesterday())返回 -1

date_sub

date_sub (string/Date/DateTime startdate, int days)

返回start_time 前 days 天的日期/时间

date_sub('2019-09-08', 1) 返回'2019-09-07'

date_add

date_add (string/Date/DateTime startdate, int days)

返回start_time 后 days 天的日期/时间

date_add('2019-09-08', 1) 返回'2019-09-09'

from_unixtime

from_unixtime(Date/DateTime/UInt32 date, String parttern[, String timezone])

将日期或时间戳转换为 pattern 形式的字符串

from_unixtime(toDateTime('2019-09-09 09:00:00'), 'time: %F %T', 'Asia/Shanghai') 返回'time: 2019-09-09 09:00:00'

to_date,toDate

to_date(String/UInt16 date)

将字符串/自 1970-01-01 起的第 date 天转换为日期类型

toDate('20190909') 返回'2019-09-09'

date_format

date_format(Date/DateTime/String, String pattern)

将日期按指定格式输出

date_format('2019-09-09', 'yyyy') 返回 '2019'

unix_timestamp

unix_timestamp(Date/DateTime/String)

将日期转换为 timestamp

unix_timestamp(toDateTime('2019-09-09 09:00:00'), 'time: %F %T', 'Asia/Shanghai') 返回'time: 2019-09-09 09:00:00'

toWeek

toWeek(date[,mode])

返回日期所在的周, 范围[0, 53]

toWeek(toDate('2019-12-06'), 3) 返回 49

toDayOfWeek

todayofweek(date)

返回日期所在的星期,范围[1,7]

todayofweek('2020-01-01') 返回 3

4. 类型转换函数

4.1 常用函数快速入门

类型转换函数用于对字段进行类型转换,如文本与数字转换。

4.1.1 强制转换任意类型

格式:cast(xxx,'类型'),将 xxx 转化为特定类型
示例:
cast(字段A,'string')则将字段A 转化成了字符串格式

4.1.2 转换成字符串(文本)

格式:toString(xxx),将字段 xxx 转换为字符串格式,可以把数字、字符、日期等类型字段转换掉。
示例:

字段A

toString(字段A)

143876768892010

143876768892010

转换前字段A 为数值格式,由于较长在分析时容易被科学计数;转换为字符串后则能稳定保存。

4.1.3 转换成整数值

格式:toInt64(xxx),将字段 xxx 转换为整数,xxx 中只能有数字。

字段A

toInt64(字段A)

143876768892010

143876768892010

123a

转换失败

4.2 功能详解

函数名称

函数格式

用途

示例

cast

cast(X, 'Y')

通用强转函数,将名称为X的任意类型数据,转化成 Y 格式

将 int 类型的 uid 转换为 String 类型 CAST (uid, 'String')

toString

toString(x)

将数值型、字符型、日期等转化为字符型

toString('2018-12-24') 返回 2018-12-24

toInt64

toInt64(x)

将数据类型转化为 int 格式(64 个字节)

toInt64(123.883) 返回 123

toUInt8OrZero

toUInt8OrZero(x)

将无符号整数字符型转化为整数型,否则返回 0

toUInt8OrZero('123.12') 返回 0

toDateOrZero

toDateOrZero(x)

将数据类型转化为 DATE 格式,否则返回 0

toDateOrZero(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11

toUInt16OrZero

toUInt16OrZero(x)

将无符号整数字符型转化为整数型,否则返回 0

toUInt8OrZero('123') 返回 123

toUInt64OrZero

toUInt64OrZero(x)

将数据类型转化为 int 格式(64 个字节),失败则为 0

toUInt64OrZero('123') 返回 123

toDateOrNull

toDateOrNull(a)

将 a 的数据类型转成 date or null

toUInt32OrZero

toUInt32OrZero(x)

将数据类型转化为 int 格式(32 个字节),失败则为 0

toFloat32OrZero

toFloat32OrZero( )

将数值字符串型转化为数值型

toFloat32OrZero(‘-123’) 返回-123

toIntervalMonth

toIntervalMonth( )

将数字类型参数转换为 Interval 类型(时间区间)

toInt32

toInt32(a)

将 a 的数据类型转成 int32

toDateTimeOrNull

toDateTimeOrNull(a)

将 a 的数据类型转成 datetime or null

toFloat64

toFloat64(a)

将 a 的数据类型转成 float64

toUInt8

toUInt8(a)

将 a 的数据类型转成 Uint8

toFloat64OrZero

toFloat64OrZero(a)

将 a 的数据类型转成 float or zero

toUInt32

toUInt32(a)

将 a 的数据类型转成 Uint32

parseDateTimeBestEffort

parseDateTimeBestEffort()

将数字类型参数解析为 Date 或 DateTime 类型。 与 toDate 和 toDateTime 不同,parseDateTimeBestEffort 可以进行更复杂的日期格式。

parseDateTimeBestEffortOrNull

parseDateTimeBestEffortOrNull()

将数字类型参数解析为 Date 或 DateTime 类型,遇到无法处理的日期格式时返回 null

parseDateTimeBestEffortOrZero

parseDateTimeBestEffortOrZero()

将数字类型参数解析为 Date 或 DateTime 类型,遇到无法处理的日期格式时返回零 Date 或零 DateTime

5. 字符串函数

5.1 常用函数快速入门

字符串函数用于对文本作拼接或截取。

5.1.1 字符串拼接

格式:concat(xxx,xxx,xxx……),将多个字段,不带分隔符地拼接在一起
示例:concat(字段A,字段B,字段C)得到:门前大桥下,123

字段A

字段B

字段C

门前大桥下

123

5.1.2 字符串截取

格式:substr(xxx,偏移量 x,长度 y)或substring(xxx,偏移量 x,长度 y),意为对字符串字段 xxx 进行截取,从第 x 位开始截取长度为 y 的字符串。
示例:

字段A

substr(字段A,1,10)

2020/12/22 18:00

2020/12/21

substr(字段A,1,10)则为对字段A 从第一位开始向右截取 10 位,最终得到结果如上。
扩展: concat 与 substr 的结合
concat(字段A,'的第二项得分为',substr(字段B,3,1))得到结果:小明的第二项得分为 9

字段A

字段B

小明

8,9,8

5.1.3 返回字符串长度

格式:length(xxx),计算字符串类型字段 xxx 的长度
示例:

字段A

length(字段A)

2020/12/22 18:00

19

5.2 功能详解

函数名称

函数格式

用途

示例

substring

substring(s, offset, length)

字符串截取

substring('123abcABC', 2, 3) 返回 23a

empty

empty(x)

判断字符串是空为 1,否则为 0

empty('123a') 返回 0

length

length(x)

返回字符串的长度

length('123a') 返回 4

extractAll

extractAll(haystack,pattern)

返回匹配到的所有子串,输出列表

extractAll('iioomAj12123124OOBJ123B', '\d+') 返回 [12123124,123]

splitByChar

splitByChar(separator, s)

以单个字符分割字符串

concat

concat(s1, s2, ...)

将参数中的多个字符串拼接,不带分隔符

concat('123', 'abc', 'ABC') 返回 123abcABC

lower

lower(string)

将字符串转为小写

char_length

char_length(string)

假定字符串以 UTF-8 编码组成的文本,返回此字符串的 Unicode 字符长度。如果传入的字符串不是 UTF-8 编码,则函数可能返回一个预期外的值(不会抛出异常)

startsWith

startsWith(s, prefix)

返回是否以指定的前缀开头。如果字符串以指定的前缀开头,则返回 1,否则返回 0

replaceRegexpAll

replaceRegexpAll(haystack,pattern,replacement)

正则匹配替换所有匹配到的pattern

replaceOne('asd123cbbj464sd', 'sd', '-') 返回 a-123cbbj464-

replaceRegexpOne

replaceRegexpOne(haystack, pattern, replacement)

使用‘pattern’正则表达式替换。

replaceAll

replaceAll(haystack, pattern, replacement)

用‘replacement’子串替换‘haystack’中出现的所有‘pattern’子串

split

split(string str, string pat)

按照 pat 字符串分割 str,会返回分割后的字符串数组

split('abc', 'b') 返回['a', 'c']

concat_ws

concat_ws(String delimiter, String str1, String str2, ...)

返回以'delimiter'连接的字符串

concat_ws('_', 'abc', 'def') 返回 'abc_def'

substring

substring(String str, int start, int len),substr(String str, int start, int len)

返回第 start 起长度为 len 的字符串

substring('abc', 2); 返回'bc'

lpad,rpad

lpad(String, len, pad_str)

将 str 进行用 pad 进行左补足到 len 位

lpad('abcd', 10, '.') 返回 '......abcd'

regexp_replace

regexp_replace(String str, String str1, String str2)

返回将 str 中的 str1 转换为 str2 后的结果, 支持 re2 正则表达式

regexp_replace('world.', '^', 'hello ') 返回'hello world.'

6. 条件函数

6.1 常用函数快速入门

根据设定的条件,返回对应的值。如 a>1 则返回1,a<1 则返回 0,需要通过条件函数来实现。

6.1.1 if 函数

格式:if(条件,a,b),当条件正确时,返回值 a,当条件错误时,返回值 b
示例:

字段A

if(字段A>0,'正数','负数')

200

正数

6.1.2 case when 函数

格式:
case
when 条件1 then 结果1
when 条件2 then 结果2
……
else 结果n
end
这个函数比较长,但结构简单。从上往下依次核对条件,当条件1 符合时,则返回结果 1,不再往下核对。如果所有条件均不符合,则返回结果 n。
示例:

字段A

case when 字段A>300 then '>300' when 字段A>200 then '(200,300]' else null end

250

(200,300]

105

350

300

6.2 功能详解

函数名称

函数格式

用途

示例

multiIf

multiIf(cond_1, then_1, cond_2, then_2...else)

允许您在查询中更紧凑地编写CASE运算符 参数: *cond_N — 函数返回then_N的条件。 *then_N — 执行时函数的结果。 *else — 如果没有满足任何条件,则为函数的结果。

multiIf(1 > 2, '正确', 2 < 0, '正确', '错误') 返回 错误

if

if(cond, then, else), cond ? operator then : else

如果cond != 0则返回then,如果cond = 0则返回else。 cond必须是UInt8类型,then和else必须存在最低的共同类型。

if(1 > 2, '正确', '错误') 返回 错误

case

CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END

如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e

7. 用户名函数

用户名函数并非 ClickHouse 官方函数,而是与项目用户信息相结合,用于返回当前使用用户的指定信息的函数。
USERNAME()可返回当前用户的用户名,如下所示。该函数也可与其他函数组合使用
图片

8. JSON 函数

函数名称

函数格式

用途

示例

visitParamExtractInt

visitParamExtractUInt(params, name)

将名为“name”的字段的值解析成 UInt64。如果这是一个字符串字段,函数将尝试从字符串的开头解析一个数字。如果该字段不存在,或无法从它中解析到数字,则返回0。

visitParamExtractFloat

visitParamExtractFloat(params, name)

将名为“name”的字段的值解析成 float64

visitParamExtractBool

visitParamExtractBool(params, name)

解析一个 true/false 值. 结果是 UInt8

visitParamHas

visitParamHas(params, name)

检查是否存在“name”名称的字段

visitParamExtractRaw

visitParamExtractRaw(params, name)

返回字段的值,包含空格符。

visitParamExtractRaw('{"abc":{"def":[1,2,3]}}', 'abc') = '{"def":[1,2,3]}'

get_json_object

get_json_object(string json_string, string path)

返回 JSON 中 path 指定的元素

get_json_object('{"n_s" : [{"ac":"abc","xz":"xz"}, {"def":"def"}], "n_i" : [1, 23]}', '$.n_s[0].ac'); 返回'abc'

9. 数学函数

函数名称

函数格式

用途

示例

power

power(x, y)

接受 x 和 y 两个参数。返回 x 的 y 次方

pow

pow(x, y)

接受 x 和 y 两个参数。返回 x 的 y 次方。

pow(2, 3) 返回 8

sqrt

sqrt(x)

接受一个数值类型的参数并返回它的平方根。

sqrt(4) 返回 2

10. Nullable 处理函数

函数名称

函数格式

用途

示例

isNotNull

isNotNull(x)

检查参数是否不为 NULL. 是返回 1,否返回 0

sNotNull('abc') 返回 1

isNull

isNull(x)

检查参数是否为 NULL,是 NULL 返回 1,不是返回 0

isNull(null) 返回 1

coalesce

coalesce(x,...)

检查从左到右是否传递了“NULL”参数并返回第一个非'NULL参数。

coalesce(null,null,a,b,null) 返回 a

assumeNotNull

assumeNotNull( )

将 Nullable 类型的值转换为非 Nullable 类型的值

11. 进制转换函数

函数名称

函数格式

用途

示例

conv

conv(String/Int num, Int from_base, Int to_base)

进制转换

conv('10',10,2) 返回'1010'

bin

bin(Int/DateTime/String)

转换为二进制数

bin(10) 返回'1010'

12. Hash 函数

函数名称

函数格式

用途

cityHash64

cityHash64O()

计算任意数量字符串的 CityHash64 或使用特定实现的 Hash 函数计算任意数量其他类型的 Hash

intHash64

intHash64( )

从任何类型的整数计算 64 位哈希码

13. URL 函数

函数名称

函数格式

用途

示例

domain

domain(x)

返回URL的域名

domain('http://www.baidu.com.cn') 返回 www.baidu.com.cn

cutToFirstSignificantSubdomain

cutToFirstSignificantSubdomain( )

返回包含顶级域名与第一个有效子域名之间的内容

cutToFirstSignificantSubdomain('https://news.yandex.com.tr/')) = 'yandex.com.tr'

parse_url

parse_url(String url, String name)

返回 url 中为 name 的部分, 无法解析返回空字符串

parse_url('https://bytedance.feishu.cn/space/xx#PN78WD', 'PROTOCOL') 返回 https

14. Map 函数

函数名称

函数格式

用途

示例

map key

[map型字段名]{'[待提取字段名]'}

从 map 类型的字段中提取某一字段数据

select deductions{'Federal Taxes'} from employees limit 1;

map

map(KeyType k1, ValueType v1, KeyType k2, ValueType v2 ...)

构造 map 类型数据

map('a', 'b', 'c', 'd') 返回 {'a': 'b', 'c', 'd'}

str_to_map

map(String value, String kv_delimiter, String item_delimiter)

String 转 map 类型

str_to_map('a:b,c:d', ',', ':') 返回 {'a': 'b', 'c': 'd'}

十四、数组函数

函数名称

函数格式

用途

示例

arrayConcat

arrayConcat(array)

合并参数中传递的所有数组。

SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res ┌─res─────┐ │ [1,2,3,4,5,6] │ └───────┘

notEmpty

notEmpty()

对于空字符串返回 0,对于非空字符串返回 1

十五、ArrayJoin函数

函数名称

函数格式

用途

示例

arrayJoin

arrayJoin(array)

此函数将数组作为参数,并将该行在结果集中复制数组元素个数。 除了应用此函数的列中的值之外,简单地复制列中的所有值; 它被替换为相应的数组值。

SELECT arrayJoin([1, 2, 3] AS src) AS dst, 'Hello', src ┌dst-┬'Hello'-┬─src──┐ │ 1 │ Hello │ [1,2,3] │ │ 2 │ Hello │ [1,2,3] │ │ 3 │ Hello │ [1,2,3] │ └ ─ ┴ ─ ─ ┴─ ───┘

十六、取模函数

函数名称

函数格式

用途

示例

pmod

pmod(Int a, Int b)

浮点数会转换为整数取模, 如有特殊需求, 可在后期支持

pmod(10, 3) 返回 1

十七、取整函数

函数名称

函数格式

用途

示例

round

round(x,[N])

将值取整到指定的小数位数。 该函数按顺序返回最近的数字。如果给定数字包含多个最近数字,则函数返回其中最接近偶数的数字(银行的取整方式)。

round(123.883, 1) 返回 123.9

十八、算术函数

函数名称

函数格式

用途

abs

abs(a)

计算数字(a)的绝对值

十九、位操作函数

函数名称

函数格式

用途

bitAnd

bitAnd(a, b)

结果类型是一个整数,其位数等于其参数的最大位。如果至少有一个参数为有符数字,则结果为有符数字。如果参数是浮点数,则将其强制转换为 Int64

二十、随机函数

函数名称

函数格式

用途

rand

rand( )

返回一个 UInt32 类型的随机数字,所有 UInt32 类型的数字被生成的概率均相等

二十一、其他函数

函数名称

函数格式

用途

示例

hostName

hostName()

返回一个字符串,其中包含执行此函数的主机的名称。

size

size(Array/Map/String)

返回里面的元素个数

size(map('a', 'b', 'c', 'd')) 返回 2