最近更新时间:2023.06.30 16:52:07
首次发布时间:2021.02.23 10:42:00
产品支持多种函数,包括数值、文本、时间、数组等,在使用过程中,可以在数据集、仪表盘中通过添加公式/函数的方式,进行多样化的计算。由于,产品提供基于Clickhouse的数据导入和查询服务,因此本文仅介绍相关clickhouse函数常用语法。
更多参考资料:
Clickhouse官方函数文档
LOD表达式
表计算函数
学习视频
聚合函数用于快速根据想要的逻辑进行指标聚合计算,如求和、计数等。
格式:count(xxx),即对xxx计数
示例:
字段A |
---|
1 |
1 |
3 |
4 |
计算count(字段A),得到聚合结果4。若想去重计数,可使用count(distinct 字段A),则得到结果3。
格式: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 |
格式:average(xxx),即对xxx求均值
示例:
字段A |
---|
1 |
1 |
3 |
4 |
计算average(字段A),得到聚合结果2.25。
格式:最大值max(xxx),最小值min(xxx)
示例:
字段A |
---|
1 |
1 |
3 |
4 |
计算max(字段A),得到4;计算min(字段A),得到1。
格式:quantile(level)(xxx)或quantileExact(level)(xxx),即返回xxx中level分位数。后者为精确值,前者有一定误差,但性能更优。
示例:
字段A |
---|
1 |
1 |
3 |
4 |
计算quantile(0.75)(字段A),得到字段A的75%分位数3。
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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分位数 |
日期函数用于作时间格式转换、时间处理、获取指定日期等。
格式:
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)为时间格式
格式:将时间或文本类型的时间转换成时间戳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函数转换成可读性更强的时间格式。
格式:now(),生成一个随系统实时时间变化的动态参数
示例:现在时间是2020-12-21 18:00:00,写下now()作为一个字段,则这个字段当前值为2020-12-21 18:00:00,一小时后为2020-12-21 19:00:00
格式:toMonday(xx),对日期字段向前取到本周一对应的日期
示例:
字段A | toMonday(字段A) |
---|---|
2020/12/22 | 2020/12/21 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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 | toyYear(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_sub('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 |
类型转换函数用于对字段进行类型转换,如文本与数字转换。
格式:cast(xxx,'类型'),将xxxx转化为特定类型
示例:
cast(字段A,'string')则将字段A转化成了字符串格式
格式:toString(xxx),将字段xxx转换为字符串格式,可以把数字、字符、日期等类型字段转换掉。
示例:
字段A | toString(字段A) |
---|---|
143876768892010 | 143876768892010 |
转换前字段A为数值格式,由于较长在分析时容易被科学计数;转换为字符串后则能稳定保存。
格式:toInt64(xxx),将字段xxx转换为整数,xxx中只能有数字。
字段A | toInt64(字段A) |
---|---|
143876768892010 | 143876768892010 |
123a | 转换失败 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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 |
字符串函数用于对文本作拼接或截取。
格式:concat(xxx,xxx,xxx……),将多个字段,不带分隔符地拼接在一起
示例:concat(字段A,字段B,字段C)得到:门前大桥下,123
字段A | 字段B | 字段C |
---|---|---|
门前大桥下 | , | 123 |
格式: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 |
格式:length(xxx),计算字符串类型字段xxx的长度
示例:
字段A | length(字段A) |
---|---|
2020/12/22 18:00 | 19 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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.' |
根据设定的条件,返回对应的值。如a>1则返回1,a<1则返回0,需要通过条件函数来实现。
格式:if(条件,a,b),当条件正确时,返回值a,当条件错误时,返回值b
示例:
字段A | if(字段A>0,'正数','负数') |
---|---|
200 | 正数 |
格式:
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 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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 |
用户名函数并非 clickhouse 官方函数,而是与项目用户信息相结合,用于返回当前使用用户的指定信息的函数。
USERNAME()可返回当前用户的用户名,如下所示。该函数也可与其他函数组合使用
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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' |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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 |
函数名称 | 函数格式 | 用途 | 示例 |
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类型的值 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
conv | conv(String/Int num, Int from_base, Int to_base) | 进制转换 | conv('10',10,2) 返回'1010' |
bin | bin(Int/DateTime/String) | 转换为二进制数 | bin(10) 返回'1010' |
函数名称 | 函数格式 | 用途 |
---|---|---|
cityHash64 | cityHash64O() | 计算任意数量字符串的CityHash64或使用特定实现的Hash函数计算任意数量其他类型的Hash |
intHash64 | intHash64( ) | 从任何类型的整数计算64位哈希码 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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 |
函数名称 | 函数格式 | 用途 | 示例 |
---|---|---|---|
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(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 |