
# 函数列表
ResourceQL支持以下函数：
表1数学运算函数 
| 函数                       | 功能描述              |
|:---|:---|
| abs(x)                   | 返回x的绝对值。          |
| ceil/ceiling(x)          | 把小数x向上取整。         |
| floor(x)                 | 把小数x向下取整。         |
| pow/power(x, p) → double | 计算x\^p。           |
| round(x)                 | 把小数x四舍五入取整。       |
| round(x, d)              | 把小数x四舍五入保留d位小数。   |
| sign(x)                  | 返回x的符号，正数是1负数是-1。 |
   
表2字符串函数 
| 函数                                     | 功能描述                                |
|:---|:---|
| concat(str1, str2, ..., strn) → string | 合并字符串。                              |
| chr(n) → string                        | 把数字n转化成对应的unicode字符。                |
| codepoint(str) → int                   | 把unicode字符转化成数字。                    |
| length(str) → int                      | 返回字符串的长度。                           |
| lower/upper(str) → string              | 把字符串变换成全小写/大写。                      |
| replace(str, sub) → string             | 把字符串str里所有sub子串都删除。                 |
| replace(str, sub, replace) → string    | 把字符串str里所有sub子串都替换成replace。         |
| reverse(str) → string                  | 把字符串str翻转。                          |
| split(str, delimiter) → array          | 把字符串str按照delimiter切割成数组。            |
| strpos(str, sub) → int                 | 返回str里第一次出现sub的下标。下标从1开始，不存在返回0。    |
| strpos(str, sub, n) -\> int            | 返回str里第n次出现sub的下标。下标从1开始，不存在返回0。    |
| strrpos(str, sub) → int                | 返回str里倒数第一次出现sub的下标。下标从1开始，不存在返回0。  |
| strrpos(str, sub, n) -\> int           | 返回str里倒数第n次出现sub的下标。下标从1开始，不存在返回0 。 |
| substr(str, start) → string            | 返回str里从start开始的子串。                  |
| substr(str, start, length) → string    | 返回str里从start开始，长度为length的子串。        |
| trim/lstrim/rstrim(str)                | 把str里开头和结尾/开头/结尾的空白字符删掉。            |
   
表3数组函数 
| 函数                                                      | 功能描述                                                                                               |
|:---|:---|
| all_match(array(T), function(T, boolean)) → boolean     | 询问每个函数是否都满足给定函数。                                                                                   |
| any_match(array(T), function(T, boolean)) → boolean     | 询问是否存在元素满足给定函数。                                                                                    |
| array_average(a) → double                               | 返回数组a的平均值。                                                                                         |
| array_distinct(a) → array                               | 返回数组a去重后的新数组。                                                                                      |
| array_frequency(a) → map                                | 统计数组中每个元素出现的次数并返回对应的map。                                                                           |
| array_has_duplicates(a) → boolean                       | 查询数组中是否有重复元素。                                                                                      |
| array_intersect(a, b) → array                           | 对数组a和b的元素求个交集。                                                                                     |
| array_join(x, delimiter) → string                       | 把数组元素连接成字符串，中间用delimiter来分隔。                                                                       |
| array_join(x, delimiter\[, null_replacement\]) → string | 把数组元素连接成字符串，中间用delimiter来分隔，null元素用null_replacement填充。                                             |
| array_max/array_min(a)                                  | 返回数组a的最大值/最小值。                                                                                     |
| array_position(a, element) → int                        | 查询element在数组a中的位置。如果不存在返回0。                                                                        |
| array_position(a, element, instance) → int              | 查询element在数组a中的位置。如果不存在返回0。如果'instance\>0'，返回第'instance' 出现的位置；如果'instance \< 0'，返回倒数'instance'位置。 |
| array_remove(a, element) → array                        | 把数组a中等于element的元素都删除。                                                                              |
| array_sort(a) → array                                   | 返回数组a排序后的新数组。                                                                                      |
| array_sort(array(T), function(\<T, T\>, int)) → array   | 返回数组a排序后的新数组。需要提供一个二元比较函数，(-1,0,1) 分别表示小于等于和大于。                                                    |
| array_sum(a)                                            | 返回数组a的元素和。                                                                                         |
| array_union(a, b) → array                               | 返回a和b的并集的数组。                                                                                       |
| array_except(x, y) → array                              | 返回x中但不在y中的元素数组。                                                                                    |
| cardinality(a) → int                                    | 返回数组a的大小。                                                                                          |
| concat(a1, a2, ...) → array                             | 合并数组，等价于'\|\|'运算符。                                                                                 |
| contains(a, element) → boolean                          | 判断element是否出现在数组a中。                                                                                |
| element_at(a, index)                                    | 返回数组a中的第index个元素。如果'index \< 0'将从后往前找。                                                             |
| filter(array(T), function(T, boolean)) → array(T)       | 筛选满足条件的元素组成新数组。                                                                                    |
| none_match(array(T), function(T, boolean)) → boolean    | 询问是否所有元素都不满足给定函数。                                                                                  |
| reverse(a) → array                                      | 把数组a前后取反。                                                                                          |
| sequence(start, stop, step)                             | 和python的range效果类似。                                                                                 |
| shuffle(a) → array                                      | 把数组a的元素打乱。                                                                                         |
| slice(a, start, length) → array                         | 截取数组a从start开始长度为length的子串。                                                                         |
| transform(array(T), function(T, S)) → array(S)          | 把原数组变换成另一个数组。                                                                                      |
   
表4聚合函数 
| 函数                                    | 功能描述                           |
|:---|:---|
| arbitrary(x)                          | 返回任意一个非NULL的元素（如果存在的话）。        |
| array_agg(x) → array                  | 把元素合并成一个数组返回。                  |
| avg(x)→ double                        | 返回算术平均数。                       |
| bool_and/bool_or(x) → boolean         | 对每个元素执行布尔AND/OR。               |
| coalesce(value1, value2, ...)         | 返回第一个非NULL的元素。会被短路。            |
| count(\*)/count(x) → int              | 计数。                            |
| greatest(value1, value2, ..., valueN) | 返回给定同类型权值里最大的权值。               |
| histogram(x) → map                    | 返回一个map，统计了x里每个不同的权值以及他们对应的个数。 |
| least(value1, value2, ..., valueN)    | 返回给定同类型权值里最小的权值。               |
| max/min(x, n=1)                       | 返回元素里的最大/小值，第n大/小值。            |
| max_by/min_by(x, y, n=1)              | 根据元素y的最大/小值或第n大/小值，返回对应的元素x。   |
| geometric_mean(x) → double            | 返回几何平均数。                       |
| set_agg(x) → array                    | 把元素去重后合并成一个数组返回。               |
| set_union(x) → array                  | 把每个读入的数组的元素求并，返回并集的数组。         |
| sum(x)                                | 返回和。                           |
| multimap_agg(key, value)              | 返回从输入键/值对创建的多重映射。              |
| map_agg(key, value)                   | 返回从输入键/值对创建的映射。                |
   
表5时间函数 
| 函数                                            | 功能描述                                                                                                    |
|:---|:---|
| now() → date                                  | 获取当前时间。                                                                                                 |
| date_diff(unit, timestamp1, timestamp2) → int | 返回timestamp2-timestamp1在unit下的时间间隔，unit的可选值：millisecond、second、minute、hour、day、week、month、quarter、year。 |
| date_parse(string, format) → timestamp        | 通过指定格式format，将字符串转为时间格式。                                                                                |
   
