SHA2 计算 SHA-2 哈希
SHA2 计算 SHA-224、SHA-256、SHA-384 或 SHA-512 哈希,返回十六进制字符串。MaxCompute、StarRocks、Doris、Hive、Spark 和 Flink 都有 SHA2,第二个参数是位长。位长写 0 时,只有部分引擎按 256 处理。
各引擎写法
| 引擎 | 支持 | 写法 | 说明 | 依据 |
|---|---|---|---|---|
| MaxCompute | 支持 | SHA2(expr, number) | number 取 224、256、384、512 或 0,0 等同于 256。任一参数为 NULL 时返回 NULL。 | 官方文档 |
| Hologres | 不支持 | — | Hologres 字符串函数文档中没有找到 SHA2,需要在实例中确认。 | 待核实 |
| StarRocks | 支持 | sha2(expr, hash_length) | hash_length 取 224、256、384、512 或 0,0 等同于 256。取其他值时返回 NULL。 | 官方文档 |
| Doris | 支持 | SHA2(input, digest_length) | digest_length 支持 224、256、384、512,必须是常量。文档没有列出 0。 | 官方文档 |
| Hive | 支持 | sha2(string/binary, int) | Hive 1.3.0 起提供。位长取 224、256、384、512 或 0,0 等同于 256,取其他值时返回 NULL。 | 官方文档 |
| Spark SQL | 支持 | sha2(expr, bitLength) | Spark 1.5.0 起提供。位长 0 等同于 256。 | 官方文档 |
| Flink SQL | 支持 | SHA2(string, hashLength) | hashLength 取 224、256、384 或 512,文档没有列出 0。 | 官方文档 |
迁移注意事项
- 位长写 0 的 SQL 在 MaxCompute、StarRocks、Hive 和 Spark 中等同于 SHA-256,但 Doris 和 Flink 的文档没有列出 0。迁移时把 0 改写成 256 最稳妥。
- 对多列拼接后算哈希时,NULL 会让整个结果变成 NULL。拼接前先用 COALESCE 替换 NULL,并加分隔符,做法和 MD5 一样。
- 结果是十六进制字符串,但大小写可能不同。跨引擎对数时,先统一用 LOWER 再比较。
示例
对手机号做 SHA-256 脱敏
SELECT SHA2(phone, 256) AS phone_hash FROM users;SELECT sha2(phone, 256) AS phone_hash FROM users;SELECT SHA2(phone, 256) AS phone_hash FROM users;SELECT sha2(phone, 256) AS phone_hash FROM users;SELECT sha2(phone, 256) AS phone_hash FROM users;SELECT SHA2(phone, 256) AS phone_hash FROM users;