在INTEGER和TIMESTAMP数据类型之间进行选择

时间:2017-01-16 09:50:16

标签: amazon-redshift

为了坚持日期和目的时间值,我可以自然地使用Redshift中的TIMESTAMP数据类型。但是,我倾向于仅依靠INTEGER时间戳。我也可以使用INTEGER而不是原生TIMESTAMP数据类型,例如,我可以轻松地将它们转换为SELECT TIMESTAMP 'epoch' + intTime * INTERVAL '1 second' from table_name;。由于我只需要解析第二个,INTEGER应该没问题。

一个优点,INTEGER数据类型是4个字节,TIMESTAMP数据类型是8个字节,所以我想我可以节省一些磁盘空间和I / O时间。其次,我只想让Redshift与dynamodb数据库保持同步,因为我使用Number数据类型作为日期和时间。时间在dynamodb。

在Redshift,date& time field(intTime)将成为复合排序键的一部分,我将非常依赖于基于日期和时间的过滤,排序和分组。如果我在排序,过滤和分组方面使用INTEGER而不是TIMESTAMP,那么是否会有任何性能损失,因为INTEGER主要需要在EXTRACT函数中考虑它将成为复合排序键的一部分。请查看以下查询以供参考。

SELECT EXTRACT(doy from TIMESTAMP 'epoch' + intTime * INTERVAL '1 second'), count(*)  AS count
FROM table_name
WHERE TIMESTAMP 'epoch' + intTime * INTERVAL '1 second' BETWEEN '2016-12-15  00:00:00' AND '2016-12-15  23:59:59'
  AND EXTRACT(dow FROM TIMESTAMP 'epoch' + intTime * INTERVAL '1 second') IN (5, 6)
GROUP BY EXTRACT(doy FROM TIMESTAMP 'epoch' + intTime * INTERVAL '1 second')
ORDER BY count DESC;

0 个答案:

没有答案