Snowflake中字符串MAX()函数的工作原理解析
Snowflake 字符串类型 MAX() 函数的判定规则
核心结论
Snowflake 对字符串使用 MAX() 函数时,不会将字符串分解为编码值求和,而是按照**字典序(逐字符比较 Unicode 编码值)**来判断大小,最终返回排序最靠后的字符串。
具体判定逻辑
字符串的比较遵循以下规则:
- 从左到右逐字符对比,每个字符的大小由其对应的 Unicode 编码值决定(Snowflake 的 STRING 类型默认采用 UTF-8 编码,对应 Unicode 字符集)
- 一旦遇到第一个编码值不同的字符,该字符编码值更大的字符串整体判定为更大
- 如果所有字符都相同,则两个字符串相等
结合测试案例分析
你的两个字符串 "000000001bb1304f" 和 "000000001bb13059",前12个字符完全一致,差异出现在倒数第二个字符:
'4'的 Unicode 编码是U+0034'5'的 Unicode 编码是U+0035
因为U+0035 > U+0034,所以"000000001bb13059"整体更大,MAX()自然返回这个值。
验证测试代码(中文注释版)
-- 直接比较两个字符串,返回 true,说明前者小于后者 select '000000001bb1304f' < '000000001bb13059'; -- 创建临时表测试 MAX() 函数 create temporary table test (val STRING); insert into test values('000000001bb1304f'); insert into test values('000000001bb13059'); -- 执行 MAX(),返回 '000000001bb13059' select max(val) from test;
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

