hive实战遇到问题指南

函数使用

1.lateral view explode的使用

在处理hive表的时候,遇到行转多列的需要,就需要lateral view explode。
使用:这条语句仅限跟在表名之后,如果有where条件那就只能再搞个子查询了。
explode()函数的参数必须为array类型。很多情况下,如果字段是字符型,也可以采用split函数的结果作为explode的输入。
在某个字段上使用这个函数的时候,需要注意该字段是否存在null值。如果该字段为null值,这个explode操作之后整条记录会丢失。如果需要保证不丢失,那么lateral view outer explode就是最好的选择了,相应的字段会用null值填充。

2.join操作

对于 a left join b的情况,需要注意表b中参与join的字段是否存在重复。left join的结果记录条数应当和左表的条数一样多,但是当右表关联的字段存在重复的时候,会使得结果表记录条数变多,因为重复的字段会多次join。
还要注意的一点是join的字段不要存在null值。这点很重要。如果在job的监控上发现reduce阶段有一个特别慢,除了数据倾斜等原因外,需要查看数据是否存在null值。

hive设置

1.压缩

中间压缩

set hive.exec.compress.intermediate=true;  --对中间数据进行压缩可以减少job中map和reduce任务间的数据传输量
set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; --也可自行选择GZ压缩

最终输出结果压缩

set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; --这里选择了GZ压缩

2.跨集群

a、要建有partition的表
b、建表时location指定当前集群和数据路径(如果不希望自动加分区,则可以选择不写)
c、加分区时location指定数据所在真实位置(host不能省)
d、要删除表或分区要使其location指向本集群

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值