DML数据操作
1. Load加载数据
Load语句可将文件导入到Hive表中。
- 语法
sql
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)];
关键字说明:
local
:表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表。overwrite
:表示覆盖表中已有数据,否则表示追加。partition
:表示上传到指定分区,若目标是分区表,需指定分区。
- 加载数据到student表
sh
## 准备数据
[jack@hadoop102 ~]$ vi /tmp/hive/datas/student2.txt
5 haha
6 周瑜
7 朱凤莲
8 蒋介石
9 罗非鱼
10 利可君
使用load命令在dbeaver客户端中加载数据,需要注意的是使用local
关键字加载数据文件的路径不是本地环境(如windows),而是hive所处的环境
sql
load data LOCAL inpath '/tmp/hive/datas/student2.txt' INTO TABLE student;
查看数据 加载远程数据
查看数据
2. Insert操作
2.1 将查询结果插入表中
- 语法
sql
INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement;
关键字说明:
INTO
:将结果追加到目标表OVERWRITE
:用结果覆盖原有数据 比如将student表数据插入到student1中:
sql
-- 新建一张表
create table student1(
id int,
name string
)
row format delimited fields terminated by '\t';
-- 根据查询结果插入数据
INSERT overwrite TABLE student1
SELECT id,name FROM student;
2.2 将给定Values插入表中
- 语法
sql
INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
插入数据到student1表中:
sql
INSERT INTO TABLE student1 VALUES(1, 'wangwu'), (2, '小王');
2.3 将查询结果导出到目标文件
- 语法
sql
INSERT OVERWRITE [LOCAL] DIRECTORY directory
[ROW FORMAT row_format] [STORED AS file_format] select_statement;
比如将student表数据写到/tmp/datas/data.json中:
sql
INSERT overwrite LOCAL directory '/tmp/datas/data1' ROW format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
SELECT id,name FROM student;
查看执行结果:
sh
[jack@hadoop102 data1]$ cd /tmp/datas/data1
[jack@hadoop102 data1]$ cat 000000_0
{"_col0":1,"_col1":"阿茂"}
{"_col0":2,"_col1":"杰霸霸"}
{"_col0":3,"_col1":"圆圆"}
{"_col0":4,"_col1":"团子"}
3. Export&Import
Export导出语句可将表的数据和元数据信息一并到处的HDFS路径,Import可将Export导出的内容导入Hive,表的数据和元数据信息都会恢复。Export和Import可用于两个Hive实例之间的数据迁移。
- 语法
sql
-- 导出
EXPORT TABLE tablename TO 'export_target_path'
-- 导入
IMPORT [EXTERNAL] TABLE new_or_original_tablename FROM 'source_path' [LOCATION 'import_target_path']