You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Amazon Athena中用DateTime格式查询Unix时间戳存储的数据?

在Amazon Athena中直接用日期格式过滤Unix时间戳字段的方法

Amazon Athena中的可行方案

Athena基于Presto/Trino SQL,完全支持直接用YYYY-MM-DD HH:MM格式过滤Unix时间戳字段,无需手动转换。以下是两种常用实现方式:

方式1:将日期字符串转为Unix时间戳匹配

使用date_parse解析日期字符串为时间戳类型,再通过to_unixtime转为秒级Unix时间戳,与server_time字段比较:

-- 过滤2024-06-12全天数据
SELECT *
FROM my_table
WHERE server_time BETWEEN to_unixtime(date_parse('2024-06-12', '%Y-%m-%d')) 
                      AND to_unixtime(date_parse('2024-06-13', '%Y-%m-%d'));

-- 精确到时分(如2024-06-12 10:30至2024-06-13 18:45)
SELECT *
FROM my_table
WHERE server_time BETWEEN to_unixtime(date_parse('2024-06-12 10:30', '%Y-%m-%d %H:%i')) 
                      AND to_unixtime(date_parse('2024-06-13 18:45', '%Y-%m-%d %H:%i'));

方式2:将Unix时间戳转为日期字符串匹配

把server_time转为可读的日期字符串后,直接与目标日期范围比较,逻辑更直观:

SELECT *
FROM my_table
WHERE date_format(from_unixtime(server_time), '%Y-%m-%d %H:%i') 
      BETWEEN '2024-06-12 00:00' AND '2024-06-13 23:59';

之前报错的原因

你尝试的SQL Server/MySQL/SQLite语法函数(如datediff、unix_timestamp、unixepoch)均不属于Athena支持的Presto/Trino函数,因此会触发报错。

Jupyter Notebook中的实现方案

在Jupyter中同样可以实现,有两种思路:

思路1:Python本地转换日期为Unix时间戳,再拼接SQL

用Python的datetime模块将日期字符串转为Unix时间戳,再生成查询语句执行:

from datetime import datetime
import pyathena

# 转换目标日期为秒级Unix时间戳
start_ts = int(datetime.strptime('2024-06-12 10:30', '%Y-%m-%d %H:%M').timestamp())
end_ts = int(datetime.strptime('2024-06-13 18:45', '%Y-%m-%d %H:%M').timestamp())

# 拼接并执行SQL
sql = f"SELECT * FROM my_table WHERE server_time BETWEEN {start_ts} AND {end_ts}"
with pyathena.connect() as conn:
    with conn.cursor() as cursor:
        cursor.execute(sql)
        results = cursor.fetchall()

思路2:直接执行Athena原生SQL

无需本地转换,直接在Jupyter中运行前文提到的Athena正确SQL语句,通过连接库(如pyathena)提交查询即可。

内容的提问来源于stack exchange,提问作者YazerieL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:17:23