Hive内/外表浅析及常用数据导入导出

内部表/外部表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table),默认创建内部表;
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己指定,若未指定则存储位置同内部表;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
创建内部表a:

CREATE TABLE a (  
    id int,  
    name string,  
    area string  
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';  

在这里插入图片描述
创建外部表b:

CREATE EXTERNAL TABLE b (  
    id int,  
    name string,  
    area string,  
    code string  
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

创建外部表c,指定目录:

CREATE EXTERNAL TABLE c (  
    id int,  
    name string,  
    area string,  
    code string  
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' location '/hive/b '; 

在这里插入图片描述
数据文件(sourceA.txt):
1,zhao,BJ
2,qian,SH
3,sun,HZ
4,li,SD
5,zhang,SC
数据文件(sourceB.txt):
1,zhao,BJ,11
2,qian,SH,22
3,sun,HZ,33
4,li,SD,44
5,zhang,SC,55
装载数据
本地文件:

LOAD DATA LOCAL INPATH '/home/hadoop/sourceA.txt' INTO TABLE a; 
LOAD DATA LOCAL INPATH '/home/hadoop/sourceB.txt' INTO TABLE b;

HDFS文件:
将sourceB.txt传到HDFS中, /hive/sourceB.txt中
在这里插入图片描述

LOAD DATA INPATH '/hive/sourceB.txt' INTO TABLE c;

在这里插入图片描述
查看表中数据:
在这里插入图片描述
查看hive表在hdfs上的存储位置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除外部表c,查看数据是否还存在:
在这里插入图片描述
在这里插入图片描述
重新创建表c不导入数据直接查询:
在这里插入图片描述

Hive数据导出的方式

导出到本地文件系统

hive> INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/output' ROW FORMAT DELIMITED FIELDS TERMINATED by ',' select * from a;  

在这里插入图片描述
导出到HDFS
导入到HDFS和导入本地文件类似,去掉HQL语句的LOCAL就可以了

hive> INSERT OVERWRITE DIRECTORY '/hiveoutput' ROW FORMAT DELIMITED FIELDS TERMINATED by ',' select * from a;  

在这里插入图片描述
采用hive的-e和-f参数来导出数据。
参数为: -e 的使用方式,后面接SQL语句,>>后面为输出文件路径

hive -e "select * from a" >> /home/hadoop/output/testA.txt  

在这里插入图片描述
参数为: -f 的使用方式,后面接存放sql语句的文件。>>后面为输出文件路径
SQL语句文件:

cat /home/hadoop/output/msql.sql   
select * from a;  

使用-f参数执行:

hive -f /home/hadoop/output/msql.sql >> /home/hadoop/output/testB.txt  

在这里插入图片描述
EXPORT
将数据导出到HDFS

 hive>export table a to '/hivea';

在这里插入图片描述
IMPORT
导入数据

hive> import from '/hivea';

在这里插入图片描述
重命名表名:

  1. import table d from ‘/hivea’;
    在这里插入图片描述
    注:
    1.Hive启动报错:
    Exception in thread “main” java.lang.NoSuchMethodError: com.ibm.icu.impl.ICUBinary.getRequiredData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
    at com.ibm.icu.charset.UConverterAlias.haveAliasData(UConverterAlias.java:131)
    at com.ibm.icu.charset.UConverterAlias.getCanonicalName(UConverterAlias.java:525)
    at com.ibm.icu.charset.CharsetProviderICU.getICUCanonicalName(CharsetProviderICU.java:126)
    at com.ibm.icu.charset.CharsetProviderICU.charsetForName(CharsetProviderICU.java:62)
    at java.nio.charset.Charset$2.run(Charset.java:412)
    at java.nio.charset.Charset$2.run(Charset.java:407)
    启动时加上参数:–skiphbasecp
    详情参考
    2.hive交互时遇错
    FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
    1)重新格式化数据库
    2)要确保metastore的运行

    在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值