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 twofrom dw_tmp.tmp_build_empty_a_dunion all select '1' as one,'2' as twofrom dw_tmp.tmp_build_empty_a_d

    其实运维最好在改参数时可以通过类似set命令来试运行一下。

 

 

 

posted @ 2023-04-12 19:05  人不疯狂枉一生  阅读(25)  评论(0编辑  收藏  举报