我在HDFS上存储的文本文件中的数据具有以下目录结构:
/出口/年/ 07 /月/小时/ 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搜索(time_stamp TIMESTAMP,url STRING,域STRING,............关键字STRING)PARTITIONED BY(年份INT,月份INT,日期INT,小时INT)行格式分隔字段以'\ t';
结尾将数据加载到其中:
ALTER TABLE search_mmx ADD PARTITION(年= 2014,月= 08,日= $ {d},小时= $ {h})LOCATION'/ exported / 2014/08 / $ {d} / $ {h} /的搜索/';
所有可用日期&小时。它已成功加载,我通过计算行数来验证这一点。
但是当我尝试“从搜索限制10中选择*”时它给出错误“错误转换列:0到TIMESTAMP(数据是:1406965816)”
time_stamp的原始值是Unix时间戳格式。如何将它从unix时间戳转换为Impala TIMESTAMP数据类型?
由于
答案 0 :(得分:0)
来自documentation for the TIMESTAMP data type:
你可以cast一个整数或浮点值N到TIMESTAMP,产生一个超过纪元日期开始(1970年1月1日)N秒的值。
此外:
注意:在Impala 1.3及更高版本中,FROM_UNIXTIME()和UNIX_TIMESTAMP()functions允许更广泛的格式字符串,在元素顺序,字母占位符重复和分隔符字符方面具有更大的灵活性。有关详细信息,请参阅日期和时间函数。