☰
MaxCompute中其他函数
2026/9/29 11:12:06 网站建设 项目流程

文章目录

  • 一、分类总览
    • 1、函数分类
    • 2、全部函数
  • 二、条件判断类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 三、类型转换类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 四、NULL处理类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 五、压缩 / 校验 / Hash类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 六、身份证信息类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 七、账号 / 元数据判断类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 八、排序 / 采样类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 九、Map转换类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 十、行列转换类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 十一、随机ID类
    • 1、定义
    • 2、区别
    • 3、简单记忆
    • 4、案例
  • 十二、最容易混淆的函数对比
  • 十三、常用案例
    • 1、NULL兜底
    • 2、多级兜底
    • 3、安全转换数字
    • 4、最新分区
    • 5、条件分类
    • 6、生成Data ID
    • 7、判断表是否存在
    • 8、字符串转MAP
  • 十四、参考资料

一、分类总览

1、函数分类

分类主要解决的问题代表函数
1、条件判断类区间判断、条件分支、条件返回BETWEEN AND、CASE WHEN、IF、FAILIF
2、类型转换类数据类型转换和安全转换CAST、SAFE_CAST
3、NULL处理类空值兜底、相等转 NULLCOALESCE、NVL、NULLIF
4、压缩 / 校验 / Hash类GZIP 压缩、CRC 校验、Hash、SHACOMPRESS、DECOMPRESS、CRC32、HASH、SHA、SHA1、SHA2
5、身份证信息类从身份证号码提取年龄、出生日期、性别GET_IDCARD_AGE、GET_IDCARD_BIRTHDAY、GET_IDCARD_SEX
6、账号 / 元数据判断类获取账号 ID,判断表或分区是否存在GET_USER_ID、TABLE_EXISTS、PARTITION_EXISTS、MAX_PT
7、排序 / 采样类取排序后指定位置值、数据采样ORDINAL、SAMPLE
8、Map转换类将字符串解析为 MAPSTR_TO_MAP
9、行列转换类一行拆多行、多列转多行STACK、TRANS_ARRAY、TRANS_COLS
10、随机ID类生成随机唯一标识UNIQUE_ID、UUID

2、全部函数

分类函数功能
1、条件判断类BETWEEN AND判断数据是否落在指定区间内
1、条件判断类CASE WHEN按条件返回不同结果
1、条件判断类FAILIF条件满足时返回TRUE,否则触发自定义报错
1、条件判断类IF根据条件真假返回不同值
2、类型转换类CAST将表达式转换为目标数据类型
2、类型转换类SAFE_CAST尝试转换类型,失败时安全返回NULL
3、NULL处理类COALESCE返回参数列表中第一个非NULL值
3、NULL处理类NULLIF两个参数相等时返回NULL
3、NULL处理类NVL参数为NULL时返回替代值
4、压缩 / 校验 / Hash类COMPRESS使用GZIP压缩STRING或BINARY
4、压缩 / 校验 / Hash类CRC32计算字符串或二进制数据的 CRC32 校验值
4、压缩 / 校验 / Hash类DECOMPRESS使用GZIP解压BINARY
4、压缩 / 校验 / Hash类HASH对输入参数计算 Hash 值
4、压缩 / 校验 / Hash类SHA计算SHA-1Hash 值
4、压缩 / 校验 / Hash类SHA1计算SHA-1Hash 值
4、压缩 / 校验 / Hash类SHA2计算SHA-2Hash 值
5、身份证信息类GET_IDCARD_AGE根据身份证号码计算当前年龄
5、身份证信息类GET_IDCARD_BIRTHDAY根据身份证号码返回出生日期
5、身份证信息类GET_IDCARD_SEX根据身份证号码返回性别
6、账号 / 元数据判断类GET_USER_ID获取当前账号的账号 ID
6、账号 / 元数据判断类MAX_PT返回分区表一级分区的最大值
6、账号 / 元数据判断类PARTITION_EXISTS判断指定分区是否存在
6、账号 / 元数据判断类TABLE_EXISTS判断指定表是否存在
7、排序 / 采样类ORDINAL排序后返回指定位置的值
7、排序 / 采样类SAMPLE对数据进行采样并过滤未命中的行
8、Map转换类STR_TO_MAP按分隔符将字符串解析成MAP
9、行列转换类STACK将一组参数拆分成指定行数
9、行列转换类TRANS_ARRAY将分隔符数组字符串拆成多行
9、行列转换类TRANS_COLS将不同列拆分成多行
10、随机ID类UNIQUE_ID返回高效随机 ID
10、随机ID类UUID返回随机 ID

二、条件判断类

函数 / 表达式功能
BETWEEN AND判断是否位于区间
CASE WHEN多条件分支
IF二选一条件判断
FAILIF条件校验与主动报错

1、定义

  • BETWEEN AND:判断一个值是否位于指定闭区间。
  • CASE WHEN:支持多个条件分支。
  • IF:根据一个布尔条件返回两个结果之一。
  • FAILIF:用于数据校验,不满足预期时可主动抛出错误。

2、区别

对比区别
BETWEEN AND只判断区间
IF最适合简单二选一
CASE WHEN适合多条件、多分支
FAILIF主要用于数据校验和中断任务

IF与CASE WHEN:

两个结果二选一优先IF;条件多、分支多优先CASE WHEN。

3、简单记忆

BETWEEN= 在不在区间。
IF= 二选一。
CASE WHEN= 多分支。
FAILIF= 条件不符合就报错。

4、案例

-- 结果:trueSELECT1200BETWEEN1000AND1500;-- 结果:highSELECTCASEWHEN1200>=1000THEN'high'ELSE'low'END;-- 结果:highSELECTIF(1200>=1000,'high','low');-- 数据异常时主动报错SELECTFAILIF(order_cnt>=0,'order_cnt不能小于0')FROMsource_table;

三、类型转换类

函数功能
CAST强制类型转换
SAFE_CAST安全类型转换

1、定义

  • CAST:把表达式转换成指定目标类型,非法转换可能直接报错。
  • SAFE_CAST:尝试转换,转换失败时返回NULL,而不是让 SQL 失败。

2、区别

对比区别
CAST转换失败可能报错
SAFE_CAST转换失败返回NULL
使用场景数据质量可控用CAST;脏数据较多时SAFE_CAST更稳妥

3、简单记忆

CAST= 强转。
SAFE_CAST= 转不了就NULL。

4、案例

-- 结果:123SELECTCAST('123'ASBIGINT);-- 结果:NULLSELECTSAFE_CAST('abc'ASBIGINT);

四、NULL处理类

函数功能
COALESCE多参数取第一个非 NULL
NVLNULL 时给默认值
NULLIF相等时变 NULL

1、定义

  • COALESCE:从左到右返回第一个非NULL值。
  • NVL:第一个参数为NULL时返回第二个参数。
  • NULLIF:两个参数相等时返回NULL,否则返回第一个参数。

2、区别

对比区别
COALESCE可传多个候选值
NVL主要是一个值 + 一个默认值
NULLIF不是填补 NULL,而是把某些值转换成 NULL

3、简单记忆

COALESCE= 多选一,找第一个非空。
NVL= 空了就兜底。
NULLIF= 一样就置空。

4、案例

-- 结果:ASELECTCOALESCE(NULL,NULL,'A','B');-- 结果:0SELECTNVL(NULL,0);-- 结果:NULLSELECTNULLIF(100,100);

五、压缩 / 校验 / Hash类

函数功能
COMPRESSGZIP 压缩
DECOMPRESSGZIP 解压
CRC32CRC32 校验
HASH通用 Hash
SHASHA-1
SHA1SHA-1
SHA2SHA-2

1、定义

这一类用于数据压缩、校验、散列和摘要计算。

2、区别

对比区别
COMPRESS / DECOMPRESS压缩 / 解压,使用GZIP
CRC32更偏数据完整性校验
HASH通用散列,支持多个参数
SHA / SHA1都计算SHA-1
SHA2支持更强的SHA-2系列

需要注意:

Hash 值相同不代表输入一定相同,存在哈希碰撞可能。

3、简单记忆

COMPRESS压。
DECOMPRESS解。
CRC32校验。
HASH通用散列。
SHA / SHA1= SHA-1。
SHA2= SHA-2。

4、案例

-- 返回 BINARY 压缩结果SELECTCOMPRESS('hello');-- 结果:hello, worldSELECTCAST(DECOMPRESS(COMPRESS('hello, world'))ASSTRING);-- 结果:2743272264SELECTCRC32('ABC');-- 返回 Hash 值SELECTHASH('A',100);-- 返回 SHA-1SELECTSHA('abc');-- 返回 SHA-1SELECTSHA1('abc');-- 返回 SHA-256SELECTSHA2('abc',256);

六、身份证信息类

函数功能
GET_IDCARD_AGE获取年龄
GET_IDCARD_BIRTHDAY获取出生日期
GET_IDCARD_SEX获取性别

1、定义

这三个函数都基于中国居民身份证号码进行解析,并会校验身份证合法性。

2、区别

函数返回
GET_IDCARD_AGE当前年龄,BIGINT
GET_IDCARD_BIRTHDAY出生日期,DATETIME
GET_IDCARD_SEXM或F,STRING

如果身份证校验不通过,返回NULL。

3、简单记忆

AGE年龄。
BIRTHDAY出生日期。
SEX性别。

4、案例

-- 返回身份证对应年龄SELECTGET_IDCARD_AGE(idcard_no)FROMuser_table;-- 返回身份证对应出生日期SELECTGET_IDCARD_BIRTHDAY(idcard_no)FROMuser_table;-- 返回 M 或 FSELECTGET_IDCARD_SEX(idcard_no)FROMuser_table;

七、账号 / 元数据判断类

函数功能
GET_USER_ID当前账号 ID
MAX_PT最大一级分区
PARTITION_EXISTS分区是否存在
TABLE_EXISTS表是否存在

1、定义

这一类主要用于获取当前账号信息,或在 SQL 中判断 MaxCompute 表、分区元数据。

2、区别

函数使用场景
GET_USER_ID获取当前执行账号
MAX_PT获取表最大一级分区值
PARTITION_EXISTS判断具体分区是否存在
TABLE_EXISTS判断表是否存在

你日常使用最多的是:

MAX_PT('table_name')获取最新分区。

3、简单记忆

GET_USER_ID= 我是谁。
MAX_PT= 最大分区。
PARTITION_EXISTS= 分区在不在。
TABLE_EXISTS= 表在不在。

4、案例

-- 返回当前账号 IDSELECTGET_USER_ID();-- 返回最大一级分区,例如 20260927SELECTMAX_PT('udi.src_shop_df');-- 判断指定分区是否存在SELECTPARTITION_EXISTS('udi.src_shop_df','ds=20260927');-- 判断表是否存在SELECTTABLE_EXISTS('udi.src_shop_df');

八、排序 / 采样类

函数功能
ORDINAL排序后取指定位置值
SAMPLE数据采样

1、定义

  • ORDINAL:将输入变量排序后返回指定位置的值。
  • SAMPLE:按采样规则过滤输入数据。

2、区别

两个函数用途完全不同:

函数主要用途
ORDINAL多个值中按大小取第 N 个
SAMPLE从大量数据中抽取部分记录

3、简单记忆

ORDINAL= 排序取位置。
SAMPLE= 抽样。

4、案例

-- 从输入值排序后取指定位置SELECTORDINAL(2,10,30,20);-- 按采样条件过滤数据SELECT*FROMsource_tableWHERESAMPLE(10,1);

九、Map转换类

函数功能
STR_TO_MAPSTRING 转 MAP

1、定义

STR_TO_MAP将带固定 Key-Value 分隔格式的字符串解析为MAP。

例如:

a:1,b:2,c:3

可以转成:

{a:1,b:2,c:3}

2、区别

与MAP函数相比:

函数区别
MAP已经有独立 Key、Value 时直接构造
STR_TO_MAP原始数据是一个完整字符串,需要先解析

3、简单记忆

STR_TO_MAP= String → Map。

4、案例

-- 结果:{a:1,b:2,c:3}SELECTSTR_TO_MAP('a:1,b:2,c:3',',',':')ASresult;

十、行列转换类

函数功能
STACK参数组拆成多行
TRANS_ARRAY分隔字符串拆成多行
TRANS_COLS多列转多行

1、定义

这一类都用于改变数据的行列形态。

  • STACK:把指定参数组拆成固定行数。
  • TRANS_ARRAY:把列中以分隔符保存的数组字符串拆为多行。
  • TRANS_COLS:把多个不同列转换成多行。

2、区别

对比区别
STACK静态参数组转多行
TRANS_ARRAY一个字符串列内部拆多行
TRANS_COLS多个列转成多行

3、简单记忆

STACK= 堆成多行。
TRANS_ARRAY= 字符串数组拆行。
TRANS_COLS= 列转行。

4、案例

-- 结果:拆成 2 行SELECTSTACK(2,'A',100,'B',200);-- 将逗号分隔字段拆成多行SELECTTRANS_ARRAY(2,',',shop_id,tag_list)FROMshop_table;-- 将多个指标列转换成多行SELECTTRANS_COLS(2,metric_a,metric_b)FROMsource_table;

十一、随机ID类

函数功能
UNIQUE_ID高效随机 ID
UUID随机 ID

1、定义

  • UNIQUE_ID:返回随机 ID,官方说明运行效率高于UUID。
  • UUID:返回随机 UUID。

2、区别

对比区别
UNIQUE_ID更偏高性能唯一标识生成
UUID标准随机 UUID,日常使用更直观
性能官方说明UNIQUE_ID高于UUID

3、简单记忆

只要随机 ID:UUID。
更关注执行效率:UNIQUE_ID。

4、案例

-- 返回随机 IDSELECTUNIQUE_ID();-- 返回随机 UUIDSELECTUUID();

十二、最容易混淆的函数对比

函数组合最核心区别
IFvsCASE WHEN简单二选一 vs 多条件分支
CASTvsSAFE_CAST失败可能报错 vs 失败返回 NULL
NVLvsCOALESCE两参数兜底 vs 多参数取第一个非 NULL
NVLvsNULLIFNULL 补值 vs 指定值转 NULL
COMPRESSvsDECOMPRESSGZIP 压缩 vs GZIP 解压
CRC32vsHASH校验值 vs 通用散列
SHAvsSHA1都是 SHA-1
SHA1vsSHA2SHA-1 vs SHA-2
MAX_PTvsPARTITION_EXISTS找最大分区 vs 判断指定分区
PARTITION_EXISTSvsTABLE_EXISTS判断分区 vs 判断表
STR_TO_MAPvsMAP字符串解析 MAP vs 直接构造 MAP
STACKvsTRANS_ARRAY静态值拆行 vs 分隔字符串拆行
TRANS_ARRAYvsTRANS_COLS单列数组字符串拆行 vs 多列转多行
UNIQUE_IDvsUUID更高效随机 ID vs 标准随机 UUID

十三、常用案例

1、NULL兜底

-- unit_price 为空时取 fixed_priceSELECTNVL(unit_price,fixed_price)ASunit_priceFROMsms_price;

2、多级兜底

-- 优先取 t1,其次 t2,最后取 0SELECTCOALESCE(t1.unit_price,t2.unit_price,0)ASunit_priceFROMsource_table;

3、安全转换数字

-- 非法数字返回 NULL,不中断任务SELECTSAFE_CAST(price_strASDOUBLE)ASpriceFROMsource_table;

4、最新分区

SELECT*FROMudi.src_shop_dfWHEREds=MAX_PT('udi.src_shop_df');

5、条件分类

SELECTCASEWHENamount>=1000THEN'高'WHENamount>=500THEN'中'ELSE'低'ENDASamount_levelFROMorder_table;

6、生成Data ID

SELECTUUID()ASdata_id,shop_id,shop_nameFROMshop_table;

7、判断表是否存在

SELECTTABLE_EXISTS('udi.src_shop_df')ASis_exists;

8、字符串转MAP

-- 结果:{platform:美团,city:北京}SELECTSTR_TO_MAP('platform:美团,city:北京',',',':')ASresult;

十四、参考资料

阿里云 MaxCompute 官方文档:

https://help.aliyun.com/zh/maxcompute/other-functions

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询