一、Hive中的数据库
(1)创建数据库
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自行先删除数据库中的表,再删除数据库。
二、Hive中的表
1、数据类型
数据类型 | 长度 | 例子 |
---|
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) |
2、分隔符
分隔符 | 描述 |
---|
\n | 行分隔符 | ^A | 列分隔符 | ^B | ARRAY、MAP、STRUCT中元素之间的分隔符 | ^C | MAP中KEY和VALUE之间的分隔符 |
3、建表语句
(1)建表语句
代码如下(示例):
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子语句通过谓词表达式设置过滤条件。
操作符 | 支持的数据类型 | 描述 |
---|
A=B | 基本数据类型 | 如果 A 等于 B则返回TRUE否则返回FALSE | A<>B,A!=B | 基本数据类型 | 如果 A 不等于 B则返回TRUE否则返回FALSE | A>B,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、聚合函数
返回值类型 | 函数 | 描述 |
---|
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;
|