如何删除Delta表中的<0xfeff>(BOM)字符?
在Azure Databricks中用SQL清理Delta表的BOM字符
完全可以用SQL直接处理Delta表中的BOM字符(<0xfeff>),以下是具体操作步骤:
第一步:验证BOM字符存在
先通过SQL查询确认哪些记录包含BOM字符。BOM字符U+FEFF对应的十进制ASCII码是65279,用CHAR(65279)来匹配:SELECT * FROM your_delta_table WHERE target_column LIKE CONCAT('%', CHAR(65279), '%');把
your_delta_table和target_column替换成你的表名和目标字段名。第二步:清理BOM字符
有两种常见方式:直接更新原表(Delta表支持ACID事务,可安全执行):
UPDATE your_delta_table SET target_column = REPLACE(target_column, CHAR(65279), '') WHERE target_column LIKE CONCAT('%', CHAR(65279), '%');若多个字段存在BOM,可在
SET后追加多个字段的替换逻辑,比如col1 = REPLACE(col1, CHAR(65279), ''), col2 = REPLACE(col2, CHAR(65279), '')。创建清理后的新表(适合需要保留原数据备份的场景):
CREATE OR REPLACE TABLE cleaned_delta_table AS SELECT REPLACE(col1, CHAR(65279), '') AS col1, REPLACE(col2, CHAR(65279), '') AS col2, -- 其他字段直接保留,无需处理 col3, col4 FROM your_delta_table;
注意事项
- 如果不确定哪些字段包含BOM,可遍历所有字符串类型字段逐一排查;
- 执行更新前建议先备份原表,避免操作失误导致数据丢失;
- 若BOM字符仅出现在字段开头,
LTRIM(target_column, CHAR(65279))也可生效,但REPLACE能覆盖字段中任意位置的BOM。
内容的提问来源于stack exchange,提问作者ChafikZ
相关产品推荐
相关产品推荐

