hive配置的优化以及概念解读,新技能get,你值得拥有!「建议收藏」

hive配置的优化以及概念解读,新技能get,你值得拥有!「建议收藏」**a.外部表**:使用external关键字并且制定location分隔符为‘\t’是外部表。外部表的特点:删除表之后数据依然存在,重建表之后

大家好,欢迎来到IT知识分享网。

hive配置的优化以及概念解读,新技能get,你值得拥有!「建议收藏」

配置升级

首先小编给大家介绍一下表的几种类型:管理表,外部表,临时表

如下图:

hive配置的优化以及概念解读,新技能get,你值得拥有!「建议收藏」

a.外部表:使用 external 关键字并且制定location(表数据在HDFS中的逻辑地址)分隔符为‘\t’ 是外部表。外部表的特点:删除表之后数据依然存在,重建表之后依然可以查询,图中表里加了partition(分区),一定要注意的是:外部表删除表虽然不会将数据文件删除但是表中创建了partition 在重建表之后还需要使用alter table tableName add(drop) partition (etl_date=’20170701′); 添加partition 这样表里的数据才能重新提供查询;

b.管理表:去掉关键字external 执行后即创建管理表,管理表:在删除表后数据文件也会随之删除;

c.临时表:关键字TEMPORARY 替换 external, 临时表不支持分区字段和索引。

by the way,在写入表数据时 可以使用INSERT INTO table tableName 和 INSERT overwrite table tableName 前者会续写不覆盖之前的数据,后者是重写表即先删后插。

小编使用最多的是外部表,因为数据安全系数比较高,并且多张表可以共用同一块元数据,使用率高。下面就介绍一下动态创建分区的相关知识点

以上图的表为例:

INSERT overwrite table temp_test partition(etl_date)

select

“a”,

“b”,

“20”,

“20170701”

from tableName;

可以看出查询的字段比源表多一个字段,最后一个字段就是动态插入的partition的值,一般是通过查表里的某个字段进行动态插入。

使用此方法必须得在语句执行前设置参数:set hive.exec.dynamic.partition=true;(默认使用动态分区) set hive.exec.dynamic.partition.mode=nonstrict;(无限制模式,默认是strict模式)

另外特别注意:动态创建分区达到100个以上会报如下错误

hive配置的优化以及概念解读,新技能get,你值得拥有!「建议收藏」

动态分区创建超过100以上报错界面

解决办法就是修改配置参数:

SET hive.exec.max.dynamic.partitions=2048; (一个DML语句允许创建的所有分区的最大数量,默认值:1000)

SET hive.exec.max.dynamic.partitions.pernode=256;(每一个mapreduce job允许创建的分区的最大数量,如果超过了这个数量就会报错,默认值:100)

SET hive.exec.max.created.files=100000;(一个DML操作可以创建的文件数,默认:100000)

以上设置超过默认值后就是报错!

是时候来一波配置的优化了:

在sql语句中经常会遇到聚合函数,所以必须使用group by,hive又不支持使用字段别名来分组,例子如下:

select a,case when b is null then ‘unkonwn’ else b end as b1,count(1) from temp_test group by a,b1; 这种写法是错误的,b1字段无法识别

若修改成 select a,case when b is null then ‘unkonwn’ else b end as b1,count(1) from temp_test group by 1,2; 这样是不是会很有效率,很方便。

没错它可以实现,通过修改hive-site.xml配置文件添加

<property>

<name>hive.groupby.orderby.position.alias</name>

<value>true</value>

<description>Whether to enable using Column Position Alias in Group By or Order By</description>

</property>

修改生效后即可就能实现上面所说的执行方法,赶快试一试吧!会大大提高工作效率~

最后再介绍几个hive的函数给大家吧:

a.时间戳转换成string:date_format(“2017-07-01 20:01:00″,”yyyyMMdd”)

b.字符替换函数:regexp_replace(‘2015-01-01′,’-‘,”)

hive配置的优化以及概念解读,新技能get,你值得拥有!「建议收藏」

赶快试试新技能吧~ 记得点赞收藏,有什么问题留言给我!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6228.html

(0)
上一篇 2022-12-17 11:20
下一篇 2022-12-17 11:40

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信