将表从MySql导入RedShift,MySql必须是time
数据类型的列
+-----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| typecode | varchar(20) | NO | | NULL | |
| slot_start_time | time | NO | | NULL | |
| slot_end_time | time | NO | | NULL | |
| parent_id | int(11) | NO | | NULL | |
| createdon | datetime | NO | | NULL | |
| modifiedon | datetime | NO | | NULL | |
+-----------------+-------------+------+-----+---------+----------------+
Redshift没有时间数据类型,因为在导入表slot_start_time, slot_end_time
列后返回1970-01-01
,在这种情况下slot_start_time, slot_end_time
显示为Date
数据类型
当我ALTER
将Redshift中的两列作为时间戳时,它将返回' 01/01/70 HH:MM'
所以我如何才能在RedShift中节省时间。
答案 0 :(得分:4)
我强烈建议不要尝试这样的冒险。您最终可能会使用某些不兼容的数据类型,例如 string ,这可能实际上只是为了存储时间,但在 灾难性 时会是 灾难性 你真的开始查询你的数据。
在最坏的情况下,如果发现数据类型不兼容,Redshift可能甚至不会填充日期列,并且整个列将填充空值。
在Redshift表中,以
格式存储整个时间戳yyyy-mm-dd hh:mm:ss (使用格式中的任何占位符日期;在任何情况下,日期与您无关)
并使用任何函数在查询表时仅提取时间戳(如下图所示)。
答案 1 :(得分:0)
由于Redshift中没有时间列,您可以使用相同的日期,例如'1970-01-01',然后添加时间。
然后你就可以在该字段上运行date_part。
例如
select extract(hour from timestamp '2010-02-16 20:38:40');
date_part