首页 > 解决方案 > Select * 的行计数结果 MISMATCH 和大文件的 Hive 外部表的 Select count(1)

问题描述

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

以下是我运行的一些查询以显示结果。我的源文件是 RDS 文件,我将其转换为 csv 文件并将其上传到 HDFS 并创建外部表。 在此处输入图像描述

额外细节

注意: 我只遇到大文件(例如 200 MB 或更大)的问题,但对于小文件(例如 80 MB)没有问题。

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

标签: sqlrhivehdfshiveql

解决方案


我们解决了这个问题,现在所有计数都匹配了。我们使用 col_names = FALSE 删除了用作 Hive 外部表源的 csv 文件中的标头

write_delim(df_data,delim = "|",col_names = FALSE, output_file)#

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

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

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

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

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


推荐阅读