如何将含CALCULATED的SAS查询转换为Amazon Athena查询
SAS 转 Amazon Athena 查询解决方案
Athena 基于 Presto/Trino SQL 引擎,不支持 SAS 里的 CALCULATED 关键字直接引用同 SELECT 子句中生成的列别名——因为 SELECT 子句的所有列是并行计算的,别名无法在同层级复用。要实现同一条查询里用刚生成的 fruit_color 计算 Warm_Cold,可以用以下两种方式:
方法1:重复 CASE 表达式逻辑
直接把生成 fruit_color 的 CASE 逻辑复用在 Warm_Cold 的判断里,这是最直接的写法:
SELECT CASE WHEN Fruit = 'Apple' THEN 'red' WHEN Fruit = 'banana' THEN 'yellow' WHEN Fruit = 'blueberry' THEN 'blue' END AS fruit_color, CASE WHEN ( CASE WHEN Fruit = 'Apple' THEN 'red' WHEN Fruit = 'banana' THEN 'yellow' WHEN Fruit = 'blueberry' THEN 'blue' END ) IN ('red', 'yellow') THEN 'warm_color' WHEN ( CASE WHEN Fruit = 'Apple' THEN 'red' WHEN Fruit = 'banana' THEN 'yellow' WHEN Fruit = 'blueberry' THEN 'blue' END ) = 'blue' THEN 'cold_color' END AS Warm_Cold FROM table1;
方法2:使用 WITH 子句定义计算列(无嵌套 SELECT)
如果觉得重复 CASE 太冗余,可以用 WITH 子句提前定义 fruit_color,这不算嵌套 SELECT,同样是单条查询:
WITH calculated_cols AS ( SELECT Fruit, CASE WHEN Fruit = 'Apple' THEN 'red' WHEN Fruit = 'banana' THEN 'yellow' WHEN Fruit = 'blueberry' THEN 'blue' END AS fruit_color FROM table1 ) SELECT fruit_color, CASE WHEN fruit_color IN ('red', 'yellow') THEN 'warm_color' WHEN fruit_color = 'blue' THEN 'cold_color' END AS Warm_Cold FROM calculated_cols;
注意事项
- Athena 里字符串必须用英文单引号
',示例中的中文引号’会导致语法错误,记得替换。 - 列别名如果是普通名称,无需用双引号包裹,只有包含特殊字符或需要大小写敏感时才需使用。
内容的提问来源于stack exchange,提问作者dajung Lee
相关产品推荐
相关产品推荐

