Hive-HiveDQL(未完待续)

本文深入探讨Hive SQL的查询语法,包括基本的SELECT、WHERE、ALL与DISTINCT、基于分区的查询、HAVING子句的使用场景及与WHERE的区别、聚合函数的应用,以及HiveSQL运行MR的条件。通过具体示例,帮助读者理解如何优化Hive查询,避免资源浪费。

1. Hive DQL

语法:

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
  FROM table_reference
  [WHERE where_condition]
  [GROUP BY col_list]
  [ORDER BY col_list]
  [CLUSTER BY col_list
    | [DISTRIBUTE BY col_list] [SORT BY col_list]
  ]
 [LIMIT [offset,] rows]
1.1 WHERE

过滤筛选。分区表必须加分区限制

1.2 ALL和DISTINCT

ALL和DISTINCT选项指定了是否返回重复值,默认是ALL,指定DISTINCT时会剔除重复的结果。注意,从Hive1.1.0开始,Hive支持SELECT DISTINCT *。ALL and DISTINCT can also be used in a UNION clause – see Union Syntax for more information.

hive> SELECT col1, col2 FROM t1
    1 3
    1 3
    1 4
    2 5
hive> SELECT DISTINCT col1, col2 FROM t1
    1 3
    1 4
    2 5
hive> SELECT DISTINCT col1 FROM t1
    1
    2
1.3 基于分区的查询

一个Select如果没有指定分区,执行时会扫描全表。如果加了分区条件,则会只扫描对应分区的数据。对于存在大量分区数据的表,加不加分区条件的差别是很大的。若不增加分区,可能会引起资源被全占用,引起业务延迟。
Example:

# 普通查询限制分区
SELECT page_views.*
FROM page_views
WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31'

# 关联时限制分区
SELECT page_views.*
FROM page_views JOIN dim_users
  ON (page_views.user_id = dim_users.id AND page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31')
1.4 HAVING
  • where和having的区别:
    • 使用场景:where可以用于select、update、delete和insert into values(select * from table where …)语句中。having只能用于select语句中。
    • 执行顺序:where的搜索条件是在执行语句进行分组之前应用;having的搜索条件是在分组条件后执行的。即如果where和having一起用时,where会先执行,having后执行。
    • 子句有区别:where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。
    • 总结:
      1.WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
      2.GROUP BY 子句用来分组 WHERE 子句的输出。
      3.HAVING 子句用来从分组的结果中筛选行

以下两个等价

SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10;
SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10;
1.5 聚合函数

聚合: 多进一出,select中出现的字段,如果没有出现在group by中,必须出现在聚合函数中
max
min
avg
count
sum

3.6 问题
  • Hive SQL ,什么情况跑MR,什么情况不跑MR?
    了解一个参数:hive.fetch.task.conversion,默认值是more.
    以下面语句为例:
SQL1 : select * from live_info;
SQL2 : select * from live_info where traffic in ("1", "3");
SQL3 : select count(1) from live_info;
SQL4 : select user, count(1) as user_count from live_info group by user;
SQL5 : select user, count(1) as user_count from live_info group by user order by user desc;
官网解释说明
noneDisable hive.fetch.task.conversionselect语句中只有desc不走MR
minimalSELECT *, FILTER on partition columns (WHERE and HAVING clauses), LIMIT only仅SQL1 不走MR
moreSELECT, FILTER, LIMIT only (including TABLESAMPLE, virtual columns)仅SQL1、SQL2不走MR
  • 区别:Sort By / Cluster By / Distribute By / Order By.
内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值