概述
本篇是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之错误总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复