0

我有存储在 HDFS 上的文本文件中的数据,具有以下目录结构:

/exported/year/07/month/hour/SEARCHES/
/exported/2014/07/01/00/SEARCHES/part-m-00000
                                 part-m-00001
/exported/2014/07/01/02/SEARCHES/part-m-00000
                                 part-m-00001
                                 part-m-00003
.
.
.
.
/exported/2014/08/01/09/SEARCHES/part-m-00005

因此,我使用以下查询在 impala 中创建了一个外部表:

CREATE EXTERNAL TABLE search
  (time_stamp TIMESTAMP, url STRING, domain STRING, ............ keyword STRING)
PARTITIONED BY (year INT, month INT, day INT, hour INT)
  row format delimited fields terminated by '\t';

并将数据加载到其中:

ALTER TABLE search_mmx ADD PARTITION (year=2014, month=08, day=${d}, hour=${h})
LOCATION '/exported/2014/08/${d}/${h}/SEARCHES/';

适用于所有可用的日期和时间。它已成功加载,我通过计算行数来验证这一点。

但是当我尝试select * from search limit 10;它时给出错误“错误转换列:0 TO TIMESTAMP(数据为:1406965816)”

time_stamp 的原始值为 Unix 时间戳格式。如何将它从 unix 时间戳转换为 Impala TIMESTAMP 数据类型?

4

1 回答 1

0

TIMESTAMP 数据类型的文档中

您可以整数或浮点值 N 转换为 TIMESTAMP,从而生成一个比纪元日期(1970 年 1 月 1 日)开始晚 N 秒的值。

还:

注意:在 Impala 1.3 和更高版本中,FROM_UNIXTIME() 和 UNIX_TIMESTAMP()函数允许更广泛的格式字符串,在元素顺序、字母占位符的重复和分隔符方面具有更大的灵活性。有关详细信息,请参阅日期和时间函数。

于 2014-08-28T20:26:51.647 回答