如何创建列类型为Timestamp的外部Hive表

时间:2012-11-29 12:01:43

标签: timestamp hive hiveql

我想从包含HDFS中的纪元的文本文件创建外部Hive表。假设该文件位于/user/me/test.txt。这是文件内容:

1354183921
1354183922

我安装了Hive 0.8.1并且应该能够使用类型Timestamp,所以我创建了表:

hive> CREATE EXTERNAL TABLE test1 (epoch Timestamp)
      LOCATION '/user/me';

然后我查询了桌子:

SELECT * FROM test1;

并得到以下例外:

Failed with exception java.io.IOException:java.lang.IllegalArgumentException: 
Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

创建外部表时是否遗漏了任何内容?我很困惑,因为Hive(自0.8起)支持第二种Unix时代格式的时间戳:https://cwiki.apache.org/Hive/languagemanual-types.html#LanguageManualTypes-Timestamps

1 个答案:

答案 0 :(得分:2)

时间戳字符串必须采用错误消息和链接中指定的格式,yyyy-mm-dd hh:mm:ss [.fffffffff]。要使用包含epoch的数据,您必须定义为BIGINT,然后使用内置UDF from_unixtime()转换为表示日期的字符串。然后你可以使用另一个built-in UDF date functions来操纵这个日期。