Cloudera SQL中重命名属性并存入新变量的语法问题咨询
在Cloudera SQL中生成新变量的正确方式
首先来说你的代码里AS utterance_2不生效的原因——核心是CASE语句语法不完整,还有个小细节拖了后腿:
- 你的CASE只写了WHEN条件和对应结果,但没加闭合的
END关键字,SQL解析器没法识别这是一个完整的表达式,自然不会生成你想要的utterance_2字段; - 你写的
return_call’用了中文单引号,这会被SQL判定为语法错误,得改成英文单引号'return_call'。
接下来针对你的需求:保留原utterance字段完全不变,同时生成utterance_2字段——满足条件时用修改后的值,不满足时和原utterance内容一致。正确写法需要补全ELSE和END,同时明确选中原utterance字段:
CREATE TABLE new STORED AS PARQUET AS SELECT zone_name, queue_name, utterance, -- 保留原字段,完全不做修改 CASE WHEN TRIM(LOWER(utterance)) LIKE '%call%me%' THEN 'return_call' -- 满足条件时替换为目标值 ELSE utterance -- 不满足条件时,和原utterance内容保持一致 END AS utterance_2, -- 给CASE表达式的结果命名为utterance_2 wrap_code FROM old;
关键逻辑拆解:
- 单独选中
utterance字段,确保原始数据完整保留; - CASE表达式里:
WHEN子句精准匹配你指定的条件(转小写、去首尾空格后包含"call"和"me");ELSE子句指定不满足条件时的默认值——这里直接复用原utterance,就能实现「未修改的属性同时出现在两个字段」的需求;- 必须用
END闭合CASE表达式,再通过AS utterance_2给新字段命名,这才是完整的SQL语法。
如果你的需求是不满足条件时utterance_2为空,只需要把ELSE utterance改成ELSE NULL即可,不过根据你的描述,应该是前者的需求更贴合。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

