我是靠谱客的博主 过时自行车,最近开发中收集的这篇文章主要介绍2021-4-14hive之错误总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本篇是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大数据开发 

最后

以上就是过时自行车为你收集整理的2021-4-14hive之错误总结的全部内容,希望文章能够帮你解决2021-4-14hive之错误总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部