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

常用函数介绍

最近更新时间2024.02.27 10:52:26

首次发布时间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
    维度项 1120.5
    维度项 1120.5
    维度项 1221
    维度项 1140.25
    维度项 2331
    维度项 2240.5
    维度项 2150.2

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

    维度SUM(字段A)SUM(字段B)SUM(字段A/字段B)SUM(字段A)/SUM(字段B)
    维度项 15102.250.5
    维度项 26121.70.5
  • 案例二: 与产品的合计功能结合应用

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

    维度字段A字段B字段A/字段B
    合计3100.3
    维度项 1150.2
    维度项 2250.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 功能详解

函数名称函数格式用途示例
avgavg(x)返回表达式中所有值的平均值。只能用于数值字段avg( profit ) 返回利润平均值
maxmax(x)返回表达式中所有值的最大值。只能用于数值字段max( profit ) 返回利润最大值
minmin(x)返回表达式中所有值的最小值。只能用于数值字段min( profit ) 返回利润最小值
countcount(x)计数,求行数count( p_date ) 返回总天数
sumsum(x)返回表达式中所有值的总和。只能用于数值字段sum( profit ) 返回利润总和
uniqCombineduniqCombined(HLL_precision)(x[, ...])计算不同参数值的近似数目。对于大集合(2 亿或更多元素),由于散列函数的选择不好,估计误差将大于理论值。
quantilequantile(level)(x)返回表达式中所有值的分位数。只能用于数值字段。level 范围 0-1quantile(0.5)(x) 返回 x 的 0.5 分位数
uniquniq(x)计数不同。与 count(distinct) 作用相同,精确度上存在 0.5% 的误差。如需精确值,请使用count(distinct),但其查询耗时较长,可能因为超时而查不出数,不建议使用。
argMaxargMax(arg,val)根据字段 val 计算其最大值. 然后取其最大值所在记录行字段Arg 的值
groupArraygroupArray(n)(fieldname)取前 n 条记录 . 结果为一个数组
anyany(x)选择第一个遇到的值
quantileExactquantileExact(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 相同,适用于字段中存在脏数据的情况,会将脏数据转换成空值

示例:

字段AtoDate(字段A)toDateTime(字段A)
2020/12/212020/12/212020/12/21 0:00
202012212020/12/212020/12/21 0:00
2020/12/21 18:002020/12/212020/12/21 18:00

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

3.1.2 时间与时间戳相互转换

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

字段AtoUnixTimestamp(字段A)扩展:toDateTime(toUnixTimestamp(字段A)+28800)
2020/12/21 18:0016085448002020/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),对日期字段向前取到本周一对应的日期
示例:

字段AtoMonday(字段A)
2020/12/222020/12/21

3.2 功能详解

函数名称函数格式用途示例
toDateTimetoDateTime(x)将字符型时间日期转化为时间日期型toDateTime('2018-12-24 10:10:00')
toStartOfFiveMinutetoStartOfFiveMinute(x)截取时间日期到最近的 5 的倍数分钟(之后归零),返回日期toStartOfFiveMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:10:00
nownow()生成当前时间日期now( ) 返回 2018-12-13 10:10:12
toStartOfFifteenMinutestoStartOfFifteenMinutes(x)截取时间日期到最近的 15 的倍数分钟(之后归零),返回日期toStartOfFifteenMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:00:00
toStartOfIntervaltoStartOfInterval(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
toIntervalDaytoIntervalDay(x)日期转化为时间戳,天级别toIntervalDay(toDateTime('2019-08-12 11:12:13')) 返回 1565579533
toIntervalMinutetoIntervalMinute(x)日期转化为时间戳,分钟级别toIntervalMinute(toDateTime('2019-08-14 11:12:13')) 返回 1565579533
toIntervalHourtoIntervalHour(x)日期转化为时间戳,小时级别toIntervalHour(toDateTime('2019-08-14 11:12:13')) 返回 1565579533
toMondaytoMonday(x)将 Date 或 DateTime 向前取整到本周的星期一。 返回 Date 类型。toMonday(toDateTime('2019-08-14 11:12:13')) 返回 2019-08-12
toStartOfHourtoStartOfHour(x)将DateTime向前取整到当前小时的开始。toStartOfHour(toDateTime('2018-12-11 11:12:13')) 返回 11
todaytoday( )生成今天的日期today( ) 返回 2018-12-13
toHourtoHour(x)取时间日期的小时toHour(toDateTime('2018-12-11 11:12:13')) 返回 11
toStartOfTenMinutestoStartOfTenMinutes(x)将 DateTime 以十分钟为单位向前取整到最接近的时间点toStartOfTenMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:00:00
toStartOfDaytoStartOfMinute(string date time)将 DateTime 向前取整到当日的开始。
toYeartoYear(string date)返回日期中的年
toRelativeWeekNumtoRelativeWeekNum(date)将 Date 或 DateTime 转换为星期数,从过去的某个固定时间点开始。
toMonthtoMonth(string date)返回日期中的月
toStartOfMinutetoStartOfMinute( )截取时间日期到分钟(之后归零),返回日期toStartOfMinute(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11 11:12:00
toUnixTimestamptoUnixTimestamp( )将 DateTime 转换为 unix 时间戳
addDaysaddDays(date_time,int)函数将一段时间间隔添加到 Date/DateTime,然后返回 Date/DateTim
toRelativeYearNumtoRelativeYearNum(date_time)将 Date 或 DateTime 转换为年份的编号,从过去的某个固定时间点开始
yearyear(Date/DateTime/String date)返回日期中的年year(toDateTime('2018-12-11 11:12:13'))返回 2018
monthmonth(Date/DateTime/String date)返回日期中的月month(toDateTime('2018-12-11 11:12:13'))返回 12
quarterquarter(Date/DateTime/String date)返回日期中的季度数quarter(toDateTime('2018-12-11 11:12:13'))返回 12
dayday(Date/DateTime/String)返回 dayOfMonthday('2019-09-12') 返回 12
last_daylast_day(Date/DateTime/String date)返回日期所在的月份的最后一天last_day(toDateTime('2018-12-11 11:12:13'))返回 2018-12-31
next_daynext_day(Date/DateTime/String date, string day_of_week)返回日期中的下一个星期day_of_weeknext_day(toDate('2015-01-14'), 'TU') 返回 2015-01-20
dateDiffdateDiff(Date/DateTime date1, Date/DateTime date2 [, String timezone]); dateDiff(String unit, Date/DateTime date1, Date/DateTime date2 [, String timezone])返回两个日期的差值dateDiff(now(), yesterday())返回 -1
date_subdate_sub (string/Date/DateTime startdate, int days)返回start_time 前 days 天的日期/时间date_sub('2019-09-08', 1) 返回'2019-09-07'
date_subdate_sub (string/Date/DateTime startdate, int months)返回start_time 前 months 月的日期/时间date_sub('2019-09-08', 1) 返回'2019-08-08'
date_subdate_sub (string/Date/DateTime startdate, int years)返回start_time 前 years 年的日期/时间date_sub('2019-09-08', 1) 返回'2018-09-08'
date_adddate_add (string/Date/DateTime startdate, int days)返回start_time 后 days 天的日期/时间date_add('2019-09-08', 1) 返回'2019-09-09'
date_adddate_add (string/Date/DateTime startdate, int months)返回start_time 后 months 月的日期/时间date_add('2019-09-08', 1) 返回'2019-10-08'
date_adddate_add (string/Date/DateTime startdate, int years)返回start_time 后 years 年的日期/时间date_add('2019-09-08', 1) 返回'2020-09-08'
from_unixtimefrom_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,toDateto_date(String/UInt16 date)将字符串/自 1970-01-01 起的第 date 天转换为日期类型toDate('20190909') 返回'2019-09-09'
date_formatdate_format(Date/DateTime/String, String pattern)将日期按指定格式输出date_format('2019-09-09', 'yyyy') 返回 '2019'
unix_timestampunix_timestamp(Date/DateTime/String)将日期转换为 timestampunix_timestamp(toDateTime('2019-09-09 09:00:00'), 'time: %F %T', 'Asia/Shanghai') 返回'time: 2019-09-09 09:00:00'
toWeektoWeek(date[,mode])返回日期所在的周, 范围[0, 53]toWeek(toDate('2019-12-06'), 3) 返回 49
toDayOfWeektodayofweek(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 转换为字符串格式,可以把数字、字符、日期等类型字段转换掉。
示例:

字段AtoString(字段A)
143876768892010143876768892010

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

4.1.3 转换成整数值

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

字段AtoInt64(字段A)
143876768892010143876768892010
123a转换失败

4.2 功能详解

函数名称函数格式用途示例
castcast(X, 'Y')通用强转函数,将名称为X的任意类型数据,转化成 Y 格式将 int 类型的 uid 转换为 String 类型 CAST (uid, 'String')
toStringtoString(x)将数值型、字符型、日期等转化为字符型toString('2018-12-24') 返回 2018-12-24
toInt64toInt64(x)将数据类型转化为 int 格式(64 个字节)toInt64(123.883) 返回 123
toUInt8OrZerotoUInt8OrZero(x)将无符号整数字符型转化为整数型,否则返回 0toUInt8OrZero('123.12') 返回 0
toDateOrZerotoDateOrZero(x)将数据类型转化为 DATE 格式,否则返回 0toDateOrZero(toDateTime('2018-12-11 11:12:13')) 返回 2018-12-11
toUInt16OrZerotoUInt16OrZero(x)将无符号整数字符型转化为整数型,否则返回 0toUInt8OrZero('123') 返回 123
toUInt64OrZerotoUInt64OrZero(x)将数据类型转化为 int 格式(64 个字节),失败则为 0toUInt64OrZero('123') 返回 123
toDateOrNulltoDateOrNull(a)将 a 的数据类型转成 date or null
toUInt32OrZerotoUInt32OrZero(x)将数据类型转化为 int 格式(32 个字节),失败则为 0
toFloat32OrZerotoFloat32OrZero( )将数值字符串型转化为数值型toFloat32OrZero(‘-123’) 返回-123
toIntervalMonthtoIntervalMonth( )将数字类型参数转换为 Interval 类型(时间区间)
toInt32toInt32(a)将 a 的数据类型转成 int32
toDateTimeOrNulltoDateTimeOrNull(a)将 a 的数据类型转成 datetime or null
toFloat64toFloat64(a)将 a 的数据类型转成 float64
toUInt8toUInt8(a)将 a 的数据类型转成 Uint8
toFloat64OrZerotoFloat64OrZero(a)将 a 的数据类型转成 float or zero
toUInt32toUInt32(a)将 a 的数据类型转成 Uint32
parseDateTimeBestEffortparseDateTimeBestEffort()将数字类型参数解析为 Date 或 DateTime 类型。 与 toDate 和 toDateTime 不同,parseDateTimeBestEffort 可以进行更复杂的日期格式。
parseDateTimeBestEffortOrNullparseDateTimeBestEffortOrNull()将数字类型参数解析为 Date 或 DateTime 类型,遇到无法处理的日期格式时返回 null
parseDateTimeBestEffortOrZeroparseDateTimeBestEffortOrZero()将数字类型参数解析为 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 的字符串。
示例:

字段Asubstr(字段A,1,10)
2020/12/22 18:002020/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 的长度
示例:

字段Alength(字段A)
2020/12/22 18:0019

5.2 功能详解

函数名称函数格式用途示例
substringsubstring(s, offset, length)字符串截取substring('123abcABC', 2, 3) 返回 23a
emptyempty(x)判断字符串是空为 1,否则为 0empty('123a') 返回 0
lengthlength(x)返回字符串的长度length('123a') 返回 4
extractAllextractAll(haystack,pattern)返回匹配到的所有子串,输出列表extractAll('iioomAj12123124OOBJ123B', '\\d+') 返回 [12123124,123]
splitByCharsplitByChar(separator, s)以单个字符分割字符串
concatconcat(s1, s2, ...)将参数中的多个字符串拼接,不带分隔符concat('123', 'abc', 'ABC') 返回 123abcABC
lowerlower(string)将字符串转为小写
char_lengthchar_length(string)假定字符串以 UTF-8 编码组成的文本,返回此字符串的 Unicode 字符长度。如果传入的字符串不是 UTF-8 编码,则函数可能返回一个预期外的值(不会抛出异常)
startsWithstartsWith(s, prefix)返回是否以指定的前缀开头。如果字符串以指定的前缀开头,则返回 1,否则返回 0
replaceRegexpAllreplaceRegexpAll(haystack,pattern,replacement)正则匹配替换所有匹配到的patternreplaceOne('asd123cbbj464sd', 'sd', '-') 返回 a-123cbbj464-
replaceRegexpOnereplaceRegexpOne(haystack, pattern, replacement)使用‘pattern’正则表达式替换。
replaceAllreplaceAll(haystack, pattern, replacement)用‘replacement’子串替换‘haystack’中出现的所有‘pattern’子串
splitsplit(string str, string pat)按照 pat 字符串分割 str,会返回分割后的字符串数组split('abc', 'b') 返回['a', 'c']
concat_wsconcat_ws(String delimiter, String str1, String str2, ...)返回以'delimiter'连接的字符串concat_ws('_', 'abc', 'def') 返回 'abc_def'
substringsubstring(String str, int start, int len),substr(String str, int start, int len)返回第 start 起长度为 len 的字符串substring('abc', 2); 返回'bc'
lpad,rpadlpad(String, len, pad_str)将 str 进行用 pad 进行左补足到 len 位lpad('abcd', 10, '.') 返回 '......abcd'
regexp_replaceregexp_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
示例:

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

6.1.2 case when 函数

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

字段Acase when 字段A>300 then '>300' when 字段A>200 then '(200,300]' else null end
250(200,300]
105
350>300

6.2 功能详解

函数名称函数格式用途示例
multiIfmultiIf(cond_1, then_1, cond_2, then_2...else)允许您在查询中更紧凑地编写CASE运算符 参数: *cond_N — 函数返回then_N的条件。 *then_N — 执行时函数的结果。 *else — 如果没有满足任何条件,则为函数的结果。multiIf(1 > 2, '正确', 2 < 0, '正确', '错误') 返回 错误
ifif(cond, then, else), cond ? operator then : else如果cond != 0则返回then,如果cond = 0则返回else。 cond必须是UInt8类型,then和else必须存在最低的共同类型。if(1 > 2, '正确', '错误') 返回 错误
caseCASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e
7. 用户名函数

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


8. JSON 函数
函数名称函数格式用途示例
visitParamExtractIntvisitParamExtractUInt(params, name)将名为“name”的字段的值解析成 UInt64。如果这是一个字符串字段,函数将尝试从字符串的开头解析一个数字。如果该字段不存在,或无法从它中解析到数字,则返回0。
visitParamExtractFloatvisitParamExtractFloat(params, name)将名为“name”的字段的值解析成 float64
visitParamExtractBoolvisitParamExtractBool(params, name)解析一个 true/false 值. 结果是 UInt8
visitParamHasvisitParamHas(params, name)检查是否存在“name”名称的字段
visitParamExtractRawvisitParamExtractRaw(params, name)返回字段的值,包含空格符。visitParamExtractRaw('{"abc":{"def":[1,2,3]}}', 'abc') = '{"def":[1,2,3]}'
get_json_objectget_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. 数学函数
函数名称函数格式用途示例
powerpower(x, y)接受 x 和 y 两个参数。返回 x 的 y 次方
powpow(x, y)接受 x 和 y 两个参数。返回 x 的 y 次方。pow(2, 3) 返回 8
sqrtsqrt(x)接受一个数值类型的参数并返回它的平方根。sqrt(4) 返回 2
10. Nullable 处理函数
函数名称函数格式用途示例
isNotNullisNotNull(x)检查参数是否不为 NULL. 是返回 1,否返回 0sNotNull('abc') 返回 1
isNullisNull(x)检查参数是否为 NULL,是 NULL 返回 1,不是返回 0isNull(null) 返回 1
coalescecoalesce(x,...)检查从左到右是否传递了“NULL”参数并返回第一个非'NULL参数。coalesce(null,null,a,b,null) 返回 a
assumeNotNullassumeNotNull( )将 Nullable 类型的值转换为非 Nullable 类型的值

11. 进制转换函数
函数名称函数格式用途示例
convconv(String/Int num, Int from_base, Int to_base)进制转换conv('10',10,2) 返回'1010'
binbin(Int/DateTime/String)转换为二进制数bin(10) 返回'1010'
12. Hash 函数
函数名称函数格式用途
cityHash64cityHash64O()计算任意数量字符串的 CityHash64 或使用特定实现的 Hash 函数计算任意数量其他类型的 Hash
intHash64intHash64( )从任何类型的整数计算 64 位哈希码
13. URL 函数
函数名称函数格式用途示例
domaindomain(x)返回URL的域名domain('http://www.baidu.com.cn') 返回 www.baidu.com.cn
cutToFirstSignificantSubdomaincutToFirstSignificantSubdomain( )返回包含顶级域名与第一个有效子域名之间的内容cutToFirstSignificantSubdomain('https://news.yandex.com.tr/')) = 'yandex.com.tr'
parse_urlparse_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;
mapmap(KeyType k1, ValueType v1, KeyType k2, ValueType v2 ...)构造 map 类型数据map('a', 'b', 'c', 'd') 返回 {'a': 'b', 'c', 'd'}
str_to_mapmap(String value, String kv_delimiter, String item_delimiter)String 转 map 类型str_to_map('a:b,c:d', ',', ':') 返回 {'a': 'b', 'c': 'd'}
十四、数组函数
函数名称函数格式用途示例
arrayConcatarrayConcat(array)合并参数中传递的所有数组。SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res ┌─res─────┐ │ [1,2,3,4,5,6] │ └───────┘
notEmptynotEmpty()对于空字符串返回 0,对于非空字符串返回 1
十五、ArrayJoin函数
函数名称函数格式用途示例
arrayJoinarrayJoin(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] │ └ ─ ┴ ─ ─ ┴─ ───┘
十六、取模函数
函数名称函数格式用途示例
pmodpmod(Int a, Int b)浮点数会转换为整数取模, 如有特殊需求, 可在后期支持pmod(10, 3) 返回 1
十七、取整函数
函数名称函数格式用途示例
roundround(x,[N])将值取整到指定的小数位数。 该函数按顺序返回最近的数字。如果给定数字包含多个最近数字,则函数返回其中最接近偶数的数字(银行的取整方式)。round(123.883, 1) 返回 123.9
十八、算术函数
函数名称函数格式用途
absabs(a)计算数字(a)的绝对值
十九、位操作函数
函数名称函数格式用途
bitAndbitAnd(a, b)结果类型是一个整数,其位数等于其参数的最大位。如果至少有一个参数为有符数字,则结果为有符数字。如果参数是浮点数,则将其强制转换为 Int64
二十、随机函数
函数名称函数格式用途
randrand( )返回一个 UInt32 类型的随机数字,所有 UInt32 类型的数字被生成的概率均相等
二十一、其他函数
函数名称函数格式用途示例
hostNamehostName()返回一个字符串,其中包含执行此函数的主机的名称。
sizesize(Array/Map/String)返回里面的元素个数size(map('a', 'b', 'c', 'd')) 返回 2