连接查询,只支持等值链接
- 内连接
select * from t_a a inner join t_b b on a.id=b.id;
概念:将符合两边连接条件的数据查询出来
- 左连接
select * from t_a a left join t_b b on a.id=b.id;
概念:
1.以左表数据为匹配标准
2.匹配不上的右边表数据显示为null
3.返回的数据条数与左表相同
- 右连接
select * from t_a a right join t_b b on a.id=b.id;
概念:
1.以右表数据为匹配标准
2.匹配不上的左边表数据显示为null
3.返回的数据条数与右表相同
- 左半连接
select * from t_a a right join t_b b on a.id=b.id;
概念:
因为hive不支持in/exists操作(1.2.1版本的hive开始支持in的操作),所以用该操作实现,并且是in/exists的高效实现
- 全连接
select * from t_a a full join t_b b on a.id=b.id;
概念:
全连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一边表数据显示为null。如果表之间有匹配行,则整个结果集行包含基表的数据值
- in关键字
select * from t_a a where a.id in (select id from t_b);
概念:效果等同于left semi join
- exists关键字
select * from t_a a where exists (select 1 from t_b b where a.id = b.id);
概念:效果等同于left semi join
hive支持两种数据类型,原子数据类型和复杂数据类型
1.Hive不支持日期类型,在Hive里日期都是用字符串来表示的,而常用的日期格式转化操 作则是通过自定义函数进行操作
2.Hive是用Java开发的,Hive里的基本数据类型和Java的基本数据类型也是一一对应的,除了String类型
3.有符号的整数类型:TINYINT、SMALLINT、INT和BIGINT分别等价于 Java的Byte、Short、Int和Long原子类型,它们分别为1字节、2字节、4字节和8字节有符号整数
4.Hive的浮点数据类型FLOAT和DOUBLE,对应于Java的基本类型Float和 Double类
5.Hive的BOOLEAN类型相当于Java的基本数据类型Boolean
6.Hive的String类型相当于数据库的Varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数
- 复杂数据类型包括数组(ARRAY)、映射(MAP)和结构体(STRUCT)
1.ARRAY:ARRAY 类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。比如有一个ARRAY类型的变量fruits,它是由[‘apple’,‘orange’,‘mango’]组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的下标是从0开始的
2.MAP:MAP包含key->value键值对,可以通过key来访问元素。比如”userlist”是一个map类型,其中username是key,password是 value;那么我们可以通过userlist[‘username’]来得到这个用户对应的password
3.STRUCT:STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如user是一个STRUCT类型,那么可以通过user.address得到这个用户的地址