Q37 — AWS DEA-C01 第1章
第 37/100 题 | ← 返回第1章
一名数据工程师正使用 Amazon Athena 分析存储在 Amazon S3 中的销售数据。该工程师编写了一个查询,从名为 sales_data 的表中检索 2023 年若干产品的销售额。但该查询未返回 sales_data 表中所有产品的结果。数据工程师需排查此查询以解决问题。 原始查询如下: SELECT product_name, sum(sales_amount) FROM sales_data WHERE year = 2023 GROUP BY product_name
- A. 将 sum(sales_amount) 替换为 count(*) 进行聚合。
- B. 将 WHERE year = 2023 改为 WHERE extract(year FROM sales_data) = 2023。 ✓
- C. 在 GROUP BY 子句后添加 HAVING sum(sales_amount) > 0。
- D. 移除 GROUP BY 子句。
正确答案: B. 将 WHERE year = 2023 改为 WHERE extract(year FROM sales_data) = 2023。
解析
问题根源在于 WHERE 子句中直接使用 year = 2023,但 sales_data 表中很可能不存在名为 year 的列,或该字段并非独立整型列而是嵌套在时间戳字段中。Athena 支持对时间戳类型列(如 event_time)使用 extract(year FROM event_time) 提取年份,这是标准且可靠的日期过滤方式。选项 A 改变聚合语义,无法解决缺失结果问题;选项 C 的 HAVING 子句过滤的是分组后结果,不能恢复被 WHERE 错误过滤掉的行;选项 D 移除 GROUP BY 将导致语法错误或聚合失效。因此正确修改是 B,前提是将 sales_data 替换为实际的时间戳列名(如 event_time),题目中表述为简写,实践中需修正列名。