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


相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
96 3
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
110 0
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
211 1
|
7月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
271 0
|
7月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
306 0
|
7月前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1159 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
67 0
|
5月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。