Snowflake是否支持用Update SQL语句解码列中的UTF-8字节?
Snowflake 列中UTF-8转义字节序列解码更新方案
场景说明
表中列值混合了普通可读文本和\xHH格式的UTF-8转义字节序列,示例原始值:
These are actually Japanese characters \xe3\x81\xaa\xe3\x81\x9c\xe6\x97\xa5\xe9\x8a\x80\xe3\x81\xa0\xe3\x81\x91\xe9\x81\x95\xe3\x81\x86\xe3\x81\xae\xe3\x81\x8b\xef\xbc\x9f
需要将所有转义字节解码为对应UTF-8字符,最终得到结果:
These are actually Japanese characters なぜ日銀だけ違うのか?
要求方案可通用解码任意位置的UTF-8转义字节,不影响普通文本内容。
实现原理
直接用Snowflake内置函数完成批量转换,无需自定义UDF:
- 用正则匹配所有
\x加两位十六进制字符的转义片段 - 将转义片段的
\x前缀替换为%,转换为标准URL编码格式 - 调用URL解码函数自动将UTF-8编码的十六进制序列转为对应字符,普通文本部分不会被改动
通用UPDATE语句
假设表名为your_table,需要更新的列名为your_column,可直接执行以下语句:
UPDATE your_table SET your_column = URL_DECODE(REGEXP_REPLACE(your_column, '\\\\x([0-9a-fA-F]{2})', '%\\1')) -- 建议加WHERE条件仅过滤需要更新的记录,避免误改 -- WHERE your_column LIKE '%\\x%' ;
注意事项
- 执行全表更新前先通过SELECT验证转换结果,确认符合预期后再执行更新:
SELECT your_column AS original_value, URL_DECODE(REGEXP_REPLACE(your_column, '\\\\x([0-9a-fA-F]{2})', '%\\1')) AS decoded_value FROM your_table WHERE your_column LIKE '%\\x%' LIMIT 100; - 若担心存在不符合规则的
\x序列导致解码报错,可将URL_DECODE替换为TRY_URL_DECODE,遇到非法序列时会返回null,方便提前排查异常数据。
内容的提问来源于stack exchange,提问作者JRomeo
相关产品推荐
相关产品推荐

