Hive内部表与外部表,数据导入,数据导出

区别

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  :指定工作目录。

在建表的时候没有使用location关键字 ,表的默认目录在HDFS上的配置只hive.metastore.warehouse.dir的数据库文件夹中:

直接将文件数据上传到该表目录下即可查询

stored as:指定存储格式

create table log_orc(
track_time string
)
stored as orc ;   --指定orc格式,其他(parquet),都是列式存储格式

压缩比:ORC >  Parquet >  textFile 

导入数据

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';

导出数据

1,insert覆盖导入(会覆盖该文件夹下所有的文件,慎用)

insert overwrite [local] directory '/hive/p2/'  --local:linux ,不指定HDFS
[ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t']   --指定分隔符,不指定默认空格
select * from tb_product;

2,HDFS命令(简单直接,导出到linux本地)

hdfs  dfs  -get  [表工作空间]

3,hive命令(在linux命令行执行,可以用来写脚本)

  hive -e ‘sql’  

 例子:将结果输出到test.txt文件中(一个> 覆盖;两个>>追加)

hive -e 'select * from yege.tb_user;' >> /opt2/test.txt;

  hive -f    执行一个脚本

  例子:新建脚本export_hive.hql,

insert overwrite directory '/opt2' select * from yege.tb_user;

 执行: hive -f  export_hive.hql (导出数据到hdfs,脚本内容只能是在hive shell中的语句)

 

4,export导出工具  (导出到hdfs系统的opt2下面的user文件夹)

export table yege.tb_user to '/opt2/user';

5,数据迁移工具

Sqoop、dataX、Kettle、Canal、StreamSets等

 

 

 

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值