mysql - 当时间戳是大整数时,有没有办法使用 mySQL 和 PrestoDB 在 AWS Athena 中提取数据范围?
问题描述
我正在尝试从我特别感兴趣的表中查询,以从timestamp
列中提取过去 7 天。该timestamp
列已作为 存储在表中big int
。
在使用 FROM_UNIXTIME(timestamp) 将“big int”时间戳转换为“datetime”后,我尝试使用它。
我试图提取过去 7 天(从 11 月 15 日开始)的时间戳的查询如下 -
SELECT * FROM activation WHERE FROM_UNIXTIME(timestamp) > '+51819-11-15' LIMIT 10;
基本上在将“大整数”转换为“日期时间”之后,我查看了时间戳列,提取了一个日期,在上面的示例中显示我获取的数据是 2019 年 11 月 15 日(根本不是运行此查询的最有效方式)
当我在 Athena 中运行查询时,出现以下错误 -
SYNTAX_ERROR: line 1:57: '>' cannot be applied to timestamp, varchar(12)
有人可以帮助我以更好/更有效的方式在 Athena 中实现这一目标。
谢谢!
解决方案
我建议颠倒逻辑并将存储的 unix 时间戳与表示 7 天前的时间戳的值进行比较。这种方法的优点是查询将愉快地使用timestamp
列上的现有索引。
在 MySQL 中:
SELECT * FROM activation WHERE timestamp > UNIX_TIMESTAMP() - 7 * 24 * 60 * 60 LIMIT 10;
7 * 24 * 60 * 60
以秒表示 7 天。
这也可以表示为:
SELECT * FROM activation WHERE timestamp > UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY) LIMIT 10;
在 PrestoDB 中:
SELECT *
FROM activation
WHERE timestamp > TO_UNIXTIME(CURRENT_TIMESTAMP - INTERVAL '7' DAY) LIMIT 10;
推荐阅读
- anaconda - 更新后的 Anaconda/Spyder 问题:缺少依赖项
- elasticsearch - 如何获取与 Solr 查询匹配的文档的准确计数
- python - 如何在 Python 中将特殊字符规范化为 utf-8?
- python - for循环中的索引
- html - 当我浏览语言 django 并且页面扩展名是 html 时,源代码在浏览器上可见
- python - 与 asyncio 共享 Selenium 实例池
- api - Moodle API 创建用户
- laravel - Laravel 只能在隐身模式下访问
- shell - 通过命令行将 2 个单行 csv 文件合并到一个单行文件中
- reactjs - Webpack 5 和 Storybook 6 集成在 DefinePlugin.js 中引发错误