0、MaxCompute预置的函数分类

函数类型说明
日期函数支持处理DATE、DATETIME、TIMESTAMP等日期类型数据,实现加减日期、计算日期差值、提取日期字段、获取当前时间、转换日期格式等业务处理能力。
数学函数支持处理BIGINT、DOUBLE、DECIMAL、FLOAT等数值类型数据,实现转换进制、数学运算、四舍五入、获取随机数等业务处理能力。
窗口函数支持在指定的开窗列中,实现求和、求最大最小值、求平均值、求中间值、数值排序、数值偏移、抽样等业务处理能力。
聚合函数支持将多条输入记录聚合成一条输出值,实现求和、求平均值、求最大最小值、求平均值、参数聚合、字符串连接等业务处理能力。
字符串函数支持处理STRING类型字符串,实现截取字符串、替换字符串、查找字符串、转换大小写、转换字符串格式等业务处理能力。
复杂类型函数支持处理MAP、ARRAY、STRUCT及JSON类型数据,实现去重元素、聚合元素、元素排序、合并元素等业务处理能力。
加密函数支持处理STRING、BINARY类型的表数据,实现加密、解密等业务处理能力。
其他函数除上述函数之外,提供支持其他业务场景的函数。

1、日期函数

MaxCompute SQL提供了如下日期函数,您可以根据实际需要选择合适的日期函数,完成日期计算、日期转换。

函数小写功能
DATEADDdateadd按照指定的单位和幅度修改日期值。
DATE_ADDdate_add按照指定的幅度增减天数,与date_sub的增减逻辑相反。
DATE_FORMATdate_format将日期值转换为指定格式的字符串。
DATE_SUBdate_sub按照指定的幅度增减天数,与date_add的增减逻辑相反。
DATEDIFFdatediff计算两个日期的差值并按照指定的单位表示。
DATEPARTdatepart提取日期中符合指定时间单位的字段值。
DATETRUNCdatetrunc提取日期按照指定时间单位截取后的值。
FROM_UNIXTIMEfrom_unixtime将数字型的UNIX值转换为日期值。
GETDATEgetdate获取当前系统时间。
ISDATEisdate判断一个日期字符串能否根据指定的格式串转换为一个日期值。
LASTDAYlastday获取日期所在月的最后一天。
TO_DATEto_date将指定格式的字符串转换为日期值。
TO_CHARto_char将日期按照指定格式转换为字符串。
UNIX_TIMESTAMPunix_timestamp将日期转换为整型的UNIX格式的日期值。
WEEKDAYweekday返回日期值是当前周的第几天。
WEEKOFYEARweekofyear返回日期值位于当年的第几周。
ADD_MONTHSadd_months计算日期值增加指定月数后的日期。
CURRENT_TIMESTAMPcurrent_timestamp返回当前TIMESTAMP类型的时间戳。
CURRENT_TIMEZONEcurrent_timezone返回当前系统的时区信息。
DAYday返回日期值的天。
DAYOFMONTHdayofmonth返回日部分的值。
DAYOFWEEKdayofweek返回日期的星期值。
DAYOFYEARdayofyear返回日期是当年中的第几天。
EXTRACTextract获取日期TIMESTAMP中指定单位的部分。
FROM_UTC_TIMESTAMPfrom_utc_timestamp将一个UTC时区的时间戳转换为一个指定时区的时间戳。
HOURhour返回日期小时部分的值。
LAST_DAYlast_day返回日期值所在月份的最后一天日期。
MINUTEminute返回日期分钟部分的值。
MONTHmonth返回日期值所属月份。
MONTHS_BETWEENmonths_between返回指定日期值间的月数。
NEXT_DAYnext_day返回大于日期值且与指定周相匹配的第一个日期。
QUARTERquarter返回日期值所属季度。
SECONDsecond返回日期秒数部分的值。
TO_MILLISto_millis将指定日期转换为以毫秒为单位的UNIX时间戳。
YEARyear返回日期值的年。

2、数学函数

MaxCompute SQL提供了如下数学函数供您在开发过程中使用,您可以根据实际需要选择合适的数学函数,进行数据计算、数据转换相关操作。

函数小写功能
ABSabs计算绝对值。
ACOSacos计算反余弦值。
ASINasin计算反正弦值。
ATANatan计算反正切值。
ATAN2atan2计算expr1/expr2的反正切函数。
CEILceil计算向上取整值。
CONVconv计算进制转换值。
COScos计算余弦值。
COSHcosh计算双曲余弦值。
COTcot计算余切值。
EXPexp计算指数值。
FLOORfloor计算向下取整值。
ISNANisnan判断表达式的值是否是NaN。
LNln计算自然对数。
LOGlog计算log对数值。
NEGATIVEnegative返回表达式的负值。
POSITIVEpositive返回表达式的值。
POWpow计算幂值。
RANDrand返回随机数。
ROUNDround返回四舍五入到指定小数点位置的值。
SINsin计算正弦值。
SINHsinh计算双曲正弦值。
SQRTsqrt计算平方根。
TANtan计算正切值。
TANHtanh计算双曲正切值。
TRUNCtrunc返回截取到指定小数点位置的值。
BINbin计算二进制代码值。
CBRTcbrt计算立方根值。
CORRcorr计算皮尔逊系数。
DEGREESdegrees将弧度转换为角度。
Ee返回e的值。
FACTORIALfactorial计算阶乘值。
FORMAT_NUMBERformat_number将数字转化为指定格式的字符串。
HEXhex返回整数或字符串的十六进制格式。
LOG2log2计算以2为底的对数。
LOG10log10计算以10为底的对数。
PIpi返回π的值。
RADIANSradians将角度转换为弧度。
SIGNsign返回输入参数的符号。
SHIFTLEFTshiftleft计算按位左移值。
SHIFTRIGHTshiftright计算按位右移值。
SHIFTRIGHTUNSIGNEDshiftrightunsigned计算无符号按位右移值。
UNHEXunhex返回十六进制字符串所代表的字符串。
WIDTH_BUCKETwidth_bucket返回指定字段值落入的分组编号。

3、算术运算符

运算符说明
A+BA或B为NULL,返回NULL,否则返回A+B的结果。
A-BA或B为NULL,返回NULL,否则返回A-B的结果。
A*BA或B为NULL,返回NULL,否则返回A×B的结果。
A/BA或B为NULL,返回NULL,否则返回A÷B的结果。说明如果A和B为BIGINT类型,返回结果为DOUBLE类型。
A%BA或B为NULL,返回NULL,否则返回A÷B并取余数的结果。
+A仍然返回A。
-A如果A为NULL,返回NULL,否则返回-A。
A DIV BA或B为NULL,返回NULL,否则返回A DIV B的结果。

4、窗口函数

MaxCompute SQL提供了如下窗口函数,使用窗口函数对指定开窗列的数据灵活地进行分析处理工作。

函数小写功能
ROW_NUMBERrow_number计算行号。从1开始递增。
RANKrank计算排名。排名可能不连续。
DENSE_RANKdense_rank计算排名。排名是连续的。
PERCENT_RANKpercent_rank计算排名。输出百分比格式。
CUME_DISTcume_dist计算累计分布。
NTILEntile将数据顺序切分成N等份,返回数据所在等份的编号(从1到N)。
LAGlag取当前行往前(朝分区头部方向)第N行数据的值。
LEADlead取当前行往后(朝分区尾部方向)第N行数据的值。
FIRST_VALUEfirst_value取当前行所对应窗口的第一条数据的值。
LAST_VALUElast_value取当前行所对应窗口的最后一条数据的值。
NTH_VALUEnth_value取当前行所对应窗口的第N条数据的值。
CLUSTER_SAMPLEcluster_sample用户随机抽样。返回True表示该行数据被抽中。
COUNTcount计算窗口中的记录数。
MINmin计算窗口中的最小值。
MAXmax计算窗口中的最大值。
AVGavg对窗口中的数据求平均值。
SUMsum对窗口中的数据求和。
MEDIANmedian计算窗口中的中位数。
STDDEVstddev计算总体标准差。是STDDEV_POP的别名。
STDDEV_SAMPstddev_samp计算样本标准差。

5、聚合函数

MaxCompute SQL支持的聚合函数如下。

函数小写功能
AVGavg计算平均值。
COUNTcount计算记录数。
COUNT_IFcount_if计算指定表达式为True的记录数。
MAXmax计算最大值。
MINmin计算最小值。
MEDIANmedian计算中位数。
STDDEVstddev计算总体标准差。
STDDEV_SAMPstddev_samp计算样本标准差。
SUMsum计算汇总值。
WM_CONCATwm_concat用指定的分隔符连接字符串。
ANY_VALUEany_value在指定范围内任选一个值返回。
APPROX_DISTINCTapprox_distinct返回输入的非重复值的近似数目。
ARG_MAXarg_max返回指定列的最大值对应行的列值。
ARG_MINarg_min返回指定列的最小值对应行的列值。
MAX_BYmax_by返回指定列的最大值对应行的列值。
MIN_BYmin_by返回指定列的最小值对应行的列值。
COLLECT_LISTcollect_list将指定的列聚合为一个数组。
COLLECT_SETcollect_set将指定的列聚合为一个无重复元素的数组。
COVAR_POPcovar_pop计算指定两个数值列的总体协方差。
COVAR_SAMPcovar_samp计算指定两个数值列的样本协方差。
NUMERIC_HISTOGRAMnumeric_histogram统计指定列的近似直方图。
PERCENTILEpercentile计算精确百分位数,适用于小数据量。
PERCENTILE_APPROXpercentile_approx计算近似百分位数,适用于大数据量。
VARIANCE/VAR_POPvariance/var_pop计算指定数值列的方差。
VAR_SAMPvar_samp计算指定数值列的样本方差。
BITWISE_OR_AGGbitwise_or_agg计算输入Value的bit OR聚合值。
BITWISE_AND_AGGbitwise_and_agg计算输入Value的bit AND聚合值。
MAP_AGGmap_agg构造两个输入字段的Map。
MULTIMAP_AGGmultimap_agg构造两个输入字段的Map,第一个字段作为Map的Key,第二个字段构造数组作为Map的Value。
MAP_UNIONmap_union对输入Map进行Union操作来构造输出Map。
MAP_UNION_SUMmap_union_sum对输入Map进行Union操作并对相同Key的Value求和来构造输出Map。
HISTOGRAMhistogram构造输入Map的Key值出现次数的Map。

6、字符串函数

MaxCompute SQL支持的字符串函数如下。其中字符串函数的使用限制请参见字符串函数的使用限制

函数小写功能
ASCIIascii返回字符串的第一个字符的ASCII码。
CHAR_MATCHCOUNTchar_matchcount计算A字符串出现在B字符串中的字符个数。
CHRchr将指定ASCII码转换成字符。
CONCATconcat将字符串连接在一起。
CONCAT_WSconcat_ws将参数中的所有字符串按照指定的分隔符连接在一起。
DECODEdecode将字符串按照指定编码格式解码。
ENCODEencode将字符串按照指定编码格式编码。
FIND_IN_SETfind_in_set在以逗号分隔的字符串中查找指定字符串的位置。
FORMAT_NUMBERformat_number将数字转化为指定格式的字符串。
FROM_JSONfrom_json根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。
GET_JSON_OBJECTget_json_object在一个标准JSON字符串中,按照指定方式抽取指定的字符串。
INITCAPinitcap将字符串转换为固定格式的字符串,单词之间以空格分隔。转换后的格式为:字符串中每个单词首字母大写,其余小写。
INSTRinstr计算A字符串在B字符串中的位置。
IS_ENCODINGis_encoding判断字符串是否可以从指定的A字符集转换为B字符集。
KEYVALUEkeyvalue将字符串拆分为Key-Value对,并将Key-Value对分开,返回Key对应的Value。
KEYVALUE_TUPLEkeyvalue_tuple将字符串拆分为多个Key-Value对,并将Key-Value对分开,返回多个Key对应的Value。
LENGTHlength计算字符串的长度。
LENGTHBlengthb计算字符串以字节为单位的长度。
LOCATElocate在字符串中查找另一指定字符串的位置。
LTRIMltrim去除字符串的左端字符。
MD5md5计算字符串的MD5值。
PARSE_URLparse_url对URL进行解析返回指定部分的信息。
PARSE_URL_TUPLEparse_url_tuple对URL进行解析返回多个部分的信息。
REGEXP_COUNTregexp_count计算字符串从指定位置开始,匹配指定规则的子串数。
REGEXP_EXTRACTregexp_extract将字符串按照指定规则拆分为组后,返回指定组的字符串。
REGEXP_INSTRregexp_instr返回字符串从指定位置开始,与指定规则匹配指定次数的子串的起始或结束位置。
REGEXP_REPLACEregexp_replace将字符串中,与指定规则在指定次数匹配的子串替换为另一字符串。
REGEXP_SUBSTRregexp_substr返回字符串中,从指定位置开始,与指定规则匹配指定次数的子串。
REPEATrepeat返回将字符串重复指定次数后的结果。
REVERSEreverse返回倒序字符串。
RTRIMrtrim去除字符串的右端字符。
SPACEspace生成空格字符串。
SPLIT_PARTsplit_part按照分隔符拆分字符串,返回指定部分的子串。
SUBSTRsubstr返回STRING类型字符串从指定位置开始,指定长度的子串。
SUBSTRINGsubstring返回STRING或BINARY类型字符串从指定位置开始,指定长度的子串。
TO_CHARto_char将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型值转为对应的STRING类型表示。
TO_JSONto_json将指定的复杂类型输出为JSON字符串。
TOLOWERtolower将字符串中的英文字符转换为小写形式。
TOUPPERtoupper将字符串中的英文字符转换为大写形式。
TRIMtrim去除字符串的左右两端字符。
URL_DECODEurl_decode将字符串从application/x-www-form-urlencoded MIME格式转为常规字符。
URL_ENCODEurl_encode将字符串编码为application/x-www-form-urlencoded MIME格式。
JSON_TUPLEjson_tuple在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。
LPADlpad将字符串向左补足到指定位数。
RPADrpad将字符串向右补足到指定位数。
REPLACEreplace将字符串中与指定字符串匹配的子串替换为另一字符串。
SOUNDEXsoundex将普通字符串替换为SOUNDEX字符串。
SUBSTRING_INDEXsubstring_index截取字符串指定分隔符前的字符串。
TRANSLATEtranslate将A出现在B中的字符串替换为C字符串。
REGEXP_EXTRACT_ALLregexp_extract_all在字符串中查找所有出现的正则表达式匹配的子字符串,并把找到的字符串以数组形式返回。

7、复杂类型函数

MaxCompute SQL支持的复杂类型函数如下。其中JSON函数的使用限制请参见JSON函数的使用限制

函数小写功能
ARRAY函数array函数
ALL_MATCHall_match判断ARRAY数组中是否所有元素都满足指定条件。
ANY_MATCHany_match判断ARRAY数组中是否存在满足指定条件的元素。
ARRAYarray使用给定的值构造ARRAY。
ARRAY_CONTAINSarray_contains检测指定的ARRAY中是否包含指定的值。
ARRAY_DISTINCTarray_distinct去除ARRAY数组中的重复元素。
ARRAY_EXCEPTarray_except找出在ARRAY A中,但不在ARRAY B中的元素,并去掉重复的元素后,以ARRAY形式返回结果。
ARRAY_INTERSECTarray_intersect计算两个ARRAY数组的交集。
ARRAY_JOINarray_join将ARRAY数组中的元素按照指定字符串进行拼接。
ARRAY_MAXarray_max计算ARRAY数组中的最大值。
ARRAY_MINarray_min计算ARRAY数组中的最小值。
ARRAY_POSITIONarray_position计算指定元素在ARRAY数组中第一次出现的位置。
ARRAY_REDUCEarray_reduce将ARRAY数组的元素进行聚合。
ARRAY_REMOVEarray_remove在ARRAY数组中删除指定元素。
ARRAY_REPEATarray_repeat返回将指定元素重复指定次数后的ARRAY数组。
ARRAY_SORTarray_sort将ARRAY数组的元素进行排序。
ARRAY_UNIONarray_union计算两个ARRAY数组的并集并去掉重复元素。
ARRAYS_OVERLAParrays_overlap判断两个ARRAY数组中是否包含相同元素。
ARRAYS_ZIParrays_zip合并多个ARRAY数组。
CONCATconcat将ARRAY数组或字符串连接在一起。
EXPLODEexplode将一行数据转为多行的UDTF。
FILTERfilter将ARRAY数组中的元素进行过滤。
INDEXindex返回ARRAY数组指定位置的元素值。
POSEXPLODEposexplode将指定的ARRAY展开,每个Value一行,每行两列分别对应数组从0开始的下标和数组元素。
SIZEsize返回指定ARRAY中的元素数目。
SLICEslice对ARRAY数据切片,返回从指定位置开始、指定长度的数组。
SORT_ARRAYsort_array为指定的数组中的元素排序。
TRANSFORMtransform将ARRAY数组中的元素进行转换。
ZIP_WITHzip_with将2个ARRAY数组按照位置进行元素级别的合并。
MAP函数map函数
EXPLODEexplode将一行数据转为多行的UDTF。
INDEXindex返回MAP类型参数中满足指定条件的Value。
MAPmap使用指定的Key-Value对建立MAP。
MAP_CONCATmap_concat返回多个MAP的并集。
MAP_ENTRIESmap_entries将MAP中的Key、Value键值映射转换为STRUCT结构数组。
MAP_FILTERmap_filter将MAP中的元素进行过滤。
MAP_FROM_ARRAYSmap_from_arrays通过给定的ARRAY数组构造MAP。
MAP_FROM_ENTRIESmap_from_entries通过给定的结构体数组构造MAP。
MAP_KEYSmap_keys将参数MAP中的所有Key作为数组返回。
MAP_VALUESmap_values将参数MAP中的所有Value作为数组返回。
MAP_ZIP_WITHmap_zip_with对输入的两个MAP进行合并得到一个新MAP。
SIZEsize返回指定MAP中的K/V对数。
TRANSFORM_KEYStransform_keys对MAP进行变换,保持Value不变,根据指定函数计算新的Key。
TRANSFORM_VALUEStransform_values对MAP进行变换,保持Key不变,根据指定函数计算新的Value。
STRUCT函数struct函数
FIELDfield获取STRUCT中的成员变量的取值。
INLINEinline将指定的STRUCT数组展开。每个数组元素对应一行,每行每个STRUCT元素对应一列。
STRUCTstruct使用给定Value列表建立STRUCT。
NAMED_STRUCTnamed_struct使用给定的Name、Value列表建立STRUCT。
JSON函数json函数
FROM_JSONfrom_json根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。
GET_JSON_OBJECTget_json_object在一个标准JSON字符串中,按照指定方式抽取指定的字符串。
JSON_TUPLEjson_tuple在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。
TO_JSONto_json将指定的复杂类型输出为JSON字符串。
JSON_OBJECTjson_object生成JSON OBJECT,要求key和value成对出现。
JSON_ARRAYjson_array生成JSON ARRAY。将一个可能为空的JSON类型对象,转换为包含这些类型的数组。
JSON_EXTRACTjson_extract解析JSON表达式中对应json_path的数据,注意json_path非法时会报错。
JSON_EXISTSjson_exists查看json_path对应的JSON值是否存在。
JSON_PRETTYjson_pretty美化JSON,增加换行及空格。
JSON_TYPEjson_type返回JSON数据所属的数据类型名称。
JSON_FORMATjson_format将JSON数据转换成STRING类型,默认不自动进行美化。
JSON_PARSEjson_parse将STRING类型转成JSON类型,非JSON格式转换为字符串会报错。
JSON_VALIDjson_valid检查字符串是否为合法的JSON格式。
CASTcast支持基本类型与JSON类型的转换。

8、加密函数

MaxCompute SQL支持的加密函数如下。

函数小写功能
SYM_ENCRYPTsym_encrypt对表里的指定列做随机性加密,返回BINARY类型的密文。
SYM_DECRYPTsym_decrypt对表里的指定已经随机性加密的列做解密,BINARY类型的明文。

9、其他函数

MaxCompute SQL支持的其他类型函数如下。

函数小写功能
BASE64base64将二进制表示值转换为BASE64编码格式字符串。
BETWEEN ANDbetween and筛选满足区间条件的数据。
CASE WHENcase when根据表达式的计算结果,灵活地返回不同的值。
CASTcast将表达式的结果转换为目标数据类型。
COALESCEcoalesce返回参数列表中第一个非NULL的值。
COMPRESScompress对STRING或BINARY类型输入参数按照GZIP算法进行压缩。
CRC32crc32计算字符串或二进制数据的循环冗余校验值。
DECODEdecode实现if-then-else分支选择的功能。
DECOMPRESSdecompress对BINARY类型输入参数按照GZIP算法进行解压。
GET_IDCARD_AGEget_idcard_age根据身份证号码返回当前的年龄。
GET_IDCARD_BIRTHDAYget_idcard_birthday根据身份证号码返回出生日期。
GET_IDCARD_SEXget_idcard_sex根据身份证号码返回性别。
GET_USER_IDget_user_id获取当前账号的账号ID。
GREATESTgreatest返回输入参数中最大的值。
HASHhash根据输入参数计算Hash值。
IFif判断指定的条件是否为真。
LEASTleast返回输入参数中最小的值。
MAX_PTmax_pt返回分区表的一级分区的最大值。
NULLIFnullif比较两个入参是否相等。
NVLnvl指定值为NULL的参数的返回结果。
ORDINALordinal将输入变量按从小到大排序后,返回指定位置的值。
PARTITION_EXISTSpartition_exists查询指定的分区是否存在。
SAMPLEsample对所有读入的列值,采样并过滤掉不满足采样条件的行。
SHAsha计算字符串或二进制数据的SHA-1哈希值。
SHA1sha1计算字符串或二进制数据的SHA-1哈希值。
SHA2sha2计算字符串或二进制数据的SHA-2哈希值。
SIGNsign判断正负值属性。
SPLITsplit将字符串按照指定的分隔符分割后返回数组。
STACKstack将指定的参数组分割为指定的行数。
STR_TO_MAPstr_to_map将字符串按照指定的分隔符分割得到Key和Value。
TABLE_EXISTStable_exists查询指定的表是否存在。
TRANS_ARRAYtrans_array将一行数据转为多行的UDTF,将列中存储的以固定分隔符格式分隔的数组转为多行。
TRANS_COLStrans_cols将一行数据转为多行数据的UDTF,将不同的列拆分为不同的行。
UNBASE64unbase64将BASE64编码格式字符串转换为二进制表示值。
UNIQUE_IDunique_id返回一个随机ID,运行效率高于UUID函数。
UUIDuuid返回一个随机ID。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐