- 一、Hive中的数据库
- (1)创建数据库
- (2)查看Hive中包含的数据库
- (3)USE命令
- (4)删除数据库
- 二、Hive中的表
- 1、数据类型
- 2、分隔符
- 3、建表语句
- (1)建表语句
- (2)自定义行分隔符
- (3)列分隔符
- (4)整理
- 4、装载数据
- 三、查询语法
- 1、SELECt…FROM…WHERe…语句
- 2、聚合函数
- 3、排序
Hive会为每个数据库在HDFS创建一个目录。 数据库中的表将会以这个数据库目录的子目承形式存储。有一个例外就是自带的default数据库,这个数据库没有自己的目录。
代码如下(示例):
CREATE DATAbase school; CREATE DATAbase IF NOT EXISTS school;
IF NOT EXISTS子句是可选的,如果数据库school已经存在的话,那么会抛出一个错误信息。加入IF NOT EXISTS子句可以避免这种情况下抛出错误信息。
(2)查看Hive中包含的数据库代码如下(示例):
SHOW DATAbaseS;(3)USE命令
USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念。
代码如下(示例):
USE school;(4)删除数据库
代码如下(示例):
DROp DATAbase school; DROP DATAbase IF EXISTS school; DROP DATAbase IF EXISTS school CASCADE;
IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库school不存在而抛出的警告信息。
另外Hive是不允许删除一个包含有表的数据库。用户要么先删除数据库中的表再删除数据库,要么在删除命令的最后加上CASCADE关键字,CASCADE关键字可以使Hive自行先删除数据库中的表,再删除数据库。
| 数据类型 | 长度 | 例子 |
|---|---|---|
| TINYINT | 1byte有符号整数 | 10 |
| SMALINT | 1byte有符号整数 | 10 |
| INT | 1byte有符号整数 | 10 |
| BIGINT | 1byte有符号整数 | 10 |
| BOOLEAN | 布尔类型 | TRUE、FALSE |
| FLOAT | 单精度浮点数 | 1.0 |
| DOUBLE | 双精度浮点数 | 1.0 |
| STRING | 字符串 | “abcd” |
| TIMESTAMP | 日期,时间戳或者字符串 | 13584697223或者2021-12-25 1:12:23 |
| ARRAY | 一组有序字段,类型必须相同 | Array(1,2) |
| MAP | 一组无序的键值对 | Map(‘a’,1,‘b’,2) |
| STRUCT | 一组命名的字段,字段类型可以不同 | Struct(‘a’,1,1,2) |
| 分隔符 | 描述 |
|---|---|
| n | 行分隔符 |
| ^A | 列分隔符 |
| ^B | ARRAY、MAP、STRUCT中元素之间的分隔符 |
| ^C | MAP中KEY和VALUE之间的分隔符 |
代码如下(示例):
CERAT TABLE student;(2)自定义行分隔符
代码如下(示例):
LINES TERMINATED BY 'n'(3)列分隔符
列分隔符要放到以下子句后边
子句(示例):
ROW FORMAT DELIMITED
自定义列分隔符
代码如下(示例):
FIELDS TERMINATED BY ' ' (设置空格为列分隔符)
自定义集合分隔符
代码如下(示例):
COLLECTION TERMINATED BY ' ' (设置空格为集合分隔符)
自定义Map分隔符
代码如下(示例):
MAP TERMINATED BY ' ' (设置空格为Map分隔符)(4)整理
完整建表代码(示例):
CREATE TABLE IF NOT EXISTS student( id INT COMMENT '序号', name STRING COMMENT '名字' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';4、装载数据
把HDFS的数据装载进表
代码如下(示例):
LOAD DATA INPATH '/hive/student.txt' INTO TABLE student;
在LOAD后添加LOCAL关键字,那么这个路径就是本地(Linux) 文件系统路径,文件将会被上传到表目录中。(本地数据装载进表)
代码如下(示例):
LOAD DATA LOCAL INPATH '/home/hadoop/hive/teacher.txt' INTO TABLE teacher;
在INTO后添加OVERWRITE关键字,那么表目录中的数据会先被删除。也就是说没有OVERWRITE时装载数据是进行追加操作,有OVERWRITE时装载数据时进行覆盖操作。(本地数据覆盖进表)
代码如下(示例):
LOAD DATA LOCAL INPATH '/home/hadoop/hive/teacher.txt' INTO TABLE OVERWRITE teacher;
三、查询语法 1、SELECT…FROM…WHERe…语句
SELECt是HiveQL中的查询语句,FROM子句标识了从哪个表选择记录,WHERe子语句通过谓词表达式设置过滤条件。
| Hive中的谓词操作符 |
|---|
| 操作符 | 支持的数据类型 | 描述 |
|---|---|---|
| A=B | 基本数据类型 | 如果 A 等于 B则返回TRUE否则返回FALSE |
| A<>B,A!=B | 基本数据类型 | 如果 A 不等于 B则返回TRUE否则返回FALSE |
| A>B,A=B,A<=B | 基本数据类型 | 如果 A 大于/小于/大于等于/小于等于 B则返回TRUE否则返回FALSE |
| A IS NULL | 所有数据类型 | 如果 A 等于NULL则返回TRUE否则返回FALSE |
| A IS NOT NULL | 所有数据类型 | 如果 A 不等于NULL则返回TRUE否则返回FALSE |
| A BETWEEN B AND C | 基本数据类型 | 如果 A 大于等于 B 并且小于等于 C 则返回TRUE否则返回FALSE |
| A IN (B,C) | 所有数据类型 | 如果 A 等于 B 或 C 则返回TRUE否则返回FALSE |
对于字符串类型可以使用LIKE进行模糊查询,其中%匹配任意个字符,_匹配一个字符。'x%'表示以字母x开头; '%x’表示以字母x结尾; '%x%'表示包含字母x。
多个查询条件之间可以使用AND或者OR拼接,AND表示并且,OR表示或者。
所有的查询条件都可以使用NOT进行取反操作。
案例
代码如下(示例):
SELECt * FROM student; SELECt * FROM student WHERe age > 20; SELECt * FROM student WHERe age != 20; SELECt * FROM student WHERe name link 'a%'; SELECt * FROM student WHERe age >= 20 AND age <=21; SELECt * FROM student WHERe age BETWEEN 20 AND 21;2、聚合函数
| 常用的Hive的内置聚合函数 |
|---|
| 返回值类型 | 函数 | 描述 |
|---|---|---|
| BIGINT | count(*) | 计算总行数,包含NULL值的行 |
| DOUBLE | sum(col) | 计算指定行的值的和 |
| DOUBLE | avg(col) | 计算指定行的值的平均数 |
| DOUBLE | min(col) | 计算指定行的最小值 |
| DOUBLE | max(col) | 计算指定行的最大值 |
案例
代码如下(示例):
SELECt COUNT(*) FROM student; SELECt AVG(age) FROM student; SELECt MIN(age) FROM student; SELECt MAX(age) FROM student;3、排序
ASC 升序(默认),DESC 降序
ORDER BY:全局排序
代码如下(示例):
SELECt * FORM student ORDER BY age ASC; SELECT * FROM student ORDER BY age DESC;



