Hive:SELECT * 语句有效,但 SELECT COUNT(*) 无效

Posted

技术标签:

【中文标题】Hive:SELECT * 语句有效,但 SELECT COUNT(*) 无效【英文标题】:Hive: SELECT * statement works but not SELECT COUNT(*) 【发布时间】:2013-07-10 07:26:17 【问题描述】:

我在 Windows Server 2008 R2 上安装了 HDP 1.1。 我将 Web 登录加载到配置单元表。 创建表语句:

create table logtable (datenonQuery string , hours string, minutes string, seconds string, TimeTaken string, Method string, UriQuery string, ProtocolStatus string) row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' with serdeproperties( "input.regex" = "(\\S+)\\t(\\d+):(\\d+):(\\d+)\\t(\\S+)\\t(\\S+)\\t(\\S+)\\t(\\S+)", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s") stored as textfile; 

加载语句:

load data local inpath 'D:\Logfiles\' into table logtable;

选择语句:

Select * from logtable;

到目前为止一切正常。

以下语句失败:

Select count(*) from logtable;

例外:

FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.MapRedTask 返回代码 2

编辑1:

Failed Job Table 中的诊断信息显示以下信息:

'# 失败的地图任务超出了允许的限制。 FailedCount: 1. LastFailedTask: task_201306251711_0010_m_000000'

【问题讨论】:

看这里:***.com/q/11185528/891391 @yatul 更新了问题 这不是您的实际错误。它只是说有太多的映射器失败了。在 Mapper 日志中查看您的具体错误。有很多可能的原因。例如。其中一些在这里***.com/a/15725084/891391 【参考方案1】:

这是一个与 hadoop 相关的东西,而不是 hive。 SELECT * 有效而 SELECT COUNT(*) 无效的原因是后者涉及 MR 工作。你的数据大小是多少?

尝试通过将属性mapred.job.map.memory.mb 设置为更高的值来增加映射器堆大小。还可以尝试通过将拆分大小降低到mapred.min.split.size 来增加映射器的数量,看看是否有任何不同。

【讨论】:

在哪里可以找到这些属性?【参考方案2】:

如果输出结果集有 2 个具有相同名称的列(可能在 hive/impala 中),则 count(*) 将不起作用。

例如查询 #1 将给出结果,而查询 #2 将给出错误。

解决方案 - 别名 product_code 列将解决来自查询 #2 的错误

1) 选择 a.product_code、b.product_code、b.product_name、a.purchase_date、a.purchase_qty 从 产品事实 内部连接 ​​product_dim b 在 (a.product_code = b.product_code)

2) 从 ( 选择 a.product_code、b.product_code、b.product_name、a.purchase_date、a.purchase_qty 从 产品事实 内部连接 ​​product_dim b 在(a.product_code = b.product_code) ) 作为 C

【讨论】:

【参考方案3】:

对我来说,这个特定的错误是一个访问问题。当我使用用户名和密码连接到数据库时,它已解决

【讨论】:

以上是关于Hive:SELECT * 语句有效,但 SELECT COUNT(*) 无效的主要内容,如果未能解决你的问题,请参考以下文章

sql中的insert语句中的select语句返回多行

在 hive 的 select 语句中包含子查询结果

Hive DML常见操作

hive高阶1--sql和hive语句执行顺序explain查看执行计划group by生成MR

嵌套 SQL 语句但在内部语句中重用 out 变量?

如何克服 Hive for CASE 语句中的子查询