AWS athena sql 查询以获取不同的数据

Posted

技术标签:

【中文标题】AWS athena sql 查询以获取不同的数据【英文标题】:AWS athena sql query to get distinct data 【发布时间】:2020-05-16 18:21:55 【问题描述】:

以下是我在 Excel 表中的数据。此数据存储在 S3 存储桶中。这些数据会使用 Lambda 函数通过 DynamoDB 流数据不断更新。

rollno | status    |  name | place
----------------------------------
   1   | pending   |   x   | london 
   1   | approved  |   x   | london
   1   | progress  |   x   | london
   1   | completed |   x   | london
   2   | pending   |   y   | delhi
   2   | approved  |   y   | delhi
   2   | progress  |   y   | delhi
   3   | pending   |   z   | newyork
   3   | approved  |   z   | newyork 
   4   | pending   |   a   | seattle

如您所见,只有状态从pending -> approved -> progress -> completed 变为rollno,所有其他值相同。

表是在 AWS Athena 中创建的。我的目标是查询 Athena 并获得以下格式的结果(获取最新状态的详细信息)。

rollno | status    |  name | place
----------------------------------
   1   | completed |   x   | london
   2   | progress  |   y   | delhi
   3   | approved  |   z   | newyork
   4   | pending   |   a   | seattle

我是 SQL 新手。我能否获得有关编写 SQL 查询以获得高于预期结果的帮助。 我尝试过,但无法找到在 SQL 中执行此操作的方法。

【问题讨论】:

如果你有一个 updated_time 列,你可以简单地查询它并得到结果。 这并不能解决问题。即使我使用 updated_time 进行查询,我仍然会得到重复值 【参考方案1】:

如果您有 update_time 列,您可以分组并获取最新记录。在这里,我考虑将rollno 分组。如果你愿意,你也可以使用名称和地点进行分组

     select rolno,status,name,place from table_T where rollno||updated_time
     in
     (
     select rollno||max(updated_time) from table_T group by rollno
     )

【讨论】:

以上是关于AWS athena sql 查询以获取不同的数据的主要内容,如果未能解决你的问题,请参考以下文章

带有时间戳的 AWS Athena SQL 查询错误

AWS Athena (Presto) DISTINCT SQL 查询中的重复结果?

在 AWS Athena 中清理 SQL 查询参数

AWS Athena - 如何参数化 SQL 查询

使用 AWS Glue Scala 查询 Athena(添加分区)

AWS Athena 分析日志