一、现象
(1)在本地运行hql时,数据可以正常插入,执行hql文件时,数据插入表时,查不到数据。
(2)使用TEZ引擎时,hql执行不通过,报错;使用MR运行时,可以通过,但是无数据输出。
二、排查
经过排查,发现sql中有一个三个表union all的语句,只要一执行到这个语句,数据就会为空,hql如下:
select
group_id,uid,day
from ods.tmp
union all
select
group_id,uid,day
from ods.tmp1
union all
select
group_id,uid,day
from ods.tmp2
于是查了一下这三张表的建表语句发现,卧槽,居然OUTPUTFORMAT不一样,破案了。。。。。。
格式如下:
第一张:
第二张:
第三张:
三、解决方案
思路一:视图【未解决】
with tmp as依然插不进入数据,测试的时候忘记截图了。。。。可以也实验一下。
思路二:创建临时表【解决】
create temporary table
因为第二张表和第三张表都是特殊格式,并且格式是一样的,就想着,我把这两张表union all一起,然后插入临时表总可以了吧,谁知道,报错:Invocationexception,得,用不了,那只能一个表建一张临时表了,就是有点麻烦,还在只有两张这样的表。
四、优化
应该还有更好的方案,再想想,哈哈哈哈