2021-4-14hive之错误总结

11 篇文章 0 订阅

本篇是2021年4月上半月遇到的一些问题和解决方案,思考,注意点,以备以后自己忘记可以快速查询,定位类似错误并解决。

 1、hive低版本,可能不太支持有的地方嵌套子查询,比如case when中,

例如:

case 

     when  exp   then  (子查询)

     when  exp  then (子查询)

     else  value

     end  as  alias

还比如在where 条件中也不能出现子查询

select   name from   A   where  id   =   (select   id  from  B  where...)

报错误:subquery  在这个语法中不被支持

原因:hive版本过低

有的公司致力于稳定,hive一直没有进行升级、更新,这两种语法在mysql中均可正常执行,高版本hive可使用

解决办法:当然不可能升级hive拉~

使用join来解决,说白了就是关联几张表,条件关联好,比如上述case when 中,把子查询的结果通过表在from后面关联,直接 then table_alias.field,

具体代码不再做展示,具体需求sql在公司电脑上,最好是有示例哈哈,后面会补上~

2、join和left join区别

之前总是记忆于理论,当真正思考数据的起源和处理过程的时候,就要认真思考了。

select A from b  join  c  on b.id=c.id  这个是其实是省略了inner ,是内连接,如果不加连接条件,即视为笛卡尔积

select  A  from  b  left  join  c  on  b.id=c.id 这个是左外连接,实际上是以左表为主表,以关联条件作为桥梁进行关联,而右表关联不上的,则为null

说是这么说,实际上体现在数据上的效果就是,

内连接+条件===》求差集,数据记录可能会变少

左外连接+条件====》以左表为主进行关联,以关联条件作为桥梁进行关联,而右表关联不上的,则为null

我遇到个需求是这样的,从一张表(分区全量表)里取每天的积分,作为近30天积分的变化

我开始使用的是join  on 抽取近30天分区每个分区的积分,最后仔细一思考,这样数据可能会丢失啊,有新的用户进来,

我如果这样子使用join on会求交集,使数据丢失,虽然大数据,数据量很多,少一些无所谓,但是要秉持一丝不苟的精神,

于是我换成了left join,有些查不到的,就给他null吧

3、hive建表默认储存格式为textfile

一般我们建表都会储存为orc,一个节省空间,二个处理(倒腾)数据效率高一些,不容易出现一些错误。

我这几天建表就建的默认,出现了一些问题~。。~

扩展小知识:

hive常见的几种存储格式:

textfile:建表默认格式

parquet:不支持文件split,压缩比高,数据源支持丰富

orc:支持文件切片,压缩占比高,列式存储,支持复杂数据

建表语句:

create table  stu

(id string,

name string,

age int,

score float)

stored as orc;

4、创建静态分区,往静态分区中插入数据

create table(...) partitioned by(pt string)

插入数据

一般数据处理都是insert into/overwrite  select 即以查替插,千万记住,查和插入的表不能都是它自己

一般我们都会建个app_...   的中间结果表

insert  into/overwrite(记住是write重写  写 write,我今天有个脚本,用的overrite,找了半天错误) table_name partition(pt=20210414)

select .....

load 数据进表

load data local inpath('d:/...) into table tb_name  partition (pt='20210414') 将本地数据源load到hive表中

load data inpath.....  将hdfs数据源load到hive表中

load方法一般用于自己demo测试时用

5、插入数据时,记得占位符的个数要和数据源的字段匹配

我将数据从hive的表导到mysql时

写的insert into 语句,占位符的个数没有和从hive中查出来的字段的个数相等

导致报错:需要13个参数,但是query只提供了12个

解决方法:使hive查出来字段要和占位符?个数相等,且记得占位符问号是英文,字段插入顺序要一致

6、清空表数据时,使用truncate table tb_name  代替delete from table_name

更多学习、面试资料尽在微信公众号:Hadoop大数据开发 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常意味着Hive不能找到所需的执行jar包。你可以尝试以下几个步骤: 1. 检查Hive的配置是否正确,并确保`hive-exec-*.jar`文件存在于`/opt/module/apache-hive-1.2.1-bin/lib/`目录中。如果不存在,你可能需要重新安装Hive。 2. 检查你的环境变量是否正确设置。确保`HIVE_HOME`指向正确的Hive安装目录,并将`$HIVE_HOME/bin`添加到`$PATH`中。 3. 如果你正在使用Hadoop集群,请确保Hive和Hadoop的版本兼容。不同版本的Hive可能需要不同版本的Hadoop支持。 4. 如果你正在使用远程Hive服务器,请确保你的客户端能够访问Hive服务器,并且Hive服务器上的配置正确。 如果以上步骤都没有解决问题,你可能需要查看Hive的日志文件,以确定更具体的错误信息。 ### 回答2: 在Hive中执行任务时,可能会遇到"Missing Hive Execution Jar"错误,表示Hive无法找到所需的hive-exec-*.jar文件。这个问题通常发生在缺少Hive的执行文件或文件位置错误的情况下。 要解决这个问题,可以按照以下步骤进行操作: 1. 首先,确保在指定的路径/opt/module/apache-hive-1.2.1-bin/lib/中存在hive-exec-*.jar文件。如果文件确实存在,那么可能是权限问题导致Hive无法读取该文件。可以使用chmod命令修改文件权限,确保Hive可以访问该文件。 2. 如果文件确实存在,并且权限设置正确,但Hive仍然无法找到该文件,可以尝试重新设置Hive的环境变量。在Hive的配置文件中(通常是hive-env.sh或hive-site.xml),检查hive.exec.jar路径的设置。确保该路径正确地指向hive-exec-*.jar文件所在的位置。 3. 最后,可以通过重新安装Hive来解决该问题。在重新安装之前,确保彻底卸载Hive,并删除掉相关的文件和目录,然后重新安装最新版本的Hive。 总之,解决"Missing Hive Execution Jar"错误的关键是确保hive-exec-*.jar文件存在且位置正确,并检查Hive的环境变量和配置文件中的设置是否正确。如果问题仍然存在,可以尝试重新安装Hive来解决该问题。 ### 回答3: 缺少Hive执行Jar包:/opt/module/apache-hive-1.2.1-bin/lib/hive-exec-*.jar。 这个错误表示在指定的路径中缺少Hive执行Jar包。Hive使用这个Jar包来执行Hive查询和任务。 要解决这个问题,首先需要确认是否正确安装了Hive,并且路径设置正确。如果路径不正确,可以在Hive的配置文件中更正路径。 另外,还需要确认是否存在这个Jar包,并且该Jar包的版本与Hive的版本兼容。需要确保Hive执行Jar包与所使用的Hive版本匹配,否则可能会出现兼容性问题。 如果确保了路径和版本都是正确的,但依然缺少该Jar包,可以尝试重新下载并安装Hive。在安装过程中,确保将Hive执行Jar包正确地放置在指定的路径下。 如果还是无法解决问题,可能需要查看Hive的日志文件以获取更多详细的错误信息。根据日志中的具体错误,可以进一步排查可能的原因,并采取相应的解决措施。 总结来说,缺少Hive执行Jar包的错误是由于路径设置不正确或Jar包版本不兼容引起的。通过检查路径配置、重新下载安装和查看日志文件等步骤,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值