如何在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
相关产品推荐
相关产品推荐

