Hive内部表与外部表,数据导入,数据导出
程序员文章站
2022-05-09 13:09:25
...
区别
1,内部表数据由Hive自身管理,外部表数据由HDFS管理
2,删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
3,内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse); 外部表数据的存储位置由
自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,
并将属于这个表的数据存放在这里);
创建方式
内部表:(默认)
create table tb_user(
uid string ,
name string ,
gender string ,
age int
)
row format delimited fields terminated by ","
location "/test/"; --指定HDFS中的文件夹
外部表:(external)
create external table tb_user2(
uid string ,
name string ,
gender string ,
age int
)
row format delimited fields terminated by ","
location "/test/";
关键字
location :指定表在HDFS上的存储位置。
在建表的时候没有使用location关键字 ,表的默认目录在HDFS上的配置只hive.metastore.warehouse.dir的数据库文件夹中:
直接将文件数据上传到该表目录下即可查询
导入数据
1,导入本地数据(load)
load data local inpath "本地结构化文件的路径" into table tb_name ;
2,导入HDFS数据 (会将文件剪切到表的工作目录下)
load data inpath "本地结构化文件的路径" into table tb_name ;
3,覆盖导入(overwrite)
load data local inpath "" overwrite into table tb_name ;
4,insert导入
//手动插入
insert into tb_name valeus () , () ,() ,()
//查询其他表的数据追加
insert into tb_name select .... 将后面的select运算结果保存到某个表中
//查询其他表的数据覆盖
insert overwrite table tb_name select ....
insert 语法 不要一条一条数据的insert 因为一次insert在HDFS中生成一个小文件
5,create as 将结果数据直接保存在一个新的表中
create table if not exists tb_phone
as select * from tb_product where cate = '手机' ;
6,import 一定是导出的数据才能导入
导出数据到HDFS中
export table tb_product to
'/user/hive/warehouse/export/product';
导入数据方式
import table tb_product2 from
'/user/hive/warehouse/export/product';