Hive报错FAILED: SemanticException Can not find 表名 in genColumnStatsTask

Posted 哈肚破

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive报错FAILED: SemanticException Can not find 表名 in genColumnStatsTask相关的知识,希望对你有一定的参考价值。

问题描述

Hive SQL直接查询可以运行成功,这一点说明SQL是没有问题的。
但是insert写入数据时报错 FAILED: SemanticException Can not find 表名 in genColumnStatsTask

执行SQL如下:(主要是一个解析json数组SQL)

insert overwrite table 表名3 partition(p_day='2022-06-27')
select id,t01.labelCode,labelName,labelLevel
from
(
    select id,label.code as labelCode,label.parentCode as parentLabelCode,label.labelLevel
    from 
    (
        select id,Labels
        from
        (
            select id,regexp_replace(regexp_replace(Label,'\\\\[|]',''),'\\\\,\\\\','\\\\_\\\\') as Label
            from 表名1
        )t01 
        lateral view explode(split(Label,'_')) v as Labels
    )t02 
    lateral view json_tuple(Labels,'code','parentCode','labelLevel') label as code,parentCode,labelLevel
)t01
left join 
(
    select labelcode,labelvalue as labelName
    from 表名2
)t02 on t01.labelCode=t02.labelcode

原因分析:首先百度查看了几个关于这个报错的文章

1、*****这篇文章说遇到类似情况,单独执行不报错,create table as 执行会报错,原因未明。。。

2、****下面这个文章说在外面在加一层select 可以解决,尝试后并没有解决。。。

解决方案:

1、查看了直接单独执行和insert 写入 的执行计划,发现insert语句查出的数据长度要比select大很多
2、根据查看执行计划,尝试了值写入10行数据,即在SQL后面加上了 limit 10; 竟然成功了!!!
3、大胆的猜测,因为我这个只有不到10w的数据量,所以我又尝试limit 1000000;也成功了
4、问题解决了,但是至于原因还是不太清晰,看了帖子猜测是lateral view和join 或者union all 联用导致的,具体的尚不清楚
5、使用limit可以成功的原因是,使用limit 后 ,hive会先吧数据查出来落地,可能确实是数据长度导致内存不足了??有待考究

*【注】关于失败原因可能有个人猜测成分,如果不对欢迎指正,同时也欢迎大家留言讨论~

本文参考

1、https://blog.csdn.net/u014232719/article/details/106208056
2、https://stackoverflow.com/questions/70188606/semanticexception-can-not-find-table-name-in-gencolumnstatstask-state-42000-c

以上是关于Hive报错FAILED: SemanticException Can not find 表名 in genColumnStatsTask的主要内容,如果未能解决你的问题,请参考以下文章

hive on spark hql 插入数据报错 Failed to create Spark client for Spark session Error code 30041

hive on spark hql 插入数据报错 Failed to create Spark client for Spark session Error code 30041

hive 插入数据的时候,不能直接运行,报错FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.

hive 插入数据的时候,不能直接运行,报错FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.

Hive常见异常处理

报错Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop102:10000: Failed to open