hive外部表和分区表注意事项

外部表操作注意事项

1)分区数据建立外部表
假设在/xhive/table1下有一些分区的数据,此时建立外部分区表:
create external table table1(xxxx) partitioned by(date string) location “/xhive/table1”;
这样子后,数据会查不出来。
解决方法有两种:
使用 msck repair table tbname;(推荐使用)
或是需要手动添加已有的分区,
alter table table1 add partition(date=”月份”);
这样相应的分区数据才能查出来。
2)外部表无法truncate,会报错
3)外部表rename to(重命名),文件目录名字不会修改,而内部表会改变。
4)外部表删除,只是删除了元数据信息,hdfs上的数据还存在,所以彻底删除必须还要删除hdfs上的数据目录。同时这也增加了安全性,防止误删表,所以生产中大多都使用外部表。
5)对内部表修改时会同步到元数据,而对外部表结构或分区修改时,需要进行修复
msck rapair table table_name

分区表操作注意事项

1)分区表新增字段,新字段查询显示NULL
现象:
已存在的分区就算重新插入数据(有新增字段),新增字段也显示不出来;新增加的分区就能显示出来。
原因是修改表结构以后,元数据库中的SDS中该表对应的CD_ID会改变,但是该表已经存在的分区下面对应的CD_ID还是原来表的CD_ID(新增分区就是新的CD_ID所以能显示出来)。
解决办法或者是删除现有分区重入(丢失数据)或者修改SDS表中已存在分区的CD_ID值为新值。
SDS表(保存文件存储的基本信息)
SDS表中CD_ID字段(保存的是字段信息,指向CDS表)
查看该表的CD_ID(假设表名是tb_user)
select CD_ID,LOCATION from SDS where LOCATION like'%tb_user'(注意查询出多条时要根据你的表的位置选出正确的CD_ID和LOCATION值)
假如选出CD_ID值是x1,LOCATION是 x2
可以查看该表的所有CD_ID,确定已存在的分区信息的CD_ID信息是旧的
select CD_ID,LOCATION from SDS where LOCATION like 'x2%'
更新下旧的CD_ID为新值,即可显示新增字段
UPDATE SDS SET CD_ID=x1 WHERE LOCATION LIKE 'x2%'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值