AWS Glue SQL Transform中CASE语句匹配失败问题排查
问题分析与修正方案
你的CASE语句写法有误,导致匹配失败,主要问题有两个:
CASE表达式类型错误
你用了CASE column_a的简单CASE语法,这种写法会把column_a的值和WHEN后面的内容做等值匹配,但你写的是条件判断(比如column_a LIKE '%_string_1%'),这会把布尔值(true/false)和column_a的字符串值比较,自然无法匹配。应该改用搜索CASE表达式,去掉CASE后面的列名,直接在WHEN后写判断条件。通配符与列引用错误
LIKE中的_是通配符,代表匹配任意单个字符,如果你的目标是匹配包含_string_1的字符串(下划线是实际字符),需要对下划线转义,比如写成%\_string_1%(Glue SQL支持用反斜杠转义实际下划线)。- 第二个WHEN里引用了
column_b,但这是你要创建的新列,在当前SELECT语句中还未生成,无法被引用,应该继续使用column_a。
修正后的代码
select * , CASE WHEN column_a LIKE '%\_string_1%' THEN 'String 1' WHEN column_a LIKE '%\_string_2%' THEN 'String 2' -- 可添加ELSE分支处理不匹配的情况 ELSE 'Other' END AS column_b from myDataSource
如果之前尝试精确匹配也失败,同样是CASE语法问题,修正后的精确匹配代码:
select * , CASE WHEN column_a = 'string_1' THEN 'String 1' WHEN column_a = 'string_2' THEN 'String 2' ELSE 'Other' END AS column_b from myDataSource
内容的提问来源于stack exchange,提问作者Wild Tarzan
相关产品推荐
相关产品推荐

