文章目录 0、MaxCompute预置的函数分类 1、日期函数 2、数学函数 3、算术运算符 4、窗口函数 5、聚合函数 6、字符串函数 7、复杂类型函数 8、加密函数 9、其他函数
0、MaxCompute预置的函数分类
函数类型 说明 日期函数 支持处理DATE、DATETIME、TIMESTAMP等日期类型数据,实现加减日期、计算日期差值、提取日期字段、获取当前时间、转换日期格式等业务处理能力。 数学函数 支持处理BIGINT、DOUBLE、DECIMAL、FLOAT等数值类型数据,实现转换进制、数学运算、四舍五入、获取随机数等业务处理能力。 窗口函数 支持在指定的开窗列中,实现求和、求最大最小值、求平均值、求中间值、数值排序、数值偏移、抽样等业务处理能力。 聚合函数 支持将多条输入记录聚合成一条输出值,实现求和、求平均值、求最大最小值、求平均值、参数聚合、字符串连接等业务处理能力。 字符串函数 支持处理STRING类型字符串,实现截取字符串、替换字符串、查找字符串、转换大小写、转换字符串格式等业务处理能力。 复杂类型函数 支持处理MAP、ARRAY、STRUCT及JSON类型数据,实现去重元素、聚合元素、元素排序、合并元素等业务处理能力。 加密函数 支持处理STRING、BINARY类型的表数据,实现加密、解密等业务处理能力。 其他函数 除上述函数之外,提供支持其他业务场景的函数。
1、日期函数
MaxCompute SQL提供了如下日期函数,您可以根据实际需要选择合适的日期函数,完成日期计算、日期转换。
函数 小写 功能 DATEADD dateadd 按照指定的单位和幅度修改日期值。 DATE_ADD date_add 按照指定的幅度增减天数,与date_sub
的增减逻辑相反。 DATE_FORMAT date_format 将日期值转换为指定格式的字符串。 DATE_SUB date_sub 按照指定的幅度增减天数,与date_add
的增减逻辑相反。 DATEDIFF datediff 计算两个日期的差值并按照指定的单位表示。 DATEPART datepart 提取日期中符合指定时间单位的字段值。 DATETRUNC datetrunc 提取日期按照指定时间单位截取后的值。 FROM_UNIXTIME from_unixtime 将数字型的UNIX值转换为日期值。 GETDATE getdate 获取当前系统时间。 ISDATE isdate 判断一个日期字符串能否根据指定的格式串转换为一个日期值。 LASTDAY lastday 获取日期所在月的最后一天。 TO_DATE to_date 将指定格式的字符串转换为日期值。 TO_CHAR to_char 将日期按照指定格式转换为字符串。 UNIX_TIMESTAMP unix_timestamp 将日期转换为整型的UNIX格式的日期值。 WEEKDAY weekday 返回日期值是当前周的第几天。 WEEKOFYEAR weekofyear 返回日期值位于当年的第几周。 ADD_MONTHS add_months 计算日期值增加指定月数后的日期。 CURRENT_TIMESTAMP current_timestamp 返回当前TIMESTAMP类型的时间戳。 CURRENT_TIMEZONE current_timezone 返回当前系统的时区信息。 DAY day 返回日期值的天。 DAYOFMONTH dayofmonth 返回日部分的值。 DAYOFWEEK dayofweek 返回日期的星期值。 DAYOFYEAR dayofyear 返回日期是当年中的第几天。 EXTRACT extract 获取日期TIMESTAMP中指定单位的部分。 FROM_UTC_TIMESTAMP from_utc_timestamp 将一个UTC时区的时间戳转换为一个指定时区的时间戳。 HOUR hour 返回日期小时部分的值。 LAST_DAY last_day 返回日期值所在月份的最后一天日期。 MINUTE minute 返回日期分钟部分的值。 MONTH month 返回日期值所属月份。 MONTHS_BETWEEN months_between 返回指定日期值间的月数。 NEXT_DAY next_day 返回大于日期值且与指定周相匹配的第一个日期。 QUARTER quarter 返回日期值所属季度。 SECOND second 返回日期秒数部分的值。 TO_MILLIS to_millis 将指定日期转换为以毫秒为单位的UNIX时间戳。 YEAR year 返回日期值的年。
2、数学函数
MaxCompute SQL提供了如下数学函数供您在开发过程中使用,您可以根据实际需要选择合适的数学函数,进行数据计算、数据转换相关操作。
函数 小写 功能 ABS abs 计算绝对值。 ACOS acos 计算反余弦值。 ASIN asin 计算反正弦值。 ATAN atan 计算反正切值。 ATAN2 atan2 计算expr1/expr2 的反正切函数。 CEIL ceil 计算向上取整值。 CONV conv 计算进制转换值。 COS cos 计算余弦值。 COSH cosh 计算双曲余弦值。 COT cot 计算余切值。 EXP exp 计算指数值。 FLOOR floor 计算向下取整值。 ISNAN isnan 判断表达式的值是否是NaN。 LN ln 计算自然对数。 LOG log 计算log对数值。 NEGATIVE negative 返回表达式的负值。 POSITIVE positive 返回表达式的值。 POW pow 计算幂值。 RAND rand 返回随机数。 ROUND round 返回四舍五入到指定小数点位置的值。 SIN sin 计算正弦值。 SINH sinh 计算双曲正弦值。 SQRT sqrt 计算平方根。 TAN tan 计算正切值。 TANH tanh 计算双曲正切值。 TRUNC trunc 返回截取到指定小数点位置的值。 BIN bin 计算二进制代码值。 CBRT cbrt 计算立方根值。 CORR corr 计算皮尔逊系数。 DEGREES degrees 将弧度转换为角度。 E e 返回e的值。 FACTORIAL factorial 计算阶乘值。 FORMAT_NUMBER format_number 将数字转化为指定格式的字符串。 HEX hex 返回整数或字符串的十六进制格式。 LOG2 log2 计算以2为底的对数。 LOG10 log10 计算以10为底的对数。 PI pi 返回π的值。 RADIANS radians 将角度转换为弧度。 SIGN sign 返回输入参数的符号。 SHIFTLEFT shiftleft 计算按位左移值。 SHIFTRIGHT shiftright 计算按位右移值。 SHIFTRIGHTUNSIGNED shiftrightunsigned 计算无符号按位右移值。 UNHEX unhex 返回十六进制字符串所代表的字符串。 WIDTH_BUCKET width_bucket 返回指定字段值落入的分组编号。
3、算术运算符
运算符 说明 A+B A或B为NULL,返回NULL,否则返回A+B的结果。 A-B A或B为NULL,返回NULL,否则返回A-B的结果。 A*B A或B为NULL,返回NULL,否则返回A×B的结果。 A/B A或B为NULL,返回NULL,否则返回A÷B的结果。说明 如果A和B为BIGINT类型,返回结果为DOUBLE类型。 A%B A或B为NULL,返回NULL,否则返回A÷B并取余数的结果。 +A 仍然返回A。 -A 如果A为NULL,返回NULL,否则返回-A。 A DIV B A或B为NULL,返回NULL,否则返回A DIV B的结果。
4、窗口函数
MaxCompute SQL提供了如下窗口函数,使用窗口函数对指定开窗列的数据灵活地进行分析处理工作。
函数 小写 功能 ROW_NUMBER row_number 计算行号。从1开始递增。 RANK rank 计算排名。排名可能不连续。 DENSE_RANK dense_rank 计算排名。排名是连续的。 PERCENT_RANK percent_rank 计算排名。输出百分比格式。 CUME_DIST cume_dist 计算累计分布。 NTILE ntile 将数据顺序切分成N等份,返回数据所在等份的编号(从1到N)。 LAG lag 取当前行往前(朝分区头部方向)第N行数据的值。 LEAD lead 取当前行往后(朝分区尾部方向)第N行数据的值。 FIRST_VALUE first_value 取当前行所对应窗口的第一条数据的值。 LAST_VALUE last_value 取当前行所对应窗口的最后一条数据的值。 NTH_VALUE nth_value 取当前行所对应窗口的第N条数据的值。 CLUSTER_SAMPLE cluster_sample 用户随机抽样。返回True表示该行数据被抽中。 COUNT count 计算窗口中的记录数。 MIN min 计算窗口中的最小值。 MAX max 计算窗口中的最大值。 AVG avg 对窗口中的数据求平均值。 SUM sum 对窗口中的数据求和。 MEDIAN median 计算窗口中的中位数。 STDDEV stddev 计算总体标准差。是STDDEV_POP的别名。 STDDEV_SAMP stddev_samp 计算样本标准差。
5、聚合函数
MaxCompute SQL支持的聚合函数如下。
函数 小写 功能 AVG avg 计算平均值。 COUNT count 计算记录数。 COUNT_IF count_if 计算指定表达式为True的记录数。 MAX max 计算最大值。 MIN min 计算最小值。 MEDIAN median 计算中位数。 STDDEV stddev 计算总体标准差。 STDDEV_SAMP stddev_samp 计算样本标准差。 SUM sum 计算汇总值。 WM_CONCAT wm_concat 用指定的分隔符连接字符串。 ANY_VALUE any_value 在指定范围内任选一个值返回。 APPROX_DISTINCT approx_distinct 返回输入的非重复值的近似数目。 ARG_MAX arg_max 返回指定列的最大值对应行的列值。 ARG_MIN arg_min 返回指定列的最小值对应行的列值。 MAX_BY max_by 返回指定列的最大值对应行的列值。 MIN_BY min_by 返回指定列的最小值对应行的列值。 COLLECT_LIST collect_list 将指定的列聚合为一个数组。 COLLECT_SET collect_set 将指定的列聚合为一个无重复元素的数组。 COVAR_POP covar_pop 计算指定两个数值列的总体协方差。 COVAR_SAMP covar_samp 计算指定两个数值列的样本协方差。 NUMERIC_HISTOGRAM numeric_histogram 统计指定列的近似直方图。 PERCENTILE percentile 计算精确百分位数,适用于小数据量。 PERCENTILE_APPROX percentile_approx 计算近似百分位数,适用于大数据量。 VARIANCE/VAR_POP variance/var_pop 计算指定数值列的方差。 VAR_SAMP var_samp 计算指定数值列的样本方差。 BITWISE_OR_AGG bitwise_or_agg 计算输入Value的bit OR聚合值。 BITWISE_AND_AGG bitwise_and_agg 计算输入Value的bit AND聚合值。 MAP_AGG map_agg 构造两个输入字段的Map。 MULTIMAP_AGG multimap_agg 构造两个输入字段的Map,第一个字段作为Map的Key,第二个字段构造数组作为Map的Value。 MAP_UNION map_union 对输入Map进行Union操作来构造输出Map。 MAP_UNION_SUM map_union_sum 对输入Map进行Union操作并对相同Key的Value求和来构造输出Map。 HISTOGRAM histogram 构造输入Map的Key值出现次数的Map。
6、字符串函数
MaxCompute SQL支持的字符串函数如下。其中字符串函数的使用限制请参见字符串函数的使用限制。
函数 小写 功能 ASCII ascii 返回字符串的第一个字符的ASCII码。 CHAR_MATCHCOUNT char_matchcount 计算A字符串出现在B字符串中的字符个数。 CHR chr 将指定ASCII码转换成字符。 CONCAT concat 将字符串连接在一起。 CONCAT_WS concat_ws 将参数中的所有字符串按照指定的分隔符连接在一起。 DECODE decode 将字符串按照指定编码格式解码。 ENCODE encode 将字符串按照指定编码格式编码。 FIND_IN_SET find_in_set 在以逗号分隔的字符串中查找指定字符串的位置。 FORMAT_NUMBER format_number 将数字转化为指定格式的字符串。 FROM_JSON from_json 根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。 GET_JSON_OBJECT get_json_object 在一个标准JSON字符串中,按照指定方式抽取指定的字符串。 INITCAP initcap 将字符串转换为固定格式的字符串,单词之间以空格分隔。转换后的格式为:字符串中每个单词首字母大写,其余小写。 INSTR instr 计算A字符串在B字符串中的位置。 IS_ENCODING is_encoding 判断字符串是否可以从指定的A字符集转换为B字符集。 KEYVALUE keyvalue 将字符串拆分为Key-Value对,并将Key-Value对分开,返回Key对应的Value。 KEYVALUE_TUPLE keyvalue_tuple 将字符串拆分为多个Key-Value对,并将Key-Value对分开,返回多个Key对应的Value。 LENGTH length 计算字符串的长度。 LENGTHB lengthb 计算字符串以字节为单位的长度。 LOCATE locate 在字符串中查找另一指定字符串的位置。 LTRIM ltrim 去除字符串的左端字符。 MD5 md5 计算字符串的MD5值。 PARSE_URL parse_url 对URL进行解析返回指定部分的信息。 PARSE_URL_TUPLE parse_url_tuple 对URL进行解析返回多个部分的信息。 REGEXP_COUNT regexp_count 计算字符串从指定位置开始,匹配指定规则的子串数。 REGEXP_EXTRACT regexp_extract 将字符串按照指定规则拆分为组后,返回指定组的字符串。 REGEXP_INSTR regexp_instr 返回字符串从指定位置开始,与指定规则匹配指定次数的子串的起始或结束位置。 REGEXP_REPLACE regexp_replace 将字符串中,与指定规则在指定次数匹配的子串替换为另一字符串。 REGEXP_SUBSTR regexp_substr 返回字符串中,从指定位置开始,与指定规则匹配指定次数的子串。 REPEAT repeat 返回将字符串重复指定次数后的结果。 REVERSE reverse 返回倒序字符串。 RTRIM rtrim 去除字符串的右端字符。 SPACE space 生成空格字符串。 SPLIT_PART split_part 按照分隔符拆分字符串,返回指定部分的子串。 SUBSTR substr 返回STRING类型字符串从指定位置开始,指定长度的子串。 SUBSTRING substring 返回STRING或BINARY类型字符串从指定位置开始,指定长度的子串。 TO_CHAR to_char 将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型值转为对应的STRING类型表示。 TO_JSON to_json 将指定的复杂类型输出为JSON字符串。 TOLOWER tolower 将字符串中的英文字符转换为小写形式。 TOUPPER toupper 将字符串中的英文字符转换为大写形式。 TRIM trim 去除字符串的左右两端字符。 URL_DECODE url_decode 将字符串从application/x-www-form-urlencoded MIME
格式转为常规字符。 URL_ENCODE url_encode 将字符串编码为application/x-www-form-urlencoded MIME
格式。 JSON_TUPLE json_tuple 在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。 LPAD lpad 将字符串向左补足到指定位数。 RPAD rpad 将字符串向右补足到指定位数。 REPLACE replace 将字符串中与指定字符串匹配的子串替换为另一字符串。 SOUNDEX soundex 将普通字符串替换为SOUNDEX字符串。 SUBSTRING_INDEX substring_index 截取字符串指定分隔符前的字符串。 TRANSLATE translate 将A出现在B中的字符串替换为C字符串。 REGEXP_EXTRACT_ALL regexp_extract_all 在字符串中查找所有出现的正则表达式匹配的子字符串,并把找到的字符串以数组形式返回。
7、复杂类型函数
MaxCompute SQL支持的复杂类型函数如下。其中JSON函数的使用限制请参见JSON函数的使用限制。
函数 小写 功能 ARRAY函数 array函数 ALL_MATCH all_match 判断ARRAY数组中是否所有元素都满足指定条件。 ANY_MATCH any_match 判断ARRAY数组中是否存在满足指定条件的元素。 ARRAY array 使用给定的值构造ARRAY。 ARRAY_CONTAINS array_contains 检测指定的ARRAY中是否包含指定的值。 ARRAY_DISTINCT array_distinct 去除ARRAY数组中的重复元素。 ARRAY_EXCEPT array_except 找出在ARRAY A中,但不在ARRAY B中的元素,并去掉重复的元素后,以ARRAY形式返回结果。 ARRAY_INTERSECT array_intersect 计算两个ARRAY数组的交集。 ARRAY_JOIN array_join 将ARRAY数组中的元素按照指定字符串进行拼接。 ARRAY_MAX array_max 计算ARRAY数组中的最大值。 ARRAY_MIN array_min 计算ARRAY数组中的最小值。 ARRAY_POSITION array_position 计算指定元素在ARRAY数组中第一次出现的位置。 ARRAY_REDUCE array_reduce 将ARRAY数组的元素进行聚合。 ARRAY_REMOVE array_remove 在ARRAY数组中删除指定元素。 ARRAY_REPEAT array_repeat 返回将指定元素重复指定次数后的ARRAY数组。 ARRAY_SORT array_sort 将ARRAY数组的元素进行排序。 ARRAY_UNION array_union 计算两个ARRAY数组的并集并去掉重复元素。 ARRAYS_OVERLAP arrays_overlap 判断两个ARRAY数组中是否包含相同元素。 ARRAYS_ZIP arrays_zip 合并多个ARRAY数组。 CONCAT concat 将ARRAY数组或字符串连接在一起。 EXPLODE explode 将一行数据转为多行的UDTF。 FILTER filter 将ARRAY数组中的元素进行过滤。 INDEX index 返回ARRAY数组指定位置的元素值。 POSEXPLODE posexplode 将指定的ARRAY展开,每个Value一行,每行两列分别对应数组从0开始的下标和数组元素。 SIZE size 返回指定ARRAY中的元素数目。 SLICE slice 对ARRAY数据切片,返回从指定位置开始、指定长度的数组。 SORT_ARRAY sort_array 为指定的数组中的元素排序。 TRANSFORM transform 将ARRAY数组中的元素进行转换。 ZIP_WITH zip_with 将2个ARRAY数组按照位置进行元素级别的合并。 MAP函数 map函数 EXPLODE explode 将一行数据转为多行的UDTF。 INDEX index 返回MAP类型参数中满足指定条件的Value。 MAP map 使用指定的Key-Value对建立MAP。 MAP_CONCAT map_concat 返回多个MAP的并集。 MAP_ENTRIES map_entries 将MAP中的Key、Value键值映射转换为STRUCT结构数组。 MAP_FILTER map_filter 将MAP中的元素进行过滤。 MAP_FROM_ARRAYS map_from_arrays 通过给定的ARRAY数组构造MAP。 MAP_FROM_ENTRIES map_from_entries 通过给定的结构体数组构造MAP。 MAP_KEYS map_keys 将参数MAP中的所有Key作为数组返回。 MAP_VALUES map_values 将参数MAP中的所有Value作为数组返回。 MAP_ZIP_WITH map_zip_with 对输入的两个MAP进行合并得到一个新MAP。 SIZE size 返回指定MAP中的K/V对数。 TRANSFORM_KEYS transform_keys 对MAP进行变换,保持Value不变,根据指定函数计算新的Key。 TRANSFORM_VALUES transform_values 对MAP进行变换,保持Key不变,根据指定函数计算新的Value。 STRUCT函数 struct函数 FIELD field 获取STRUCT中的成员变量的取值。 INLINE inline 将指定的STRUCT数组展开。每个数组元素对应一行,每行每个STRUCT元素对应一列。 STRUCT struct 使用给定Value列表建立STRUCT。 NAMED_STRUCT named_struct 使用给定的Name、Value列表建立STRUCT。 JSON函数 json函数 FROM_JSON from_json 根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。 GET_JSON_OBJECT get_json_object 在一个标准JSON字符串中,按照指定方式抽取指定的字符串。 JSON_TUPLE json_tuple 在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。 TO_JSON to_json 将指定的复杂类型输出为JSON字符串。 JSON_OBJECT json_object 生成JSON OBJECT,要求key和value成对出现。 JSON_ARRAY json_array 生成JSON ARRAY。将一个可能为空的JSON类型对象,转换为包含这些类型的数组。 JSON_EXTRACT json_extract 解析JSON表达式中对应json_path的数据,注意json_path非法时会报错。 JSON_EXISTS json_exists 查看json_path对应的JSON值是否存在。 JSON_PRETTY json_pretty 美化JSON,增加换行及空格。 JSON_TYPE json_type 返回JSON数据所属的数据类型名称。 JSON_FORMAT json_format 将JSON数据转换成STRING类型,默认不自动进行美化。 JSON_PARSE json_parse 将STRING类型转成JSON类型,非JSON格式转换为字符串会报错。 JSON_VALID json_valid 检查字符串是否为合法的JSON格式。 CAST cast 支持基本类型与JSON类型的转换。
8、加密函数
MaxCompute SQL支持的加密函数如下。
函数 小写 功能 SYM_ENCRYPT sym_encrypt 对表里的指定列做随机性加密,返回BINARY类型的密文。 SYM_DECRYPT sym_decrypt 对表里的指定已经随机性加密的列做解密,BINARY类型的明文。
9、其他函数
MaxCompute SQL支持的其他类型函数如下。
函数 小写 功能 BASE64 base64 将二进制表示值转换为BASE64编码格式字符串。 BETWEEN AND between and 筛选满足区间条件的数据。 CASE WHEN case when 根据表达式的计算结果,灵活地返回不同的值。 CAST cast 将表达式的结果转换为目标数据类型。 COALESCE coalesce 返回参数列表中第一个非NULL的值。 COMPRESS compress 对STRING或BINARY类型输入参数按照GZIP算法进行压缩。 CRC32 crc32 计算字符串或二进制数据的循环冗余校验值。 DECODE decode 实现if-then-else
分支选择的功能。 DECOMPRESS decompress 对BINARY类型输入参数按照GZIP算法进行解压。 GET_IDCARD_AGE get_idcard_age 根据身份证号码返回当前的年龄。 GET_IDCARD_BIRTHDAY get_idcard_birthday 根据身份证号码返回出生日期。 GET_IDCARD_SEX get_idcard_sex 根据身份证号码返回性别。 GET_USER_ID get_user_id 获取当前账号的账号ID。 GREATEST greatest 返回输入参数中最大的值。 HASH hash 根据输入参数计算Hash值。 IF if 判断指定的条件是否为真。 LEAST least 返回输入参数中最小的值。 MAX_PT max_pt 返回分区表的一级分区的最大值。 NULLIF nullif 比较两个入参是否相等。 NVL nvl 指定值为NULL的参数的返回结果。 ORDINAL ordinal 将输入变量按从小到大排序后,返回指定位置的值。 PARTITION_EXISTS partition_exists 查询指定的分区是否存在。 SAMPLE sample 对所有读入的列值,采样并过滤掉不满足采样条件的行。 SHA sha 计算字符串或二进制数据的SHA-1哈希值。 SHA1 sha1 计算字符串或二进制数据的SHA-1哈希值。 SHA2 sha2 计算字符串或二进制数据的SHA-2哈希值。 SIGN sign 判断正负值属性。 SPLIT split 将字符串按照指定的分隔符分割后返回数组。 STACK stack 将指定的参数组分割为指定的行数。 STR_TO_MAP str_to_map 将字符串按照指定的分隔符分割得到Key和Value。 TABLE_EXISTS table_exists 查询指定的表是否存在。 TRANS_ARRAY trans_array 将一行数据转为多行的UDTF,将列中存储的以固定分隔符格式分隔的数组转为多行。 TRANS_COLS trans_cols 将一行数据转为多行数据的UDTF,将不同的列拆分为不同的行。 UNBASE64 unbase64 将BASE64编码格式字符串转换为二进制表示值。 UNIQUE_ID unique_id 返回一个随机ID,运行效率高于UUID函数。 UUID uuid 返回一个随机ID。