Hive学习---3、DML(Data Manipulation Language)数据操作、查询(一)

简介: Hive学习---3、DML(Data Manipulation Language)数据操作、查询(一)

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 逻辑否


相关文章
|
5月前
|
SQL 分布式计算 Hadoop
创建hive表并关联数据
创建hive表并关联数据
37 0
|
5月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
80 0
|
20天前
|
SQL HIVE
Hive【Hive学习大纲】【数据仓库+简介+工作原理】【自学阶段整理的xmind思维导图分享】【点击可放大看高清】
【4月更文挑战第6天】Hive【Hive学习大纲】【数据仓库+简介+工作原理】【自学阶段整理的xmind思维导图分享】【点击可放大看高清】
17 0
|
3月前
|
SQL 消息中间件 Kafka
Flink部署问题之hive表没有数据如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
5月前
|
SQL 消息中间件 存储
案例:Flume消费Kafka数据保存Hive
案例:Flume消费Kafka数据保存Hive
68 0
|
5月前
|
SQL 存储 关系型数据库
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
105 0
|
5月前
|
SQL 分布式计算 Java
Hive【Hive(三)查询语句】
Hive【Hive(三)查询语句】
|
5月前
|
SQL 分布式计算 Hadoop
Hive【Hive(二)DML】
Hive【Hive(二)DML】
|
5月前
|
SQL 分布式计算 MaxCompute
Apache Flink目前不支持直接写入MaxCompute,但是可以通过Hive Catalog将Flink的数据写入Hive表
Apache Flink目前不支持直接写入MaxCompute,但是可以通过Hive Catalog将Flink的数据写入Hive表
60 3
|
6月前
|
SQL 分布式计算 数据管理
聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起
聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起