Amazon Athena 获取过去一小时的数据

Pet*_*lev 3 sql amazon-s3 amazon-web-services amazon-athena aws-glue

我在 AWS Athena 表中有一些数据行,我正在尝试获取过去 1 小时的数据。我正在使用 awswrangler,我将在下面发布我的代码片段。基本上,我不想使用 Python 查询所有数据,然后仅过滤掉最后 1 小时的数据,而是想在 Athena SQL 查询中执行此操作,以便获得更快的响应(从而缩短程序的执行时间)。我的代码是:

import awswrangler as wr
import boto3

session=boto3.Session()
df = wr.athena.read_sql_query(f"""SELECT *
                                  FROM data_table""",
                                  database="database",
                                  keep_files = False,
                                  boto3_session = session).sort_values('timestamp')
Run Code Online (Sandbox Code Playgroud)

我的进度:我可以使用 获取当前时间戳"SELECT CURRENT_TIMESTAMP",但这将以日期格式返回时间戳。为了获得最后 1 小时,我的想法是将 1 小时也转换为毫秒,然后从当前时间戳的毫秒中减去它并将其应用为过滤器。

笔记!timestamp表中的单位是毫秒。

Tim*_*ott 6

一种选择是转换时间戳,然后通过从当前时间减去一小时进行过滤。

假设时间戳中的值是自纪元以来的毫秒数,您可以使用from_unixtime

根据您提供的示例值来查看其工作原理:

select from_unixtime(1650578683860/1000e0)
Run Code Online (Sandbox Code Playgroud)

然后给出结果:

2022-04-21 22:04:43.860
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 DATE_ADD 并从 CURRENT_STAMP 中减去一个小时,因此 where 子句将类似于:

WHERE from_unixtime("timestamp"/1000e0) >= DATE_ADD('hour', -1, CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)