hive中的order by也是对一个结果集合进行排序,但是和关系型数据库又所有不同。
这不同的地方也是两者在底层架构区别的体现。
hive的参数hive.mapred.mode是控制hive执行mapred的方式的,有两个选项:strict和nonstrict,默认值是nonstrict。
这个两个值对order by的执行有着很大的影响。
测试用例
hive> select * from test09;
OK
100 tom
200 mary
300 kate
400 tim
Time taken: 0.061 seconds
我们先来看看nonstrict的情况。
hive> set hive.mapred.mode=nonstrict;
hive> select * from test09 order by id;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201105020924_0065, Tracking URL = http://hadoop00:50030/jobdetails.jsp?jobid=job_201105020924_0065
Kill Command = /home/hjl/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=hadoop00:9001 -kill job_201105020924_0065
2011-05-03 03:37:41,270 Stage-1 map = 0%, reduce = 0%
2011-05-03 03:37:43,292 Stage-1 map = 50%, reduce = 0%
2011-05-03 03:37:45,314 Stage-1 map = 100%, reduce = 0%
2011-05-03 03:37:50,360 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201105020924_0065
OK
100 tom
200 mary
300 kate
400 tim
Time taken: 15.049 seconds
这个时候order by可以正常的执行,hive启动了一个reduce进行处理,事实上也只能启动一个reduce。
在来看看strict的情况
hive> set hive.mapred.mode=strict;
hive> select * from test09 order by id;
FAILED: Error in semantic analysis: line 1:30 In strict mode, limit must be specified if ORDER BY is present id
这个时候提示你,在strict模式下如果执行order by的操作必须要指定limit。
因为执行order by的时候只能启动单个reduce执行,如果排序的结果集过大,那么执行时间会非常漫长。
hive> select * from test09 order by id limit 4;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201105020924_0067, Tracking URL = http://hadoop00:50030/jobdetails.jsp?jobid=job_201105020924_0067
Kill Command = /home/hjl/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=hadoop00:9001 -kill job_201105020924_0067
2011-05-03 04:18:26,828 Stage-1 map = 0%, reduce = 0%
2011-05-03 04:18:27,842 Stage-1 map = 50%, reduce = 0%
2011-05-03 04:18:29,864 Stage-1 map = 100%, reduce = 0%
2011-05-03 04:18:35,916 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201105020924_0067
OK
100 tom
200 mary
300 kate
400 tim
Time taken: 15.706 seconds
加上limit后,SQL成功执行。
分享到:
相关推荐
### Hive综合应用案例—用户搜索日志分析 #### 一、背景介绍 随着互联网技术的发展,用户搜索行为已经成为衡量网站或应用性能与用户体验的重要指标之一。通过对用户搜索日志进行深入分析,不仅可以揭示用户的搜索...
hive的Order By/Sort By/Distribute By Join查询,join只支持等值连接 LEFT,RIGHT 和 FULL OUTER JOIN LEFT SEMI JOIN Hive当前没有实现 IN/EXISTS 子查询,可以用 LEFT SEMI JOIN 重写子查询语句。
over (partition by 列名 order by 列名 rows between 开始位置 and 结束位置) ``` 其中, partition by 用于分区,order by 用于排序,rows between 用于指定窗口范围。 窗口函数分类 Hive 窗口函数可以分为三大...
而Client则是指Hive的Java客户端API,通过该API可以直接在应用程序中执行Hive SQL;WUI则提供了基于Web的用户界面,方便用户远程访问和管理Hive。 - **元数据存储**:Hive的元数据通常存储在关系型数据库中,如...
- **OrderBy**: - `SELECT * FROM table_name ORDER BY column_name [ASC | DESC];` - **SortBy**: - `SELECT * FROM table_name DISTRIBUTE BY column_name SORT BY column_name [ASC | DESC];` - **DistributeBy...
5. **SQL查询基础**:使用HQL进行基本的查询操作,如SELECT、WHERE、GROUP BY和ORDER BY。 6. **聚合操作**:统计热门搜索词,计算用户搜索频次,分析用户活跃时段等,这通常涉及COUNT、MAX、MIN、AVG等聚合函数。 ...
本主题将深入探讨“hive级联求和”的概念及其实际应用,这在数据分析和报表制作中尤其常见。 首先,我们需要理解什么是级联求和。在统计学和数据分析中,级联求和是指在一组数据中逐级累加特定字段的值,直到得到一...
HQL 支持各种 SQL 常见的操作,例如 SELECT、INSERT、UPDATE、DELETE 等,并且还可以进行复杂的数据处理,例如 JOIN、GROUP BY、ORDER BY 等。例如,下面是一个简单的示例,展示如何使用 HQL 对文档中的单词进行计数...
SUM(pv) OVER (PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS pv2, SUM(pv) OVER (PARTITION BY cookieid) AS pv3, SUM(pv) OVER (PARTITION BY cookieid ...
- 排序操作(ORDER BY、SORT BY、DISTRIBUTE BY、CLUSTER BY); - 复合数据类型(ARRAY、MAP、STRUCT)的使用技巧。 5. **Hive高级特性** - 索引创建与管理; - HiveServer2/beeline的使用; - Java操作Hive...
1. **全排序**:Hive 的 `SORT BY` 只能在单机范围内排序,而 `ORDER BY` 实现全局排序,需谨慎使用。 2. **笛卡尔积**:在严格模式下,Hive 不允许笛卡尔积,可以通过添加 Join Key 或使用 MapJoin 避免。 3. **...
6. **启用MapReduce严格模式**:`hive.exec.mapreduce.strict.mode`开启后,Hive会拒绝一些可能导致性能下降或资源浪费的查询,如未指定分区的查询和无`LIMIT`的`ORDER BY`。 7. **单个Reducer处理多组聚合**:`...
6. 分组和排序:`GROUP BY`, `ORDER BY`, `DISTRIBUTE BY`, `SORT BY`,用于数据分组和排序。 7. 时间和日期函数:`YEAR`, `MONTH`, `DAY`, `HOUR`, `MINUTE`, `SECOND`,用于提取日期和时间部分。 8. 模式匹配函数...
19.Hive中order by、sort by、distribute by与cluster by的使用 20.Hive中分析函数与窗口函数 21.Hive中UDF的介绍 22.Hive中使用自定义UDF实现日期格式转换 23. HiveServer2的介绍及三种连接方式 24.Hive元数据、...
- **GROUP BY与ORDER BY**: - 如果可能,避免全局排序,尽量使用DISTRIBUTE BY和CLUSTER BY来控制数据的分发和聚集。 - **子查询优化**:避免嵌套子查询,尝试重写为更高效的JOIN或临时表。 4. **执行引擎优化*...
ORDER BY visit_count DESC; ``` - 分析访问状态码分布: ```sql SELECT status, COUNT(*) as status_count FROM apache_logs GROUP BY status ORDER BY status; ``` - 探索不同用户代理的访问情况: ```sql SELECT ...
3. **Hive查询语言HQL**:详细解析HQL的各种查询语句,如SELECT、JOIN、GROUP BY、HAVING、ORDER BY等,以及子查询、窗口函数和聚合函数的使用。 4. **Hive优化**:探讨如何提高Hive查询效率,包括分区策略、桶表、...