微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 AWS Athena 表的 group by 子句中使用子字符串函数

如何解决在 AWS Athena 表的 group by 子句中使用子字符串函数

我的“date_validation”列是字符串类型并显示为“2018-05-22 13:38:59.0”,因此要将其转换为日期,必须使用子字符串和“date_parse”函数来获得类似“2014- 02-26 00:00:00.000'。

我需要按 date_validation 对登机数进行分组,因为一天有很多验证。但是不能这样做,因为当我使用 group by 时它给出了错误,如下所示。

 SELECT
    DATE_PARSE(SUBSTR(date_validation,1,10),'%Y-%m-%d'),run_route_code,stop_label,COUNT(boardings)
 FROM "raw_XX"."validations"
 WHERE
    run_route_code = 'XXX'
GROUP BY
    DATE_PARSE(SUBSTR(date_validation,stop_label
ORDER BY
    date_validation;

错误是说

Syntax_ERROR: line 3:107: '"date_validation"' 必须是聚合表达式或出现在 GROUP BY 子句中'

如果我直接在 group by 子句中使用 date_validation 列,则它不是分组,而是每天显示所有值。 请给我一个建议。

请注意,不能对日期做任何更改,因为它的原始表和巨大的分区表现在位于原始存储桶上。

解决方法

您看到的错误实际上是由 ORDER BY 子句引起的,该子句引用了 date_validation 列。这里的问题是,当 ORDER BY 被评估时,只有日期/子字符串可用,而不是原始的 date_validation 列。使用 DATE_PARSE(...) 版本,您的查询应该可以工作:

SELECT
    DATE_PARSE(SUBSTR(date_validation,1,10),'%Y-%m-%d'),run_route_code,stop_label,COUNT(boardings)
 FROM "raw_XX"."validations"
 WHERE
    run_route_code = 'XXX'
GROUP BY
    DATE_PARSE(SUBSTR(date_validation,stop_label
ORDER BY
    DATE_PARSE(SUBSTR(date_validation,'%Y-%m-%d');

注意:您也可以在这里使用 ORDER BY 1,这是缩写,但我提供了上面的解决方案,因为它清楚地说明了错误的来源/解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。