我正在尝试从我特别感兴趣的表中查询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;


基本上将'big int'转换为'datetime'之后,我查看了timestamp列,拉出了一个日期,在上面的示例中显示了我获取的数据是2019年11月15日(根本不是运行此查询的最有效方法) )

当我在雅典娜中运行查询时,出现以下错误-

SYNTAX_ERROR: line 1:57: '>' cannot be applied to timestamp, varchar(12)


有人可以帮助我以更好/更有效的方式在雅典娜实现这一目标。

谢谢!

最佳答案

我建议反转逻辑,并将存储的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;

关于mysql - 当时间戳使用mySQL和PrestoDB较大时,是否可以在AWS Athena中提取数据范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58963481/

10-15 20:59