函数列表
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 | 年,两位表示 |
ss AM/PM