Hive构造数据踩坑
运维哥哥为了获取每个表的访问时间,开启了Hive钩子,在集群参数里面配置了hive.exec.pre.hooks= org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec,结果导致在使用图1的sql时报找不到虚拟表的错误(如图2),其实就是因为在解析这个sql时在元数据里面找不到要更新访问时间的表,所以必须加一个实实在在存在的表。
2.解决方法
建一个空表的如下SQL,切记必须要插入一条数据,否则会使构造的数据为空。
CREATE TABLE `dw_tmp.tmp_build_empty_a_d`( |
`id` string COMMENT 'id') |
COMMENT '构造空数据必须使用的空表' |
insert into dw_tmp.tmp_build_empty_a_d select '1';
然后再按照如下sql构造数据就没问题了,如下:
set hive.exec.pre.hooks = org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec;
select '1' as one,'2' as two
from dw_tmp.tmp_build_empty_a_d
union all
select '1' as one,'2' as two
from dw_tmp.tmp_build_empty_a_d
其实运维最好在改参数时可以通过类似set命令来试运行一下。