跳转至

函数列表

AIR2.0的函数列表兼容了大部分Presto的函数,下面的函数可以参考对应Presto函数的用法,不在此列表中的函数,表示暂时还未支持。

聚合函数

名称 语法 说明
arbitrary arbitrary(x) -> [same as input] 返回 x 的任意非空值(如果存在)。
avg avg(x) -> double 返回 x 的算术平均值。
count count(x) -> bigint 返回 x 出现的次数。
max max(x [, n ]) -> [same as input] 查询 x 中最大的 n 个值。返回结果为数组。
min min(x [, n]) -> [same as input] 查询 x 中最小的 n 个值。返回结果为数组。
sum sum(x) -> [same as input] 返回 x 中所有非NULL值的总和。
stddev stddev(x) -> double / stddev_samp(x) -> double 返回 x 中所有非NULL值的标准差。
stddev_pop stddev_pop(x) -> double 返回 x 中所有非NULL值的总体标准差。
variance variance(x) -> double / var_samp(x) -> double 返回 x 中所有非NULL值的方差。
var_pop var_pop(x) -> double 返回 x 中所有非NULL值的总体方差。

字符串函数

名称 语法 说明
chr chr(n) -> varchar 返回 Unicode code 编码对应的字符。如:SELECT CHR(65) -> A
concat concat(string1, ..., stringN) -> varchar 将多个字符串拼接成一个字符串。若参数列表中存在 null 值,则返回 null。 如:SELECT CONCAT('a', 'b', 'c') -> 'abc'``SELECT CONCAT('a', null, 'c') -> null
length length(string) -> bigint 计算字符串的长度。
lower lower(string) -> varchar 将字符串转换为小写形式。
lpad lpad(string, size, padstring) -> varchar 使用 padstring 对字符串进行左填充。如果 size 小于字符串长度,结果将被截断为 size 个字符。如:SELECT LPAD('AbC', 2, 'e') -> Ab``SELECT LPAD('AbC', 5, 'e') -> eeAbC
ltrim ltrim(string) -> varchar 删除字符串开头的空格。
replace replace(string, search [, replace]) -> varchar 将字符串中所匹配的字符替换为其他指定字符。
reverse reverse(string) -> varchar 返回反向顺序的字符串。
rtrim rtrim(string) -> varchar 删除字符串中结尾的空格。
split split(string, delimiter [, limit] ) 使用指定的分隔符拆分字符串,并返回子串集合。
split_part split_part(string, delimiter, index) -> varchar 根据分隔符分割字符串并返回字段索引。字段索引从 1 开始,如果索引大于字段数量,则返回空值。
strpos strpos(string, substring [,instance]) -> bigint 返回目标子串在字符串中的位置。
substr substr(string, start) -> varchar 返回字符串从起始位置 start 开始的其余部分。起始位置以 1 开始。
substr(string, start [ ,length ] ) -> varchar 从起始位置 start 开始,返回长度为 length 的字符串子串。
trim trim(string) -> varchar 删除字符串中开头和结尾的空格。
upper upper(string) -> varchar 将字符串转化为大写形式。
to_utf8 to_utf8(string) -> varbinary 将字符串编码为 UTF-8 二进制表示形式。
sha256 sha256(string) -> varchar 将字符串经过 sha256 算法进行加密。
sha512 sha512(string) -> varchar 将字符串经过 sha512 算法进行加密。
uuid uuid() -> uuid 生成一个伪随机生成的 UUID。

日期和时间函数

名称 语法 说明
current_date current_date -> date 返回当前日期。
current_timestamp current_timestamp -> timestamp with time zone 返回当前时间戳。
date date(x) -> date 返回日期和时间表达式中的日期部分。x 类型为 varchar 或 timestamp。
last_day_of_month last_day_of_month(x) -> date 返回月份最后一天。x 类型为 date 或 timestamp。
from_unixtime from_unixtime(unixtime) -> timestamp with time zone 以时间戳形式返回 UNIX 时间戳。unixtime 类型为 number。
now now() -> timestamp with time zone 返回当前时间戳。等同于current_timestamp函数。
to_unixtime to_unixtime(timestamp) -> double 以 UNIX 时间戳形式返回时间戳。
date_trunc date_trunc(unit, x) -> [same as input] 将 x 按照 unit 截断。x 类型为 date 或 timestamp, unit 支持【'year','quarter','month','week','day','hour','minute','second'】
date_add date_add(unit, value, date/timestamp) -> [same as input] 在给定的时间戳或日期上增加指定的时间单位和值。减法可使用负值来执行。unit 支持【'year','quarter','month','week','day'】
date_diff date_diff(unit, timestamp1, timestamp2) -> bigint 计算两个时间戳之间的差值,并根据指定的时间单位返回这个差值。unit 支持【'year','quarter','month','week','day'】
date_format date_format(timestamp, format) -> varchar 使用 format 将时间戳格式化为字符串。
date_parse date_parse(string, format) -> timestamp 使用 format 将日期字符串格式化为时间戳。
format_datetime format_datetime(timestamp, format) -> varchar 使用 format 将时间戳格式化为字符串。
parse_datetime parse_datetime(string, format) -> timestamp with time zone 使用 format 将日期时间字符串格式化为带有时区信息的时间戳。
day day(x) -> bigin / day_of_month -> bigint 返回日期和时间表达式中的天数,按月计算。
day_of_week day_of_week(x) -> bigint / dow(x) -> bigint 返回日期和时间表达式中的天数,按周计算。取值范围为 [1, 7]。
day_of_year day_of_year(x) -> bigint / doy(x) -> bigint 返回日期和时间表达式中的天数,按年计算。取值范围为 [1, 366]。
hour hour(x) -> bigint 返回日期和时间表达式中的小时数。取值范围为 [0, 23]。
minute minute(x) -> bigint 返回日期和时间表达式中的分钟数。
month month(x) -> bigint 返回日期和时间表达式中的月份。
quarter quarter(x) -> bigint 返回日期和时间表达式中的季度。取值范围为 [1, 4]。
second second(x) -> bigint 返回日期和时间表达式中的秒数。
week week(x) -> bigint / week_of_year(x) -> bigint 返回日期和时间表达式中的周次,按年计算。取值范围为 [1, 53]。
year year(x) -> bigint 返回日期和时间表达式中的年份。
year_of_week year_of_week(x) -> bigint / yow(x) -> bigint 返回日期和时间表达式在 ISO 周日历中的年份。

date_format 格式支持

语法 说明
%a 工作日缩写名称
%b 缩写月名
%c 月, 数字
%D 带英文后缀的月份的日期
%d 日期,数字
%e 日期,数字
%f 秒分之一
%H 小时 24H
%h 小时 12H
%I 小时 12H
%i 分钟
%j Day of year (1-366)
%k 小时 24H
%l 小时 12H
%M 月名
%m 月份,格式为 MM
%p AM 或 PM 标志
%r 12小时制时间,格式为 hh🇲🇲ss AM/PM
%S 秒,格式为 ss
%s 自1970年1月1日以来的秒数,常用于Unix时间戳
%T 24小时制时间,格式为 hh🇲🇲ss
%u 一年中的第几周(周一作为一周的开始)
%w 星期几,0表示星期日,6表示星期六
%Y 完整的四位数年份,如 2023
%y 两位数的年份,取年份后两位,如 23

数组函数

名称 语法 说明
array [...] array [a,b,c ....] -> array 数组的构造方法。ARRAY[1,2,3,4]表示一个包含四个元素 (1,2,3,4) 的数组。
array_agg array_agg(x) -> array[x] 将指定的元素转化成数组。如:array_agg(2) -> [2]
array_max array_max(array[x]) -> x 返回给定数组的最大值。如:array_max(array[1,2,3,4]) -> 4
array_min array_min(array[x]) -> x 返回给定数组的最小值。如:array_min(array[1,2,3,4]) -> 1
array_average array_average(array[x]) -> double 返回给定数组的平均值。如:array_average(array[1,2,3,4]) -> 2.5
array_join array_join(array[x], delimiter, null_replacement) -> varchar 将给定数组按照 delimiter 进行拼接, 对于空值使用 null_replacement 进行替换。如:array_join(array['1','2',null,'5'], ';', '3') -> 1;2;3;5
array_position array_position(array[x], element) -> bigint 返回 element 在给定数组中的下标(从 1 开始计算)。若目标 element 不存在,则返回 0。如:array_position(array[1,3,5,7], 5) -> 3

数学函数

函数名称 语法 说明
abs abs(x) -> [same as input] 返回 x 的绝对值。
ceil ceil(x) -> [same as input] 对 x 进行向上取整。ceil 函数是 ceiling 函数的别名。
ceiling ceiling(x) -> [same as input] 对 x 进行向上取整。
degrees degrees(x) -> double 将弧度转换为度。
e e() -> double 返回自然底数 e 的值。
exp exp(x) -> double 返回自然底数 e 的 x 次幂。
floor floor(x) -> [same as input] 对 x 进行向下取整。
ln ln(x) -> double 返回 x 的自然对数。
log2 log2(x) -> double 返回以 2 为底的对数。
log10 log10(x) -> double 返回以 10 为底的对数。
mod mod(n, m) -> [same as input] 返回 n 除以 m 的模(余数)。
pi pi() -> double 返回 π 值,精确到小数点后15位。
power power(x, p) -> double 返回 x 的 p 次幂。
radians radians(x) -> double 将度转换为弧度。
rand rand() -> double 返回一个 [0.0, 1.0) 之间的随机数。等同于 random 函数。
random random(x) -> double 返回一个 [0.0, 1.0) 之间的随机数。
round round(x) -> [same as input] 对 x 进行四舍五入。保留原 x 的小数位数。
round(x, d) -> [same as input] 对 x 进行四舍五入且保留 d 位小数。若 d 超过原 x 的小数位数,则按原 x 的小数位数保留。
sign sign(x) -> [same as input] 返回 x 的符号。若 x 为负数,返回 -1;若 x 为正数,返回 1;若 x 为 0,返回 0。
sqrt sqrt(x) -> double 返回 x 的平方根。
truncate truncate(x) -> double 截去 x 小数点后的数字,仅保留 x 整数部分。
truncate(x, n) -> double 保留 x 整数部分和小数点后 n 位。若 n 为负数,则截去小数点前的 n 位数字。
acos acos(x) -> double 返回 x 的反余弦值。
asin asin(x) -> double 返回 x 的反正弦值。
atan atan(x) -> double 返回 x 的反正切值。
atan2 atan2(y, x) -> double 返回 y 除以 x 的反正切值。
cos cos(x) -> double 返回 x 的余弦值。
cosh cosh(x) -> double 返回 x 的双曲余弦值。
sin sin(x) -> double 返回 x 的正弦值。
tan tan(x) -> double 返回 x 的正切值。
tanh tanh(x) -> double 返回 x 的双曲正切值。

类型转换函数

名称 语法 说明
cast cast(value AS type) -> type 将一个值转换为特定的数据类型

数据类型

数据类型 说明
TINYINT 整数类型,范围是 -27 ~ 27-1,存储 1 byte
SMALLINT 整数类型,范围是 -215 ~ 215-1,存储 2 bytes
INTEGER 整数类型,范围是 -231 ~ 231-1,存储 4 bytes
BIGINT 整数类型,范围是 -263 ~ 263-1,存储 8 bytes
DOUBLE 双精度浮点数类型,范围是 -263 ~ 263-1,存储 8 bytes
DECIMAL 可变精度的十进制数类型
VARCHAR 可变长度的字符串类型
CHAR 固定长度的字符串类型
DATE 日期类型
TIMESTAMP 时间戳类型
ARRAY 数组类型
MAP 映射类型,可以存储键值对

窗口函数

函数名称 语法 说明
dense_rank dense_rank() -> bigint 返回一组数值中每个数值的排名。与 rank() 相似,除了关联值不会产生顺序上的空隙。如:有两个相同值的排名为 1,则下一个值的排名为 2。
ntile ntile(n) -> bigint 将窗口分区的数据均匀分配到 n 个连续的桶中。桶号从 1 开始,每个桶的桶号唯一。若窗口分区中的数据不能均匀的分到每一个桶中,则将剩余值从第一个桶开始,每一个桶分一个。如:6 行数据和 4 个桶,最后桶的值为1 1 2 2 3 4
row_number row_number() -> bigint 返回窗口分区内每行数据的排名序号。序号从 1 开始,每行数据的序号唯一。如:三个相同数据行的排名为1,2,3
first_value first_value(x) -> [same as input] 返回窗口分区内排序后的第一个值。
last_value last_value(x) -> [same as input] 返回窗口分区内排序后的最后一个值。
lead lead(x[, offset[, default_value]]) -> [same as input] 返回窗口分区内当前行之后偏移量为 offset 的数据行。偏移量起始值为 0,指当前数据行。偏移量可以是标量表达式,默认 offset 为 1。若目标数据行不存在或大于窗口长度,则返回 default_value;若没有指定 offset,则返回 null。

估算函数

函数名称 语法 说明
approx_percentile approx_percentile(x, percentage) -> [same as x] 以给定的百分比返回所有 x 输入值的近似百分位数。百分比值必须介于 0 和 1 之间,并且对所有输入行都必须是常数。
approx_percentile(x, percentage, accuracy) -> [same as x] 与 approx_percentile(x,percentage) 相同,但具有最大等级误差精度。准确度值必须介于 0 和 1 之间,并且必须对所有输入行保持恒定。请注意,较低的“准确度”实际上是较低的误差阈值,因此准确度更高。默认精度为 0.01。

位运算函数

函数名称 语法 说明
bitwise_and bitwise_and(x, y) -> bigint 将 x 和 y 的每个位进行比较,只有两个位都是 1 时,结果位才是 1。如:SELECT BITWISE_AND(10, 11) -> 10
bitwise_not bitwise_not(x) -> bigint 将 x 的每个位取反,1 变成 0,0 变成 1。如:SELECT BITWISE_NOT(10) -> -11
bitwise_or bitwise_or(x, y) -> bigint 将 x 和 y 的每个位进行比较,只要有一个位是 1,结果位就是 1。如:SELECT BITWISE_OR(10, 11) -> 11
bitwise_xor bitwise_xor(x, y) -> bigint 将 x 和 y 的每个位进行比较,只有两个位不相同时,结果位才是 1。如:SELECT BITWISE_XOR(10, 11) -> 1

条件表达式

函数名称 语法 说明
coalesce coalesce(a, b, c, ....) -> [same as input] 返回多个表达式中第一个非NULL的值。如:SELECT COALESCE(null, null, 2, 3) -> 2

JSON函数

函数名称 语法 说明
json_extract json_extract(json, json_path) -> json 返回 JSON 格式的字符串 json 中字段 json_path 的值。如:SELECT JSON_EXTRACT('{"a":"b"}', '$.a') -> "b"
json_array_get json_array_get(json_array, index) -> json 返回 json_array 中指定索引位置 index 的元素。索引从 0 开始。如:SELECT JSON_ARRAY_GET('["a", [3, 9], "c"]', 1) -> [3, 9]
json_extract_scalar json_extract_scalar(json, json_path) -> varchar 类似于json_extract(),但返回的结果值是一个字符串(而不是编码为 JSON)。json_path 的值必须是一个标量(布尔值、数字或字符串)。如:SELECT JSON_EXTRACT_SCALAR('[1, 2, 3]', '$[2]') -> 3
json_parse json_parse(string) -> json 将输入的 JSON 文本反序列化为 JSON 值。是 json_format()函数的逆函数。如:SELECT JSON_PARSE('{"a": 1, "b": 2}') -> {"a": 1, "b": 2}

正则函数

函数名称 语法 说明
regexp_extract_all regexp_extract_all(string, pattern) -> array(varchar) /regexp_extract_all(string, pattern, group) -> array(varchar) 返回字符串中与正则表达式模式匹配的子串,分组默认从 1 开始。如:SELECT REGEXP_EXTRACT_ALL('1a 2b 14m', '\d+') -> ["1","2","14"]
regexp_extract regexp_extract(string, pattern) -> array(varchar) /regexp_extract(string, pattern, group) -> array(varchar) 返回 string 中正则表达式模式匹配的第一个子字符串,group 默认从 1 开始。如:SELECT REGEXP_EXTRACT('1a 2b 14m', '\d+') -> 1
regexp_like regexp_like(string, pattern) -> boolean() 计算正则表达式模式并确定它是否包含在字符串中。如:SELECT REGEXP_LIKE('1a 2b 14m', '\d+b') -> true
regexp_replace regexp_replace(string, pattern) -> varchar() /regexp_replace(string, pattern, replacement) -> varchar()暂不支持:使用 lambda 表达式regexp_replace(string, pattern, function) 将 string 字符串中匹配 pattern 的子字符串替换成指定字符串 replacement 后返回。replacement 默认为空字符串。如:SELECT REGEXP_REPLACE('1a 2b 14m', '(\d+)([ab])', '3c$2') -> 3ca 3cb 14m

兼容性函数

函数名称 语法 说明
to_char to_char(timestamp, format) -> varchar() 使用 format 将时间戳格式化为字符串。
to_timestamp to_timestamp(string, format) -> timestamp() 使用 format 将字符串解析为 TIMESTAMP。
to_date to_date(string, format) -> date() 使用 format 将字符串解析为 DATE。

上述函数支持的 format 字符串如下:

语法 说明
dd 天(1 - 31)
hh 小时(1 - 12)
hh24 小时(0- 23)
mi 分钟(0 - 59)
mm 月(01 -12)
ss 秒(0 - 59)
yyyy 年,四位表示
yy 年,两位表示