检索 HIVE“TIMESTAMP”列上的列时出错

Posted

技术标签:

【中文标题】检索 HIVE“TIMESTAMP”列上的列时出错【英文标题】:Getting error while retrieving columns on HIVE "TIMESTAMP" column 【发布时间】:2013-09-25 01:07:14 【问题描述】:

在 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 手册并谷歌了它,但没有得到任何解决方案。

【问题讨论】:

您使用的是什么版本的 Hive,我认为 Hive v0.8.0 添加了时间戳类型,所以... 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于检索 HIVE“TIMESTAMP”列上的列时出错的主要内容,如果未能解决你的问题,请参考以下文章

合并熊猫数据框的列时出错

过滤与分区列相关的列时的 Databricks 查询性能

约束 WITH 表的列时,WITH SQL 查询出错

如何在 Hive 中除按列分组之外的列上应用 max 子句

Hive 查询以提取具有字母数字字符的列

SQL Server:为啥不区分大小写的列上的 SELECT 比区分大小写的列更快?