现象查询fct_traffic_navpage_path_detl的2015-01-19 分区显示结果如下

    Hive 1.1.0 返回结果如下,可见最后一个字段为NULL

87FQEZT1UEDXJHJQPFFX7G7ET8S2DVPM 2357378283356 91501191044440048 7326356 NULL

87FQEZT1UEDXJHJQPFFX7G7ET8S2DVPM 2357378283356 121501191035580028 7326356 NULL
UBDTK8D9XUZ9GRZU8NZNXDEG73D4PCZG 2362223711289 161501191549050061 14837289 NULL
Y49EY895ACABHS95DRQEE8DVFEB8JSE1 2360853052224 111501191426280023 115883224 NULL

     Hive 0.10 返回结果”正确“如下:

87FQEZT1UEDXJHJQPFFX7G7ET8S2DVPM 2357378283356 91501191044440048 7326356 2015-01-19 10:44:44
87FQEZT1UEDXJHJQPFFX7G7ET8S2DVPM 2357378283356 121501191035580028 7326356 2015-01-19 10:35:58
UBDTK8D9XUZ9GRZU8NZNXDEG73D4PCZG 2362223711289 161501191549050061 14837289 2015-01-19 15:49:05
Y49EY895ACABHS95DRQEE8DVFEB8JSE1 2360853052224 111501191426280023 115883224 2015-01-19 14:26:28


后来发现,这表的meta和 2015-01-19 这个分区的meta不一样。


hive> desc  dw.fct_traffic_navpage_path_detl;

OK

date_id                 string                                      

chanl_id                bigint                                      

sessn_id                string                                      

。。                                      

detl_event_id           string                                      

nav_refer_intrn_reslt_sum       string                                      

nav_intrn_reslt_sum     string                                      

nav_refer_intrn_kw      string                                      

nav_intrn_kw            string                                      

detl_track_time         string                                      

cart_track_time         string                                      

ds                      string                                      

                 

# Partition Information          

# col_name              data_type               comment             

                 

ds                      string 


hive> desc  dw.fct_traffic_navpage_path_detl partition(ds='2015-01-09');

OK

date_id                 string                                      

chanl_id                bigint                                      

sessn_id                string                                      

。。

                                     

detl_event_id           string                                      

ds                      string                                      

                 

# Partition Information          

# col_name              data_type               comment             

                 

ds                      string 


如上可见表的meta比partition(ds='2015-01-09')的meta多了如下几个字段,

nav_refer_intrn_reslt_sum       string                                      

nav_intrn_reslt_sum     string                                      

nav_refer_intrn_kw      string                                      

nav_intrn_kw            string                                      

detl_track_time         string                                      

cart_track_time         string


后来查了一下,hive是允许表meta和分区meta不一样的,见

http://mail-archives.apache.org/mod_mbox/hive-user/201110.mbox/%3CCA+v58Ocy=uoHsLNQGrYYpRhawFse-p-6U4sjmzNL6VERYrSKTg@mail.gmail.com%3E

还有加改字段的时候可以指定分区:

ALTER TABLE table_name [PARTITION partition_spec]

  ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)

  [CASCADE|RESTRICT]


那为啥hive 0.10显示”正确“,hive 1.1.0显示错误呢?

    后来查看jira发现,hive0.10 Sedre的时候是以Table的meta为准,而hive 0.11以后得版本以parition的meta为准,可见

https://issues.apache.org/jira/browse/HIVE-3833  可以说hive 0.11这么做是一种改进。虽然hive 0.10显示“正确 “,其实这是误打误撞读取了tabel的meta所以那些字段显示了出来,其实结果是错误的,是hive0.10的缺陷。