这个问题有点不好描述,当Hive表是ORC格式时,因为特定的某些字段、类型、where条件,写入到表中的数据会缺失几条,用presto执行同样的条件是正常的
以下面这个sql为例,导致出问题的字段和条件都标记出来了(吐槽下,本来是加一个字段的需求,然后数据突然不对了…泪崩)
1 | insert overwrite table deleteme_idl_pay_refund_class_2c_class |
解决办法:
1 | set hive.vectorized.execution.enabled=false; |
这个值默认就是false,因为当时textfile迁移成orc表时,为了提高执行效率,就把参数改成了true,然后就埋了这个坑
至于为什么要从textfile转成ORC,可以参考下面文章中介绍的ORC压缩比。相比textfile,orc文件能节省3倍的空间,压缩比还是很惊人的,同时还可以节省很多计算资源。
关于原因这里就不再累述,参考下面的链接。
参数解释:
https://www.docs4dev.com/docs/zh/apache-hive/3.1.1/reference/Vectorized_Query_Execution.html
ORC文档:
http://lxw1234.com/archives/2016/04/630.htm
https://www.cnblogs.com/ittangtang/p/7677912.html