第六章 HiveQL查询

1.select…from语句

1.从map,struct,array中取数据

	map -> select map['key'] from `tbl_name`
	struct -> select struct.key from `tbl_name`
	array -> select array[index] from `tbl_name`

2.使用正则表达式来指定列的值

	select `price.*` from `tbl_name`  选取所有以price的列

3.可以对列值进行函数调用与算术表达式计算

	select upper(name) ,age + 3 form `tbl_name`

3.1算术表达式类型

符号作用
*
/
+
-
|
&按位与
~按位取反
^异或

4.limit语句

限制查询返回的行数

	select * from `tbl_name` limit 1; 只返回一行

5.case…when…then

	select 
	case 
		when age < 10 then '儿童'
		when age < 18 then '少年'
		else '成年人'
	end
	from `tbl_name`; 类似于if...else if....else....

6.什么情况下hive不会进行mapreduce

在执行一些不需要mapreduce操作的时候,hive可能会在本地模式下运行。
比如 select * from tbl_name hive只需要输出格式化的文件即可
hive.exec.mode.local.auto = true hive会优先考虑使用本地模式,节省软硬资源。

2. where语句

select语句用于选择列,where语句用于过滤条件。

where 语句后不可以出现列别名

1逻辑运算符

操作符支持的数据类型描述
A = B基本数据类型A = B返回true,A B都为NULL时返回NULL
A <=> B基本数据类型A B都为NULL时返回true,其他和 = 一样
A <> B,A !=B基本数据类型A 或B为NULL时 返回NULL
A [not] between B and C基本数据类型A,B,C一方为NULL时返回NULL
A is NULL所有数据类型A 为 NULL时返回true
A [not] like Bstring 类型正则匹配

2关于浮点数的比较

 select * from `tbl_name` where num > 0.2

假设num 在模式定义中为float类型, 那么这条语句,会把num = 0.2的记录也输出。这是为什么呢?

0.2默认的存储方式是double。所以num与0.2进行比较时,要隐式的从float转换成double,由于浮点数在计算机内存IEEE标准存储的.所以float 0.2只是看起来和0.2是一样的,但是实际上还是有一些精度损失的。

解决方案
1.将num的模式变为double
2.将 0.2 转换为float : cast (0.2 as float)
3.使用decimal数据类型表示定点数

3.like和RLike

** like和Rlike的区别是 Rlike可以使用java中正则表达式的规则。**

3.group by 语句

分组语句通常和聚合语句一起使用

hiving 语句

对分组后的记录进行条件过滤

4. Join语句

Hive中只支持等值连接

1.内连接(inner join)

只有进行连接的两个表中都存在与连接标准相匹配的数据是才会被保留下来。

2.左外连接(left out join)

左表中符合连接标准的记录会被保存下来

3.右外连接(right out join)

左表中符合连接标准的记录会被保存下来

4.全外连接(full out join)

返回所有表中符合记录的语句。是左连接和右连接的并集

5.左半开连接(left semi join)

返回左表中的记录,且该记录符合on的条件。此时select和where中不能出现右表的字段名称。

6.笛卡尔积(join)

相当于双重for循环

map side join

如果所有表只有一张表是小表,可以在mapper时将小表缓存到内存中,达到优化的效果
从hive v0.7版本开始,hive就废弃了这种标记方式,但是依旧是有用的。如果不加上这个标记,那么用户需要设置hive.auto.convert.join = true,hive在必要时启动这个优化。

	// 开启优化
	set hive.auto.convert.join = true

	// 可以被map join 优化的最大表的文件大小
	set hive.mapjoin.smalltable.filesize = MAXSIZE

	d是小表
	select /* MAPJOIN(d)*/  ... from stock s join dividends d on...

4.JOIN优化

1.进行多表连接时,假如连接的键是相同的话,那么hive将会进行优化,只启动一个MR。
2.在进行连接时,表的规模应该是从左到右依次递增
3.map-side JOIN。

5 order by 和 sort by

  1. order by: 对数据进行全局排序
  2. sort by: 对每个reduce的结果进行排序(达到局部有序的效果)

6 含有sort by 的distrubute by

7 cluster by

8 类型转化

强制类型转换函数 cast(value as TYPE), 类型不符合时 hive会返回NULL。

9.抽样查询

10. union all

union all 可以将两个和多个表进行合并,但是每一张表中对应的列应该完全相同。
union 去重求并集 。
union all 求全部的并集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值