如何使用Hive表中的列来定义from_utc_timestamp函数

时间:2016-12-16 22:00:07

标签: datetime hadoop hive

我有一个hive表,其中有一个事务utc_time_date - 以UTC为单位,时区存储为字符串

customerid              string
sessionid               string
utc_time_date           string
defined_cst             timestamp
variable_time           timestamp
store_nbr               int
utc_date                string
defined_cst_visit_date  string
variable_date           string
tc                      string
transactiontotal        double
usegiftcardsfirst       int
associate_flag          int
new_user                int
time_zone               string

utc_time_date是子查询中名为session的列。

当我使用FROM_UTC_TIMESTAMP(session, 'CST')时,我会得到正确的时间/日期组合。

以下是创建这些列的代码片段

session as UTC_Time_Date, FROM_UTC_TIMESTAMP(session, 'CST') as Defined_CST,
 FROM_UTC_TIMESTAMP(session, time_zone) as Variable_time,
 storeid as store_nbr, transactiondate as UTC_Date,
 to_date(FROM_UTC_TIMESTAMP(session, 'CST')) as defined_cst_visit_date,
 to_date(FROM_UTC_TIMESTAMP(session, time_zone)) as variable_date,
 tc, transactionTotal, useGiftCardsFirst, associate_flag, new_user, time_zone

但是 - FROM_UTC_TIMESTAMP(session,timezone)会返回错误信息,如下所示

utc_time_date   defined_cst variable_time   variable_date
11/6/2016 1:28  11/5/2016 20:28 11/6/2016 1:28  11/6/2016

可以在此函数中使用列作为时区的输入吗?很明显,您可以使用时间戳列作为日期字段的输入,因为它可以工作。

1 个答案:

答案 0 :(得分:0)

所以,我想出了导致我的问题的原因 - 当我创建时区表时,每行末尾都有无关的空白区域。这导致函数出错,并且不返回正确的时区。获得的经验教训 - 制作sue我使用sed删除.csv文件中的空格,然后再使用它们在Hive中创建表格。