HIVE返回错误的日期

时间:2016-06-16 15:55:57

标签: hadoop hive

在处理约会时,我从HIVE得到了一些奇怪的结果。

对于初学者,我使用的是Hive 1.2.1000.2.4.0.0-169

我有一个定义(剪切)的表格:

hive> DESCRIBE proto_hourly;
OK                                    
elem                    string                                      
protocol                string                                      
count                   bigint
date_val                date                                        
hour_id                 tinyint                                   

# Partition Information          
# col_name              data_type               comment             

date_val                date                                        
hour_id                 tinyint                                       
Time taken: 0.336 seconds, Fetched: xx row(s)
hive> 

好的,我今年有数据加载。我开始注意到具有特定日期的查询中的一些“怪异”,但有一个尖锐的例子,这里是一个非常简单的查询,我只是要求'2016-06-01'但我回来'2016-05-31'.. 。为什么

hive> SET i="2016-06-01";
hive> with uniq_dates AS (
    >     SELECT DISTINCT date_val as date_val
    >     FROM proto_hourly
    >     WHERE date_val = date(${hiveconf:i}) )
    > select * from uniq_dates;
Query ID = hive_20160616154318_a75b3343-a2fe-41a5-b02a-d9cda8695c91
Total jobs = 1
Launching Job 1 out of 1


Status: Running (Executing on YARN cluster with App id application_1465936275203_0023)

--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ..........   SUCCEEDED      1          1        0        0       0       0
Reducer 2 ......   SUCCEEDED      1          1        0        0       0       0
--------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 3.63 s     
--------------------------------------------------------------------------------
OK
2016-05-31
Time taken: 6.738 seconds, Fetched: 1 row(s)
hive>

1 个答案:

答案 0 :(得分:1)

再测试一下,我发现在集群的不同时区配置了一台服务器。三个节点中有两个是UTC,但是一个节点仍在美国/丹佛。

我相信发生的事情是Map / Reduce作业在不同时区的服务器上执行,因此给我带来了奇怪的数据偏移问题。

日期2016-06-01 UTC确实等于2016-05-31 America / Denver

无声TZ转换......