自定义计算函数参考

本页提供 AI/BI 仪表板中自定义计算的所有受支持函数的完整参考。 有关如何使用自定义计算的信息,请参阅 什么是自定义计算?

聚合函数

必须聚合所有计算度量值。 支持以下聚合操作:

注释

在聚合函数中使用DISTINCT 关键字,只包含聚合中的唯一值。 此外, FILTER(WHERE condition) 可以将子句追加到任何聚合函数,以限制计算中包含的值。

聚合函数还可以与窗口函数语法(OVER 子句)或 AGGREGATE OVER 语法一起使用,以创建 详细信息表达式级别

功能 说明
any(expr) 返回true,如果expr组中的至少有一个值是true
any_value(expr) 返回一组行的某个 expr 值。
approx_count_distinct(expr,[relativeSD]) 返回expr中不重复值的估计数目。
approx_percentile ([ALL |DISTINCT] expr, percentile [, accuracy]) 返回指定百分位处的近似百分位值 expr
avg(expr) 返回列或表达式中的计算平均值。
bool_or(expr) 如果true的至少一个值为expr,则返回true
corr(expr1, expr2) 返回 expr1expr2 之间的皮尔逊相关系数。
count(*) 返回组中的行数。
count(DISTINCT expr) 返回组中的唯一行数。
count_if(expr) 返回满足给定条件的行数。
first(expr [, ignoreNull]) 返回组的第一个值 expr
first_value(expr [, ignoreNull]) 返回组的第一个值 expr
last(expr [, ignoreNull]) 返回组的最后一个值 expr
last_value(expr [, ignoreNull]) 返回组的最后一个值 expr
listagg(expr [, delimiter]) 返回组中非 null 值的串联。
max(expr) 返回列或表达式中的最大值。
max_by(expr1,expr2) 返回与 expr1 的最大值相关联的 expr2 值。
mean(expr) 返回列或表达式中的计算平均值。
median(expr) 返回一组值的中值。
min(expr) 返回列或表达式中的最小值。
min_by(expr1,expr2) 返回与expr1的最小值相关的expr2的值。
mode(expr [, deterministic ]) 返回最频繁的值 expr
percentile(expr,percentage[, frequency]) 返回组中指定百分位处的确切百分位值 expr
percentile_approx(expr,percentage [,accuracy]) 返回指定百分位处的近似百分位值 expr
regr_slope(y,x) 返回组中非 null 对的线性回归线的斜率。
some(expr) 返回true,如果expr组中的至少有一个值是true
std(expr) 返回一组值的标准偏差。
stddev(expr) 返回一组值的标准偏差。
stddev_pop(expr) 返回一组值的总体标准偏差。
stddev_samp(expr) 返回一组值的示例标准偏差。
string_agg(expr [, 分隔符]) 返回组中非 null 字符串值的串联。
sum(expr) 返回列或表达式中的值总数。
方差(expr) 返回一组值的方差。

窗口函数

标量窗口函数(本机为 SQL)对与当前行相关的一组行执行计算。 除了 聚合函数,标量窗口函数还可用于排名和分析函数。 有关详细的语法和用法,请参阅 Window 函数

排名窗口函数

自定义计算支持所有排名窗口函数。 这些函数将排名或位置分配给分区中的行。 有关完整的语法和示例,请参阅 排名窗口函数

功能 说明
dense_rank() 返回某个值相对于分区中所有值的排名。
ntile(n) 将每个窗口分区的行分割为从 1 到至多 n 的 n 个 Bucket。
percent_rank() 计算分区中某个值的百分比排名。
rank() 返回某个值相对于分区中所有值的排名。
row_number() 根据窗口分区中的行顺序,为每一行分配唯一的顺序编号(从 1 开始)。

分析窗口函数

自定义计算支持所有分析窗口函数。 这些函数访问窗口中其他行的值。 有关完整的语法和示例,请参阅 分析窗口函数

功能 说明
cume_dist() 返回某个值相对于分区中所有值的位置。
lag(expr [, offset [, default]]) 从分区中的前一行返回 expr 的值。
lead(expr [, offset [, default]]) 从分区中的后续行返回值 expr
nth_value(expr, offset [, ignoreNulls]) 返回位于窗口中特定 expr 处的 offset 的值。

算术运算

可以将表达式与以下算术运算组合在一起:

运算 说明
expr1 % expr2 返回expr1除以expr2的余数。
multiplier * multiplicand 返回两个表达式的乘积。
expr1 + expr2 返回 expr1expr2 的总和。
+ expr 返回表达式的值。
expr1 - expr2 返回从 expr2减去 expr1 时的差值。
- expr 返回表达式的否定值。
被除数/除数 返回被除数除以除数的结果。
dividend div divisor 返回 dividend 除以 divisor 所得结果的整数部分。
abs(expr) 返回数值表达式的绝对值。
acos(expr) 返回 expr 的反余弦值(弧余弦)。
asin(expr) 返回 expr 的反正弦值(反正弦)。
bround(expr [, d]) 使用 HALF_EVEN(四舍六入五取偶)舍入模式将expr舍入到d位小数并返回。
ceil(expr) 或 ceiling(expr) 返回不小于 expr 的最小整数。
cos(expr) 返回expr的余弦值。
exp(expr) 返回 e 的 expr 次幂。
floor(expr) 返回不大于 expr的最大整数。
ln(expr) 返回表达式的自然对数。
log(base, expr) 返回与指定的expr对数 base
log10(expr) 返回表达式的 base-10 对数。
mod(expr1, expr2) 返回expr1除以expr2的余数。
nullifzero(expr) 如果 NULLexpr 0,则返回 ;否则返回 expr
pi() 返回 pi 的值。
pmod(expr1, expr2) 返回 expr1 mod expr2 的正值。
pow(expr1, expr2) 或 power(expr1, expr2) 返回 expr1expr2 次幂结果。
radians(expr) 将度转换为弧度。
rand([seed]) 返回一个随机值,其均匀分布在 0(包含)到 1(不包含)之间。
round(expr [, d]) 使用HALF_UP舍入模式返回 expr 舍入到 d 小数位数。
sign(expr) 返回数值表达式的符号。
sin(expr) 返回 expr 的正弦值。
sqrt(expr) 返回 expr 的平方根。
try_add(expr1,expr2) 两个值相加。 如果发生错误,则返回 NULL
try_divide(分红、除数) 用被除数除以除数。 如果发生错误,则返回 NULL
try_multiply(乘数, 被乘数) 使两个数字相乘。 如果发生错误,则返回 NULL
try_subtract(expr1,expr2) expr2中减去 expr1。 如果发生错误,则返回 NULL
zeroifnull(expr) 如果 exprNULL,则返回 0,否则返回 expr

布尔函数和运算符

自定义计算支持基本比较和布尔运算符。 支持以下运算符和函数:

运算 说明
expr1 != expr2 如果 true 不等于 expr1,则返回 expr2
!expr 逻辑不是。
expr1 和 expr2 expr1expr2 按位与返回。
expr1 && expr2 返回true,如果expr1expr2均为true
expr1 <=> expr2 返回与非 null 操作数的相等运算符相同的结果,但如果两者为 true,则返回 null;如果其中一个为 false,则返回 null
expr1 <> expr2 如果 true 不等于 expr1,则返回 expr2
expr1 < expr2 返回 true 如果 expr1 小于 expr2
expr1 <= expr2 如果 true 小于或等于 expr1,则返回 expr2
expr1 = expr2 如果true等于expr1,则返回expr2
expr1 == expr2 如果true等于expr1,则返回expr2
expr1 > expr2 返回 true 是否 expr1 大于 expr2
expr1 >= expr2 返回 true 是否 expr1 大于或等于 expr2
expr1 ^ expr2 返回 expr1expr2 的按位排他或结果。
expr1 |expr2 返回 expr1expr2 的按位或。
expr1 ||expr2 如果 trueexpr1 中至少有一个等于 expr2,则返回 true
~expr 返回按位 NOT 的 expr
expr1 和 expr2 返回true,如果expr1expr2均为true
下部和上部之间的 expr 测试是否 expr 属于指定范围(特殊语法)。
str ilike 模式 如果true以不区分大小写的方式匹配str,则返回pattern。 还可以用作 ilike(str, pattern [, escapeChar]).
expr in (value1, value2, ...) 测试是否 expr 匹配列表中的任何值(特殊语法)。
isnan(expr) 如果true是 NaN(非数字),则返回expr
isnotnull(expr) 如果 true 不为 expr,则返回 NULL
isnull(expr) 如果 trueexpr,则返回 NULL
字符串类似模式 返回true,如果str匹配pattern。 还可以用作 like(str, pattern [, escapeChar]).
非表达式 逻辑非(前缀运算符)。 还可以用作 not(expr).
expr1 或 expr2 如果 trueexpr1 中至少有一个等于 expr2,则返回 true
str regexp regexp 如果true与正则表达式str匹配,则返回 regexp
regexp_like(str, regexp) 如果true与正则表达式str匹配,则返回 regexp
str rlike regexp 如果true与正则表达式str匹配,则返回 regexp

强制转换函数

使用以下函数将值转换为指定类型:

功能 说明
expr :: type 将值 expr 转换为目标数据类型 type
bigint(expr) expr 值强制转换为 BIGINT
boolean(expr) expr 值强制转换为 BOOLEAN
cast(expr AS 数据类型) 将值 expr 转换为目标数据类型 type
date(expr) expr 值强制转换为 DATE
decimal(expr [, p [, s]]) 将值 expr 强制转换为具有精度 DECIMAL 和刻度 ps
double(expr) expr 值强制转换为 DOUBLE
float(expr) expr 值强制转换为 FLOAT
int(expr) expr 值强制转换为 INT
string(expr) expr 值强制转换为 STRING
timestamp(expr) expr 值强制转换为 TIMESTAMP
to_date(expr [, fmt]) exprfmt 转换为日期。
to_timestamp(expr [, fmt]) 使用exprfmt转换为时间戳。
try_cast(expr AS 类型) 将值 expr 安全地转换为 type 类型的目标数据。
try_to_timestamp(expr [, fmt]) exprfmt安全地解析为时间戳。

日期、时间戳和时间间隔函数

使用以下函数处理日期、时间戳和间隔:

功能 说明
add_months(start_date、num_months) 返回num_months之后的start_date日期。
curdate() 返回当前日期。
current_date() 返回当前日期。
current_timestamp() 返回当前时间戳。
current_timezone() 返回当前会话的本地时区。
date_add(start_date、num_days) 返回num_days之后的start_date日期。
date_diff(endDate、startDate) 返回从 startDateendDate 的天数。
date_format(expr, fmt) 将时间戳转换为 fmt 格式的字符串。
date_part(字段、源) 从日期或时间戳中提取特定部分,例如年份、月或日。
date_sub(start_date、num_days) 返回num_days之前start_date的日期。
date_trunc(fmt,source) 将日期或时间戳截断为指定单位,例如年份或月份。
dateadd(unit, value, expr) 将指定的时间间隔添加到日期或时间戳。
datediff(endDate, startDate) 返回从 startDateendDate 的天数。
day(expr) 返回日期或时间戳中的月份日期。
dayname(expr) 返回日期或时间戳中星期几的名称。
dayofmonth(expr) 返回日期或时间戳中的月份日期。
dayofweek(expr) 从日期或时间戳返回一周中的一天(1 = 星期日,7 = 星期六)。
dayofyear(expr) 返回日期或时间戳中的年份日期。
extract(field FROM source) 提取日期或时间戳的一部分。
from_unixtime(unix_time [, fmt]) 将 Unix 纪元中的秒数转换为时间戳。
from_utc_timestamp(时间戳,时区) 将给定时间戳解释为 UTC 并转换为给定时区。
getdate() 返回当前时间戳。
hour(expr) 返回时间戳的小时组件。
last_day(expr) 返回日期或时间戳所属月份的最后一天。
make_date(年、月、日) 从年、月和日字段创建日期。
make_timestamp(year、month、day、hour、min、sec [, timezone]) 从年、月、日、小时、分钟、秒和可选时区字段创建时间戳。
minute(expr) 返回时间戳中的分钟部件。
month(expr) 返回日期或时间戳的月份组件。
months_between(timestamp1, timestamp2[, roundOff]) 返回timestamp1timestamp2之间的月份数。
next_day(start_date、day_of_week) 返回晚于 start_date 和命名为 day_of_week的第一个日期。
now() 返回当前时间戳。
quarter(expr) 返回给定日期或时间戳对应的年度季度(1 到 4)。
second(expr) 返回时间戳的第二个组件。
timediff(endDate, startDate) 返回以单位为单位测量的两个时间戳之间的差异。
timestamp_micros(微秒) 从 Unix 纪元以来的微秒数创建时间戳。
timestamp_millis(milliseconds) 根据自 Unix epoch 以来的毫秒数创建时间戳。
timestamp_seconds(秒) 从自 Unix 纪元起的秒数创建时间戳。
timestampadd(unit, value, timestamp) 将指定的时间间隔添加到时间戳。
timestampdiff(unit,start,end) 返回以单位为单位测量的两个时间戳之间的差异。
to_date(expr [, fmt]) exprfmt 转换为日期。
to_timestamp(expr [, fmt]) 使用exprfmt转换为时间戳。
to_unix_timestamp(expr [, fmt]) 返回给定时间的 Unix 时间戳。
to_utc_timestamp(时间戳,时区) 解释给定时区中的给定时间戳并转换为 UTC。
trunc(expr, fmt) 返回 expr 日期的时间部分被截断为格式模型 fmt指定的单位。
unix_micros(时间戳) 返回自 Unix 纪元以来的微秒数。
unix_millis(时间戳) 返回自 Unix 纪元以来的毫秒数。
unix_seconds(时间戳) 返回自 Unix 纪元以来的秒数。
unix_timestamp([expr [, fmt]]) 返回给定时间的 Unix 时间戳。
weekday(expr) 从日期或时间戳(0 = 星期一,6 = 星期日)返回一周中的一天。
weekofyear(expr) 返回日期或时间戳所在的年份中的星期数。
year(expr) 返回日期或时间戳的年份部分。

字符串函数

使用以下函数转换字符串。 若要转换日期/时间字符串,请参阅 Cast 函数

功能 说明
base64(expr) 将参数转换为 base64 字符串。
char(expr) 在提供的 UTF-16 码位上返回字符。
charindex(substr, str [, pos]) 返回substr位置之后strpos第一次出现的位置。
concat(expr1, expr2 [, ...]) 返回参数的拼接结果。
concat_ws(sep [, expr1 [, ...]]) 返回由sep分隔的字符串的串联。
contains(左、右) 返回true,如果在right找到left
convert_timezone(sourceTz、targetTz、sourceTs) 将时间戳 sourceTssourceTz 时区转换为 targetTz 时区。
decode(expr, charSet) 使用字符集编码 expr 将二进制 charSet 转换为字符串。
endswith(左、右) 如果 trueleft 结尾,则返回 right
find_in_set(str,str_array) 返回逗号分隔列表中的给定字符串的索引(基于 1)。
format_number(expr, scale) expr 设置为类似 #,###,###.## 的格式,四舍五入到 scale 位小数。
format_string(format, expr [, ...]) 从 printf 样式的格式字符串中返回格式化字符串。
hex(expr) expr 转换为十六进制。
initcap(str) str 大写形式返回每个单词的第一个字母。
instr(str, substr) 返回 substr 中第一次出现的 str 的位置。
lcase(str) 返回 str,所有字符都更改为小写。
left(str, len) 从字符串len中返回最str左侧的字符。
len(expr) 返回字符串或二进制表达式的长度。
length(expr) 返回字符串或二进制表达式的长度。
levenshtein(str1, str2 [, threshold]) 返回两个给定字符串之间的 Levenshtein 距离。
locate(substr, str [, pos]) 返回substr位置之后strpos第一次出现的位置。
lower(str) 返回 str,所有字符都更改为小写。
lpad(str, len [, pad]) 返回一个 str,使用 pad 进行左填充,使其长度达到 len
ltrim(str [, trimStr]) 去除str的前导字符。
md5(expr) 以十六进制字符串的形式返回 MD5 128 位校验和。
parse_url(url, partToExtract [, key]) url 中提取一个部分。
position(substr, str [, pos]) 返回substr位置之后strpos第一次出现的位置。
printf(format, expr [, ...]) 从 printf 样式的格式字符串中返回格式化字符串。
regexp_count(str, regexp) 返回正则表达式 regexp 匹配的 str次数。
regexp_extract(str, regexp [, idx]) 提取与 regexp 匹配的组。
regexp_instr(str,regexp) 返回regexp中第一个匹配str的位置。
regexp_replace(str,regexp,rep[,position]) str 中与 regexp 匹配的所有子字符串替换为 rep
regexp_substr(str,regexp) 返回与正则表达式 regexp 匹配的 str子字符串。
repeat(str, n) 返回重复 strn 次的字符串。
replace(str,search[,replace]) search的所有出现项替换为replacestr中。
reverse(str) 返回 str 的字符顺序被反转。
right(str, len) 从字符串len中返回最str右边的字符。
rtrim([trimStr,] str) 返回已删除尾随字符的 str
sha2(expr, bitLength) 返回 SHA-2 系列哈希函数。
split_part(str,分隔符,partNum) 按照 strdelimiter 进行拆分,并返回指定部分。
startswith(左、右) 如果trueleft开头,则返回right
substr(str, pos [, len]) 返回str中从pos开始,长度为len的子字符串。
substring(str, pos [, len]) 返回str中从pos开始,长度为len的子字符串。
substring_index(str、delim、count) 返回 count 出现之前的子字符串delim
to_char(expr [, fmt]) expr转换为字符串。
to_number(expr [, fmt]) 将字符串 expr 转换为数字。
translate(input, from, to) 通过将input中的字符替换为from中的相应字符,to进行转换。
trim(str [, trimStr]) 去除 str 的前导字符和尾随字符。
ucase(str) 返回 str 将所有字符更改为大写。
upper(str) 返回 str 将所有字符更改为大写。
url_encode(str) str 编码以用于 URL 查询参数。

其他功能

还支持以下函数:

功能 说明
聚合结果 计算时间范围或其他度量值排序集的值。
CASE expr { WHEN opt1 THEN res1 } [ELSE def] END 返回等于 resN 的第一个 optNexpr;如果没有任何匹配项,则返回 def
CASE { WHEN cond1 THEN res1 } \[ELSE def]结束 返回计算结果为 true 的第一个 resNcondN;如果找不到任何匹配项,则返回 def
coalesce(expr1, expr2 [, ...]) 返回第一个非 NULL 参数。
decode(expr, search, result [, search, result]...[, default]) expr与每个搜索值进行比较,并返回相应的结果。
get_json_object(json_txt,路径) json_txt 指定的 path位置提取 JSON 对象。
greatest(expr,[…]) 返回所有参数的最大值。
hash(expr1 [, expr2 ...]) 返回参数的哈希值。
if(condition、true_value、false_value) 如果true_valuecondition,则返回true;否则返回false_value
iff(条件、true_value、false_value) 如果true_valuecondition,则返回true;否则返回false_value
ifnull(expr1, expr2) 如果 expr2expr1,则返回 null;否则返回 expr1
json_array_length(jsonArray) 返回最外部 JSON 数组中的元素数。
least(expr [, ...]) 返回所有参数的最小值。
monotonically_increasing_id() 返回单调递增的 64 位整数。
nullif(expr1, expr2) 如果NULL等于expr1,则返回expr2;否则返回expr1
nvl(expr1,expr2) 如果 expr2expr1,则返回 NULL;否则返回 expr1
nvl2(expr1, expr2, expr3) 如果expr2不是expr1,则返回NULL,否则返回expr3
schema_of_json(json [, options]) 以 JSON 字符串的 DDL 格式返回架构。