Hive复杂查询

连接查询,只支持等值链接

  • 内连接
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得到这个用户的地址

你可能感兴趣的:(Java大数据)