如何修复“错误转换列:0 TO TIMESTAMP”?
Posted
技术标签:
【中文标题】如何修复“错误转换列:0 TO TIMESTAMP”?【英文标题】:How to fix "Error converting column: 0 TO TIMESTAMP"? 【发布时间】:2014-08-25 15:55:35 【问题描述】:我有存储在 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 数据类型?
【问题讨论】:
【参考方案1】:来自documentation for the TIMESTAMP data type:
您可以cast 一个整数或浮点值 N 到 TIMESTAMP,生成一个比纪元日期(1970 年 1 月 1 日)开始晚 N 秒的值。
还有:
注意:在 Impala 1.3 和更高版本中,FROM_UNIXTIME() 和 UNIX_TIMESTAMP() functions 允许更广泛的格式字符串,在元素顺序、字母占位符的重复和分隔符方面具有更大的灵活性。有关详细信息,请参阅日期和时间函数。
【讨论】:
我们可以做我在 Vetica COPY public.test (unix_timestamp FILLER VARCHAR(15), datetime AS TO_TIMESTAMP(unix_timestamp)) 源 Hdfs(.....) filter BZip () 分隔符 E'\t';在加载到表中时将 unix_timestamp 转换为 TIMESTAMP ? 如果您将 CREATE 语句更改为“time_stamp STRING”,您应该能够在从搜索表中选择时 CAST(time_stamp AS TIMESTAMP。然后,例如,您可以使用 ALTER TABLE,一个 CREATE TABLE AS SELECT 或 CREATE VIEW 来改变搜索或创建另一个表/视图,其中 time_stamp 列是 CAST 到 TIMESTAMP 而不是 STRING。 当数据被摄取到表中时不能即时完成,因为我们将不断地向该表添加数据并删除超过 90 天的数据。所以我们想在开始时做一些事情,而不是在查询时做,以避免延迟查询处理。以上是关于如何修复“错误转换列:0 TO TIMESTAMP”?的主要内容,如果未能解决你的问题,请参考以下文章