千家信息网

Hive 1.1.0 某些字段的查询结果为NULL

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,现象查询fct_traffic_navpage_path_detl的2015-01-19 分区显示结果如下:Hive 1.1.0 返回结果如下,可见最后一个字段为NULL87FQEZT1UEDXJHJ
千家信息网最后更新 2024年12月13日Hive 1.1.0 某些字段的查询结果为NULL

现象查询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的缺陷。


0