Hive(六)Hive数据操作DML
数据操作 (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 小明 |
- 创建一个表
1 | create table user_2(id int,name string) row format delimited fields terminated by ' ' lines terminated by '\n'; |
- 执行本地文件的数据导入
1 | load data local inpath '/home/hadoop/user.txt' into table user_2; |
- 最终查询结果
+————+————–+
| user_2.id | user_2.name |
+————+————–+
| 1 | 小明 |
| 2 | 小红 |
| 3 | 小绿 |
+————+————–+
通过查询结果插入数据
通过将其他表的查询结果来插入到另外的一个表中。
在将外部表的数据通过查询插入到一个内部表比较有用
核心语句 :
- insert into 追加的方式
- insert overwrite 覆盖的方式
- 创建一个表
1 | create table user_3(id int,name string,age int) row format delimited fields terminated by ' ' lines terminated by '\n'; |
- 插入数据
1 | insert into user_3(id,name,age) values (8,'张三',10); |
- 将其他表的数据导入
1 | insert into table user_3 select id,name,10 from user_2; |
- 查看结果
+————+————–+————-+
| user_3.id | user_3.name | user_3.age |
+————+————–+————-+
| 8 | 张三 | 10 |
| 1 | 小明 | 10 |
| 2 | 小红 | 10 |
| 3 | 小绿 | 10 |
+————+————–+————-+
- 覆盖的方式从其他表中导入
1 | insert overwrite table user_3 select id,name,10 from user_2; |
- 查看结果
+————+————–+————-+
| 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 | 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 | 1$小明$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 |
|
注意此命令导出的是hdfs上的目录
表数据清空
1 | truncate table student; |


