hive 错误记录

本博客用于记录在工作中遇到的错误,以作备忘,如有错误,欢迎指正。谢谢!

1.SemanticException [Error 10146]: Cannot truncate non-managed table test_null.

truncate table test_null;//test_null是一个外部表

truncate 不能删除外部表数据。原因:内部表数据由hive自身管理,但是外部表的数据并不由外部表管理,删除表时,内部表会连同数据一起删除,外部表只会删除元数据,而不会hdfs下的删除数据文件。

解决办法:如果该表存在分区,1.使用alter 删除分区,alter table table_name drop partition(p_data='20181219');2.删除hdfs上的数据。

2.mysql 中的substr函数使用

substr 的start 从1开始,如果写的是0,那么这个执行这个函数的结果是空 使用这个函数进行比较时,写成substr(utime,1,8) >'20170331'

3.mysql 导入hive出现:

原因:

1.mysql 导入hive中时sqoop中指定的--fields-terminated-by 分隔符与hive建表时的分隔符不一致导致查询出来的整行数据都被插入到第一列。采用字段分隔符时--fields-terminated-by \t  写成了--fields-terminated-by ‘\t’ 导致分隔符与建表时的\t 对不上。

2.MySQL中的某个字段与hive中的对应字段类型不匹配或者无法转化,会导致该列为null。

如果是由于MySQL中的某个字段与hive中的对应字段类型不匹配或者无法转化,会导致该列为null,那么在进行对外部表进行字段类型修改时,修改后表元数据更改,再次查询,出现该字段依然为空。

对于Hive 的分区外部表的已有分区,在对表新增或者修改字段后,相关分区不生效。原因是:表元数据虽然修改成功,但是分区也会对应列的元数据,这个地方不会随表的元数据修改而修改。

处理办法:

有两种

第一种:修改表,然后对于需要生效的分区,先drop 再 add. (或者说:先drop 表在重新建表再添加分区)

第二种:修改表,对需要生效的分区也执行添加或者修改字段的操作,比如:alter table tablename partition(year='2017') add columns(name STRING );

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值