行计数结果,对于Select *为MISMATCH,对于大文件为Hive External table为Select count1

问题描述

我正在运行配置单元外部表查询问题: 蜂巢显示的“ Select * from table1”行计数与“ Select count(*) from table1”不同。它应该匹配但不匹配,不确定为什么吗?小数据的结果匹配大约20 MB,但大表则不匹配,即600 MB,它们不匹配。任何人都遇到过这个问题??

下面是我为了显示结果而运行的一些查询。我的源文件是RDS文件,我将其转换为csv文件并将其上传到HDFS并创建外部表。

enter image description here

其他详细信息

注意: 我只面对大文件的这个问题,例如大小为200 MB或更大,但对于小文件(例如80 MB)则没有用处。

SELECT count(*) FROM dbname1.cy_tablet where Ranid Is NULL # Zero results

解决方法

我们解决了该问题,现在所有计数都匹配。 通过使用col_names = FALSE

,我们删除了csv文件中用作Hive外部表源的标头
write_delim(df_data,delim = "|",col_names = FALSE,output_file)#

从CREATE EXTERNAL TABLE命令中删除了以下行

TBLPROPERTIES('skip.header.line.count'='1'

上述步骤解决了我们的问题。

问题在大文件中发生。在我们的站点中,HDFS块大小为128MB,如果我们将文件大小除以128MB,则我们得到一个数字,这就是差异。所以我认为问题出在标题上。

注意:我们使用了管道'|'作为分隔符,因为我们在使用','时遇到其他问题