Snowflake中Varchar数据清洗:将Unknown类值替换为Null
Snowflake数据清洗:替换Unknown为Null并处理特殊值
错误原因分析
先看你之前尝试的三个SQL问题:
- 第一个SQL:用
ORDER BY只是调整了记录的排序顺序,并没有修改Entity字段的实际值,所以不会把Unknown替换成Null,只是把这类记录移到了末尾。 - 第二个SQL:Snowflake的条件判断函数是
IFF而非IF,同时语法存在两处错误:select的列列表最后一个字段"Method"后缺少逗号,且IFF的写法多了一个右括号,正确语法应为IFF(条件, 真值, 假值)。 - 第三个SQL:
select的列列表最后一个字段"Method"后未加逗号,导致后续的IFF函数被识别为语法错误,列与列之间必须用逗号分隔。
正确SQL实现方案
要同时实现替换含Unknown的字段为Null和处理特殊值(如'2018 Quora hack'改为'Quora'),推荐使用CASE表达式(逻辑更清晰,适合多条件判断):
SELECT "Sector", "Records Number", "Method", "Year", "Records", "Organization type", CASE -- 匹配所有包含Unknown的字符串,替换为Null WHEN "Entity" LIKE '%Unknown%' THEN NULL -- 处理特定的特殊值 WHEN "Entity" = '2018 Quora hack' THEN 'Quora' -- 其他情况保留原字段值 ELSE "Entity" END AS "Entity" FROM data_breaches;
如果偏好使用IFF嵌套(适合条件较少的场景),也可以这样写:
SELECT "Sector", "Records Number", "Method", "Year", "Records", "Organization type", IFF( "Entity" LIKE '%Unknown%', NULL, IFF("Entity" = '2018 Quora hack', 'Quora', "Entity") ) AS "Entity" FROM data_breaches;
说明
LIKE '%Unknown%'会匹配所有包含"Unknown"的字符串(比如"Unknown government agency"和"Unknown"都会被命中)。- 如果还有其他需要处理的特殊值,只需在
CASE中新增WHEN条件即可。
内容的提问来源于stack exchange,提问作者Omnibus
相关产品推荐
相关产品推荐

