hive查询详解

查询的一些例子:

1.query
hive> SELECT name,subordinates[0] FROM employees;
John Doe Mary Smith
Mary Smith Bill King
Todd Jones NULL
2.expression
hive> SELECT upper(name),salary, deductions["Federal Taxes"],
round(salary * (1 -deductions["Federal Taxes"])) FROM employees;
3.expression
SELECT count(*), avg(salary) FROMemployees;
4.distinct
SELECT count(DISTINCT symbol) FROMstocks;
5.limit
hive> SELECT upper(name),salary, deductions["Federal Taxes"],
> round(salary * (1 -deductions["Federal Taxes"])) FROM employees
> LIMIT 2;
JOHN DOE 100000.0 0.2 80000
MARY SMITH 80000.0 0.2 64000
6.列名 别名
SELECT upper(name), salary,deductions["Federal Taxes"] as fed_taxes,
> round(salary * (1 -deductions["Federal Taxes"])) as 
salary_minus_fed_taxes
> FROM employees LIMIT 2;
7.嵌套select (不可有having在内部select)
hive> FROM (
> SELECT upper(name), salary, deductions["FederalTaxes"] as fed_taxes,
> round(salary * (1 -deductions["Federal Taxes"])) as 
salary_minus_fed_taxes
> FROM employees
> ) e
> SELECT e.name,e.salary_minus_fed_taxes
> WHEREe.salary_minus_fed_taxes > 70000;
JOHN DOE 100000.0 0.2 80000
8. case when then
hive> SELECT name, salary,
> CASE
> WHEN salary < 50000.0 THEN‘low‘
> WHEN salary >= 50000.0 ANDsalary < 70000.0 THEN ‘middle‘
> WHEN salary >= 70000.0 ANDsalary < 100000.0 THEN ‘high‘
> ELSE ‘very high‘
> END AS bracket FROM employees;
John Doe 100000.0 very high
Mary Smith 80000.0 high
Todd Jones 70000.0 high
Bill King 60000.0 middle
Boss Man 200000.0 very high
9.hive不适用map reduce
SELECT * FROM employees;
SELECT * FROM employees
WHERE country = ‘US‘ AND state =‘CA‘
LIMIT 100;
10.使用like和rlick
like是如同sql语句
hive> SELECT name,address.street FROM employees WHERE address.street LIKE 
‘%Chi%‘;
rlick可以使用如同java的正则
hive> SELECT name,address.street
> FROM employees WHEREaddress.street RLIKE ‘.*(Chicago|Ontario).*‘;
Mary Smith 100 Ontario St.
Todd Jones 200 Chicago Ave.
11 group by语句
hive> SELECT year(ymd),avg(price_close) FROM stocks
> WHERE exchange = ‘NASDAQ‘ ANDsymbol = ‘AAPL‘
> GROUP BY year(ymd);
1984 25.578625440597534
12 having语句
hive> SELECT year(ymd),avg(price_close) FROM stocks
> WHERE exchange = ‘NASDAQ‘ ANDsymbol = ‘AAPL‘
> GROUP BY year(ymd)
> HAVING avg(price_close) >50.0;
1987 53.88968399108163
1991 52.49553383386182
13 join inner(建议将最大的table放在最后)
hive> SELECT a.ymd,a.price_close, b.price_close
> FROM stocks a JOIN stocks bON a.ymd = b.ymd
> WHERE a.symbol = ‘AAPL‘ ANDb.symbol = ‘IBM‘;
(注意,像比较这样的join条件是不允许的,条件中也不能用or)
SELECT a.ymd, a.price_close,b.price_close
FROM stocks a JOIN stocks b
ON a.ymd <= b.ymd
WHERE a.symbol = ‘AAPL‘ ANDb.symbol = ‘IBM‘;
14.left outer join
hive> SELECT s.ymd, s.symbol,s.price_close, d.dividend
> FROM stocks s LEFT OUTER JOINdividends d ON s.ymd = d.ymd AND s.symbol = 
d.symbol
> WHERE s.symbol = ‘AAPL‘;
...
1987-05-01 AAPL 80.0 NULL
1987-05-04 AAPL 79.75 NULL
1987-05-05 AAPL 80.25 NULL
不同类型比较
不同类型的数字float double做比较,要注意0.2float大于0.2double
可以cat(0.2 as float)
order by and sort by
hive的order by是全部数据的排序,在一个reduce中处理排序,默认升序。效率比较低,通常跟limit一起用
可以用hive.mapred.mode=strict来强制,order后跟着limit
sort by是在每个reduce中,进行排序,
(是否在一个reduce中,由groupcomparator决定,如果没有就是key的compare,在hive中UDAF在控制mapper的key输出到reducer上,普通的compact是hash分布到key上,或是自定义compact的hash均匀分布ketama算法)
distribut by是让相同的key归到同一个reducer中,这样sort可以进行reducer中的排序
(注意 sort需要放在distribute前边)
cluster
cluster by是一种distribute和sort的简写,让按照clauses中语句分组,并且按照其他字段排序
cast函数
cast类型转换函数,当string不符合条件,则为unknowndata为null
可以嵌套cast(cast(cast(binary asstring)as double))
将float转换为int 可以用round floor
取样查询 sample
rand随机
select * from numberstablesample(bucket 3 out of 10 on rand()) s;
column随机:以一个column,这样会在多个线程里跑multiple runs
select * from numberstablesample(bucket 3 out of 10 on number) s;
block随机: 另一个取样函数(blocksampling 当表小于block size128mb,则全部rows返回)
有个hive.sample.seednumber来控制seed information for block based
select * from numbersflattablesample(0.1 percent) s;
使用number做sample,用以下语句,让sample按照sample存储,可以只访问hash file中需要的bucket
create tablenumbers_bucketed(number int) clustered by (number) into 3 buckets
set hive.enforce.bucketing = true;
union
select * from table1
union all
select * from table2
from(
from src select src.key ,src.value where src.key < 100
union all
from src select src.* wheresrc.key >100
) unioninput
insert overwrite directory‘/tmp/union.out‘ select unioninput.*

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

时间: 2024-10-10 19:33:20

hive查询详解的相关文章

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

MySQL_05-Select查询详解

SQL查询详解 1.Orderby a) Order by 字段 asc | desc b) 允许多字段排序: 先按第一个字段排序,如果不能区分,再使用第二个字段排序:以此类推 2.Limit(限制获得的记录数量) a) 语法: limit offset, row_count  (offset:偏移量,下标从0开始:row_count:总记录数).例如:limit 2,3 表示从第二条开始,取三条(即第2条到第4条记录) 3.Distinct a) 去除重复记录. b) 语法: select d

sql语句联合查询详解

sql语句联合查询详解 2011-03-01 18:58:22|  分类: mysql|举报|字号 订阅 例子: person表和user表没有约束person表: user表: 有以下几种关联 1.UNION 格式:查询语句 UNION [ALL] 查询语句 [UNION [ALL] 查询语句][…n] 说明:ALL选项表示将所有行合并到结果集合中.不指定该项时,被联合查询结果集合中的重复行将只保留一行. 在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序.例

ThinkPHP视图查询详解

ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm 这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下 ThinkPHP提供的视图查询应用功能十分强大,用户利用视图查询功能可以将多个数据表的字段内容按需要进行指定和筛选,组织成一个基于这些数据表的视图模型,然后就可以通过该模型直接进行多表联合查询,非常方便和简单. 例如在项目中,我们定义有三个表: user          用户基础表,user_info   用户详细信息表

SQL常规查询详解

一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. 语句1:隐式的交叉连接,没有cross join. select o.id, o.order_number, c.id, c.name from orders o , customers c where o.id=1; 语句2:显式的交叉连接,使用cross join. select o.id,o.order

Mybatis使用之查询详解

Mybatis使用之查询详解 一:简介 此篇主要知识点: 1.sql语句块 2.select标签属性 3.ResultMap 标签配置 4.一对一关联 5.一对多关联 6.多对多关联 7.嵌套查询 二:SQL语句块 2.1 作用 SQL元素可以被用来定义可重用的SQL 代码段,可以包含在其他语句中.比如在项目中常常做的分页查询.分别需要两条SQL语句.一条是查询所有具体记录信息.另一条需要查询记录数.而两条语句的where条件是一样的.这种类似情况就可以使用SQL语句块来简化配置信息. 2.2

分享知识-快乐自己:Hibernate 中Criteria Query查询详解

1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象. 在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Cr

Mysql高手系列 - 第12篇:子查询详解

这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语句,称为主查询或外查询. 子查询分类 按结果集的行列数不同分为4种 标量子查询(结果集只有一行一列) 列子查询(结果集只有一列多行) 行子查询(结果集有一行多列) 表子查询(结果集一般为多行多列) 按子查询出现在主查询中的不同位置分 select后面:仅仅支持标量子查询. from后面:支持表子查询

mysql查询详解

--以下内容摘自马哥教育课堂 SELECT SELECT查询流程 客户端SELECT语句<==>查询缓存--缓存未命中-->解释器--预处理器-->解析树(多条访问路径) -->查询优化器(择优选择路径)-->查询执行计划-->查询执行引擎--API调用存储引擎--数据-->查询执行引擎返回结果并使用哈希储存于查询缓存 select now();这是无需查询缓存的,查询当前缓存 多台MYSQL服务器,如何提高MYSQL的缓存命中率 前端程序可使用一致性哈希算