Skip to content

DML数据操作

1. Load加载数据

Load语句可将文件导入到Hive表中。

  1. 语法
sql
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)];

关键字说明:

  • local:表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表。
  • overwrite:表示覆盖表中已有数据,否则表示追加。
  • partition:表示上传到指定分区,若目标是分区表,需指定分区。
  1. 加载数据到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;

查看数据 Alt text 加载远程数据 Alt text 查看数据 Alt text

2. Insert操作

2.1 将查询结果插入表中

  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插入表中

  1. 语法
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 将查询结果导出到目标文件

  1. 语法
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实例之间的数据迁移。

  1. 语法
sql
-- 导出
EXPORT TABLE tablename TO 'export_target_path'

-- 导入
IMPORT [EXTERNAL] TABLE new_or_original_tablename FROM 'source_path' [LOCATION 'import_target_path']