大家好,欢迎来到IT知识分享网。
首先小编给大家介绍一下表的几种类型:管理表,外部表,临时表
如下图:
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个以上会报如下错误
解决办法就是修改配置参数:
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′,’-‘,”)
赶快试试新技能吧~ 记得点赞收藏,有什么问题留言给我!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6228.html