Hive下划线开头表名执行SELECT语句返回空记录问题
下划线开头Hive表合规性说明及查询空结果解决方案
表命名合规性确认
Hive官方命名规范中,表名允许使用字母、数字、下划线,以下划线作为首字符完全合规。你使用反引号包裹表名的写法属于语法兼容的标准写法,建表、插入语句均符合HQL规范,命名本身不是导致查询返回空的直接原因。
查询返回空结果的根因及对应解决方法
- 根因1:Hive事务配置未开启,插入操作未实际生效
你使用的INSERT INTO ... VALUES语法要求Hive开启事务支持,若集群未配置事务相关参数,INSERT语句会返回执行成功,但实际不会写入数据。你可以先执行SELECT COUNT(*) FROM dbo._temp_table,或直接查看表对应HDFS存储路径下是否生成ORC数据文件,确认数据是否真的写入成功。
解决方法:在当前会话临时开启事务配置后,重新执行插入操作:set hive.support.concurrency = true; set hive.exec.dynamic.partition.mode = nonstrict; set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; set hive.compactor.initiator.on = true; set hive.compactor.worker.threads = 1; - 根因2:低版本Hive与自定义ORC压缩参数存在兼容性bug
部分Hive 2.x之前的版本,对自定义配置的ORC ZLIB压缩参数识别存在兼容性问题,会出现插入成功但查询时无法正确解析压缩ORC文件的情况,导致返回空结果。
解决方法:移除自定义压缩参数,使用默认ORC压缩配置重新建表插入即可:create table dbo.`_temp_table` ( emp_id int, emp_name string) stored as ORC; - 根因3:Hive元数据未同步
若使用带独立元数据管理的Hive集群,插入数据后元数据未及时同步,会导致查询时读取不到最新写入的文件。
解决方法:查询前先执行元数据修复同步命令:MSCK REPAIR TABLE dbo.`_temp_table`;
内容的提问来源于stack exchange,提问作者Rocky1989
相关产品推荐
相关产品推荐

