1

在 Hive 中,我正在尝试在日志文件上创建表,我有以下格式的数据。

  • 1000000000012311 1373346000 21.4 XX

  • 1000000020017331 1358488800 16.9 年

在第二个字段中是 Unix 时间戳。我正在写以下 HIVE 查询:

CREATE EXTERNAL TABLE log(user STRING, tdate TIMESTAMP, spend DOUBLE, state STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n' LOCATION '/user/XXX/YYY/ZZZ';

表已创建。但是当我试图从表中获取数据Select * form log limit 10'; 时,出现以下错误。

失败并出现异常 java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: 评估 tdate 时出错

我已经检查了 HIVE 手册并谷歌了它,但没有得到任何解决方案。

4

2 回答 2

2

对于 epoch,您可以定义为 BIGINT,然后使用内置 UDF from_unixtime() 转换为表示日期的字符串。诸如“从日志中选择 from_unixtime(tdate)”之类的东西

此链接上的类似帖子:How to create an external Hive table with column typed Timestamp

于 2013-09-25T05:40:33.433 回答
0

Hive 支持数据类型 timestamp 但与 JDBC 一起使用时不能接受 Timestamp 作为数据类型。但这在早期版本中是一个问题。从 Hive 版本 0.8.0 开始,此问题已得到修复。您可以签出这张 JIRA 票。

https://issues.apache.org/jira/browse/HIVE-2957

于 2013-09-26T03:07:05.340 回答