数据导入
向表中装载数据(Load)
load data [local] inpath '数据的 path' [overwrite] into table student [partition (partcol1=val1,…)];
- load data:表示加载数据
- local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表
- inpath:表示加载数据的路径
- overwrite:表示覆盖表中已有数据,否则表示追加
- into table:表示加载到哪张表
- student:表示具体的表
- partition:表示上传到指定分区
实操案例
- 创建一张表
create table student(id string,name string) row format delimited fields terminated by '\t';
在目录下新建一个 student.txt 的文件
里面内容如下:
加载本地文件到 hive
load data local inpath '/root/student.txt' into table student;
加载 HDFS 文件到 hive 中
上传文件到 HDFS
dfs -put /root/student.txt /user/root/hive;
加载 HDFS 上数据
load data inpath '/user/root/hive' into table student;
加载数据覆盖表中已有的数据
- 上传文件到 HDFS
dfs -put '/root/student.txt' '/user/root/hive';
- 加载数据覆盖表中已有的数据
load data inpath '/user/root/hive' overwrite into table student;
通过查询语句向表中插入数据(Insert)
- 创建一张表
create table student_par(id int,name string) row format delimited fields terminated by '\t';
- 基本插入数据
insert into student_par values(1,'wangwu'),(2,'zhaoliu');
- 基本模式插入(根据单张表查询结果)
insert overwrite table student_par select id,name from student;
insert into:以追加数据的方式插入到表或分区,原有数据不会删除 insert overwrite:会覆盖表中已存在的数据
注意:insert 不支持插入部分字段
查询语句中创建表并加载数据(As Select)
- 根据查询结果创建表(查询的结果会添加到新创建的表中)
create table if not exists student3 as select id,name from student;
创建表时通过 Location 指定加载数据路径
- 上传数据到 hdfs 上
dfs -mkdir /student;
dfs -put /root/student.txt /student;
- 创建表,并指定在 hdfs 上的位置
create external table if not exists student5(id int,name string) row format delimited fields terminated by '\t' location '/student';
数据导出
Insert 导出
将查询的结果导出到本地
insert overwrite local directory '/root/hivedata' select * from student;
将查询的结果导出到 HDFS 上(没有 local)
insert overwrite directory '/root/hivedata' select * from student;
Hadoop 命令导出到本地
dfs -get /user/hive/warehouse/dome1.db/student3 /root/hivedata;