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表中的单位是毫秒。
一种选择是转换时间戳,然后通过从当前时间减去一小时进行过滤。
假设时间戳中的值是自纪元以来的毫秒数,您可以使用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)
| 归档时间: |
|
| 查看次数: |
5386 次 |
| 最近记录: |