现象查询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=[email protected]%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的缺陷。