hive 可以通过分区缩小数据集,避免全表扫描,提高查询速度和性能的。
Hive 的分区主要有两种:静态分区 和 动态分区
Hive静态分区
Hive的静态分区,实际上就是手动指定分区的值为静态值,这种对于小批量的分区插入比较友好。
在插入语句中如果partition字段指定了具体 的值 ,例如:partition(year=“2020”)
这样的分区就叫静态分区了,是不是很简单?
Hive动态分区
Hive的动态分区,其实就是把静态分区中的分区值设置为动态的值
insert overwrite table dynamic_partition partition(year=year)
select user_id, user_name, year from demo
语句中partition(year=year)会根据具体值的变化而变化,无需手动指定,这对于大批量的分区插入是一个很方便的用法,但需要根据业务需求衡量分区数量是否合理的问题。毕竟分区会占用IO资源,数量越多,IO资源消耗越大,查询时间和性能都是有所损耗的。
开启动态分区配置:
-- Hive默认配置值
-- 开启或关闭动态分区
hive.exec.dynamic.partition=false;
-- 设置为nonstrict模式,让所有分区都动态配置,否则至少需要指定一个分区值
hive.exec.dynamic.partition.mode=strict;
-- 能被mapper或reducer创建的最大动态分区数,超出而报错
hive.exec.max.dynamic.partitions.pernode&