hive实战问题指南

2020-10-27  本文已影响0人  林挺挺

hive常见问题指南

函数使用

          1.lateral view explode的使用

          2.join操作

hive设置

         1.压缩

                   中间压缩

                   最终输出结果压缩

          2.跨集群

函数使用

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指向本集群

上一篇下一篇

猜你喜欢

热点阅读