【问题标题】:HIVE Time conversion issueHIVE时间转换问题
【发布时间】:2020-07-07 17:59:28
【问题描述】:

我们从 src "2019-11-03 01:01:00" 获取时间。 2019-11-03 是夏令时。 可以说这是结束时间。我们在 hive 表 start_time 中有另一列。 推导开始时间的逻辑是: start_time = (end_time- 3600)

问题##:

当我们在使用unix_timestamp() 的作业执行期间应用相同的逻辑时,结果如下。

Start_time =
select from_unixtime(unix_timestamp('2019-11-03 01:01:00') - 3600 ,'yyyy-MM-dd HH:mm:ss');
+----------------------+--+
|         _c0          |
+----------------------+--+
| 2019-11-03 01:01:00  |
+----------------------+--+

还有

End_time = select from_unixtime(unix_timestamp('2019-11-03 01:01:00') ,'yyyy-MM-dd HH:mm:ss');

+----------------------+--+
|         _c0          |
+----------------------+--+
| 2019-11-03 01:01:00  |
+----------------------+--+

两者都返回相同的结果。这样我们的start_date=end_date 就不是预期的了。 我们想要End_time = "2019-11-03 00:01:00" 有人可以帮忙吗!

【问题讨论】:

标签: hadoop hive timestamp unix-timestamp dst


【解决方案1】:

您遇到了这个问题HIVE-14305

解决方案可以是在 bash 中计算日期并将其作为变量传递给您的脚本:

initial_date="2019-11-03 01:01:00"
datesec="$(date '+%s' --date="$initial_date")"
result_date=$( date --date="@$((datesec - 3600))" "+%Y-%m-%d %H:%M:%S")
echo $result_date

#result 2019-11-03 00:01:00

#call your script like this

hive -hiveconf result_date="$result_date" -f script_name

#In the script use '${hiveconf:result_date}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2013-08-19
    相关资源
    最近更新 更多