IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 第六章 HiveQL查询 -> 正文阅读

[大数据]第六章 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 求全部的并集。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:28:56  更:2021-08-11 12:30:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:03:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码