1、DML(Data Manipulation Language)数据操作
1.1 Load
load语句可将文件导入到Hive表中
1、语法
load data [local] inpath 'filepath' [overwrite] into table tablename [partition(partcol1=val1,partcol2=val2...)]
2、关键字说明
(1)local:表示从本地加载数据到Hive表,否则从HDFS加载数据到Hive表。
(2)OverWrite:表示覆盖表中已有的数据,否则表示追加
(3)Partition:表示上传到指定分区,若目标是分区表,需指定分区
3、案例实操
(1)创建一张表
create table student( id int, name string ) row format delimited fields terminated by '\t';
(2)加载本地文件到Hive中
load data local inpath '/opt/module/datas/student.txt' into table student;
(3)加载HDFS文件到Hive中
- 上传文件到HDFS
hadoop fs -put /opt/module/datas/student.txt /user/zhm
- 加载HDFS上数据,导入完成后去HDFS上查看文件是否还存在
load data inpath '/user/zhm/student.txt' into table student;
(4)加载数据覆盖表中已有的数据
load data inpath '/user/zhm/student.txt' overwrite into table student;
1.2 Insert
1.2.1 将查询结果插入表中
1、语法
insert (into | overwrite) table tablename [partition(partcol1=val1,partcol2=val2...)] select_statement
2、关键字说明
(1)Into:将结果追加到目标表中
(2)OverWrite:用结果覆盖原有数据
3、案例
(1)创建一张表
create table student1( id int, name string ) row format delimited fields terminated by '\t';
(2)将查询结果插入数据
insert overwrite table student3 select id, name from student;
1.2.2 将给定values插入表中
1、语法
insert (into |overwrite ) table tablename [partition(partcol1=val1,partcol2=val2)...] values values_row[,values_row...]
2、案例
insert into table student1 values(1,'zhm'),(2,'zhm1');
1.2.3 将查询结果写入目标路径
1、语法
insert OverWrite [local] Directory directory [row format rwo_format] [stored as file_format] select_statement
2、案例
insert overwrite local directory '/opt/module/datas/student' ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe' select id,name from student;
1.3 Export&Import
Export导出语句可将表的数据和元数据信息一并导出到HDFS路径,Import可将Export导出的内容导入Hive,表的数据和元数据信息都会恢复。Export和Import可用于两个Hive实例之间的数据迁移。
1、语法
--导出 export table tablename To 'export_target_path' --导入 Import [external] table new_or_original_tablename from 'source_path' [location 'import_target_path']
2、案例
--导出 export table default.student to '/user/hive/warehouse/export/student'; --导入 import table student2 from '/user/hive/warehouse/export/student';
2、查询
2.1 基础语法
select [all|distinct] select_expr,select_expr,... from table_name --从哪个表查 [where where_condition] --过滤 [group by col_list] --分组查询 [having col_list] --分组后过滤 [order by col_list] --排序 [cluster by col_list | [distribute by col_list] [sort by col_list]] [limit number] --限制输出的行数
2.2 基本查询(select…from)
2.2.1 全表查询和特定列查询
1、全表查询
select * from emp;
2、选择特定列查询
select empno, ename from emp;
注意:
(1)SQL语言的大小写不敏感
(2)SQL可以写在一行或多行
(3)关键字不能被缩写也不能分行
(4)各子句一般要分行写
(5)使用缩进提高语句的可读性
2.2.2 列别名
(1)重命名一个列
(2)便于计算
(3)紧跟列名,也可以在列名和别名之间加入关键字‘as’
select ename AS name, deptno dn from emp;
2.2.3 Limit 语句
典型的查询会返回多行数据。Limit子句用于限制返回的行数
select * from emp limit 2,3; -- 表示从第2行(不包括)开始,向下抓取3行
2.2.4 Where语句
(1)使用where子句将不满足条件的行过滤
(2)where子句紧随from子句
注意:where 子句中不能使用别名
--查询出薪水大于1000的所有员工 select * from emp where sal > 1000;
2.2.5 关系运算符
1、基本语法
如下操作符主要用于where和having语句中
操作符 | 支持的数据类型 | 描述 |
A=B | 基本数据类型 | 如果A等于B则返回true,反之返回false |
A<=>B | 基本数据类型 | 如果A和B都为null或者都不为null,则返回true,如果只有一边为null,返回false |
A<>B, A!=B | 基本数据类型 | A或者B为null则返回null;如果A不等于B,则返回true,反之返回false |
A<B | 基本数据类型 | A或者B为null,则返回null;如果A小于B,则返回true,反之返回false |
A<=B | 基本数据类型 | A或者B为null,则返回null;如果A小于等于B,则返回true,反之返回false |
A>B | 基本数据类型 | A或者B为null,则返回null;如果A大于B,则返回true,反之返回false |
A>=B | 基本数据类型 | A或者B为null,则返回null;如果A大于等于B,则返回true,反之返回false |
A [not] between B and C | 基本数据类型 | 如果A,B或者C任一为null,则结果为null。如果A的值大于等于B而且小于或等于C,则结果为true,反之为false。如果使用not关键字则可达到相反的效果。 |
A is null | 所有数据类型 | 如果A等于null,则返回true,反之返回false |
A is not null | 所有数据类型 | 如果A不等于null,则返回true,反之返回false |
in(数值1,数值2) | 所有数据类型 | 使用 in运算显示列表中的值 |
A[not]likeB |
string类型 |
B是一个SQL下的简单正则表达式,也叫通配符模式,如果A与其匹配的话,则返回true;反之返回false。B的表达式说明如下:‘x%’表示A包含有字母‘x',可以位于开头,结尾或者字符串中间。如果使用not关键字则可达到相反的效果。 |
A rlike B, A regexp B |
string类型 |
B是基于java的正则表达式,如果A与其匹配,则返回true;反之返回false。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。 |
--查询薪水大于1000,部门是30 select * from emp where sal > 1000 and deptno = 30; --查询薪水大于1000,或者部门是30 select * from emp where sal>1000 or deptno=30; --查询除了20部门和30部门以外的员工信息 select * from emp where deptno not in(30, 20);
2.2.6 逻辑运算函数
1、基本语法
操作符 | 含义 |
and | 逻辑并 |
or | 逻辑或 |
not | 逻辑否 |