如何读取放置在 HDFS 上的 csv/tsv 文件的时间戳列,当一个包含 Timestamp 类型字符串列的 csv/tsv 文件被放置在 HDFS 上,读入一个表,然后需要将该列插入另一个表的过程。我想知道 csv / tsv 文件的 Timestamp 类型字符串是否可以像 Hive 的 Timestamp 类型一样读取?
发现:
- 如果您使用的是 Hive 1.2.0 或更高版本,请按照https://issues.apache.org/jira/browse/HIVE-9298 中所述格式化每个表的时间戳。
- 在此之前,为了将包含 Timestamp 类型字符串列的 csv/tsv 文件读取为外部表,最好将其转换为 unixtime 并输出。并且当插入到另一个表中时,它会通过 Hive 的查询转换为 Timestamp 类型。
1. 如果您使用的是 Hive 1.2.0 或更高版本
如果创建了表,将时间戳格式设置为读取csv/tsv文件的表的serdeproperty,如下所示:
ALTER TABLE hogehoge_table SET SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd HH:mm:ss");
从现在开始创建表时,最好使用 DDL 进行设置。
CREATE EXTERNAL TABLE hogehoge_table ( |
在任何情况下,target_column 都可以选择为 Hive 的时间戳格式。
2. Hive 1.2.0以前版本
创建表读取csv/tsv文件时,设置为unixtime格式而不是Timestamp类型的字符串。
CREATE EXTERNAL TABLE hogehoge_table ( |
将它插入另一个表时,它会被 SELECT 语句转换:
INSERT OVERWRITE TABLE fugafuga_table |