hive load data外部表报错_Hive基础之外部表

在hive创建表的语法中有一个关键字是EXTERNAL,该关键字表示表的类型,在hive中一共有两种类型的表:管理表和托管表(外部表)。如果没有加EXTERNAL关键字,则创建表都是管理表。

1.管理表信息

如何查看一张表是管理表还是托管表呢?可以使用desc命令:

(default

其他的信息暂且不看,其中有一行信息是Table Type: MANAGED_TABLE,这个就是指示表的类型的,可以看出这张表是管理表。

2.外部表

下面我们创建一张外部表,创建外部表只需在原有的建表语句上增加EXTERNAL关键字。

(default

可以看到外部表emp_ext已经创建成功了,我们看一下该表的详细描述信息:

(default

可以看到该表的表类型描述为Table Type: EXTERNAL_TABLE,表明该表是一张外部表。

3.管理表与外部表的区别

那么外部表和管理表最大的区别在哪呢?对于大公司网站的日志,一般会有专门的部门来进行日志处理,处理完后会将日志保存到hdfs中,比如保存的路径如下:
/hdfs/sitelog ​
20190212.txt
​ 20190213.txt
​ 20190214.txt
现在有两个业务部门:数据挖掘和机器学习,他们都需要对这个日志进行分析,如果以管理表的方式存储在hive中,那么hdfs上的文件路径会如下:
/user/dept1/hive
​ 20190212.txt
​ 20190213.txt
​ 20190214.txt
/user/dept2/hive
​ 20190212.txt
​ 20190213.txt
​ 20190214.txt
这样本来在hdfs上每个文件保存有三份,如果使用管理表,那么每个文件将会保存9份,对存储空间造成极大的浪费。这个时候就需要使用外部表的特性,外部表在创建表的时候可以指定数据文件的路径,比如/hdfs/sitelog,后面如果不需要使用该表的时候可以删除该表,但是不会删除数据。而管理表在删除表的时候会将数据一起进行删除。

管理表与外部表的区别如下:

887a3639c38bfee6af8696137aefce39.png

4.创建外部表

我们通过指定hdfs路径的方式创建外部表,然后不通过load的方式加载数据。

(default

location中指定的目录不存在也没有关系,但是上级目录一定要有访问权限,否则会报错。下面创建目录并将数据放入目录中:

(default

然后我们查询一下该表:

(default

可以看到数据已经加载进来,但是我们并没有进行load数据,所以对于外部表只要将数据文件放到对应的目录下,该外部表就可以正常访问,这也是企业中常用的做法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值