数据操作 (DML 操作)

主要说明一些常用的数据操作的方法,本地数据导入到hive 和通过hive 导出数据到指定的文件等操作。

文档地址 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

加载本地数据

1
load data [local] inpath '数据的path' [overwrite] into table table_name [partition (partcol1=val1,…)];
  • load data 加载数据

  • local 表示磁盘数据

  • inpath 跟着数据的路径

  • partition 表示数据的分区

  • overwrite 表示是否覆盖数据

  1. 在磁盘上创建一个数据文件
1
2
3
4
1 小明
2 小红
3 小绿

  1. 创建一个表
1
2
create table user_2(id int,name string) row format delimited fields terminated by ' '  lines terminated by '\n';

  1. 执行本地文件的数据导入
1
load data local inpath '/home/hadoop/user.txt' into table user_2;
  1. 最终查询结果

+————+————–+
| user_2.id | user_2.name |
+————+————–+
| 1 | 小明 |
| 2 | 小红 |
| 3 | 小绿 |
+————+————–+

通过查询结果插入数据

通过将其他表的查询结果来插入到另外的一个表中。

在将外部表的数据通过查询插入到一个内部表比较有用

核心语句 :

  • insert into 追加的方式
  • insert overwrite 覆盖的方式
  1. 创建一个表
1
2
3
create table user_3(id int,name string,age int) row format delimited fields terminated by ' '  lines terminated by '\n';


  1. 插入数据
1
2
insert into user_3(id,name,age) values (8,'张三',10);

  1. 将其他表的数据导入
1
insert into table  user_3  select id,name,10 from user_2;
  1. 查看结果

+————+————–+————-+
| user_3.id | user_3.name | user_3.age |
+————+————–+————-+
| 8 | 张三 | 10 |
| 1 | 小明 | 10 |
| 2 | 小红 | 10 |
| 3 | 小绿 | 10 |
+————+————–+————-+

  1. 覆盖的方式从其他表中导入
1
insert overwrite table  user_3  select id,name,10 from user_2;
  1. 查看结果

+————+————–+————-+
| user_3.id | user_3.name | user_3.age |
+————+————–+————-+
| 1 | 小明 | 10 |
| 2 | 小红 | 10 |
| 3 | 小绿 | 10 |
+————+————–+————-+
3 rows selected (0.465 seconds)

导入数据到指定的hive表中

通过import 关键字,导入的文件需要是导出的文件。

用来导入导出的数据

1
import table student2  from '/user/hive/warehouse/export/student';

导出数据到本地文件

insert overwrite 导出

通过insert overwrite local 导出

1
insert overwrite local directory '/home/hadoop/user_3_export.txt'  select * from user_3;

同样的,在执行导出的时候可以指定导出的格式.

row format delimited fields terminated by ‘ ‘
lines terminated by ‘\n’

1
2
insert overwrite local directory '/home/hadoop/user_3_export.txt'  row format delimited fields terminated by '$'  lines terminated by '\n'  select * from user_3;

输出的格式

1
2
3
4
1$小明$10
2$小红$10
3$小绿$10

导出的结果会有一个文件夹,文件夹中存放这数据文件

去掉local 将会把文件输出到hdfs上

hive shell 导出

1
bin/hive -e 'select * from test_1.user_3;' >  /home/hadoop/user_3_export_4.txt;

这种方式导出的不是目录,而是直接是文件

export

export 和 import 2个命令时相对的,一般import 用来导入 export的数据

需要在hive命令中执行

1
2
3

export table test_1.user_3 to '/data/user_3_export_5';

注意此命令导出的是hdfs上的目录

表数据清空

1
truncate table student;