为了坚持日期和目的时间值,我可以自然地使用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;