配置Hive表分区动态覆盖
操作场景
Hive的分区表将数据按照指定的分区字段(如日期、地域等)存储在不同的目录下。动态分区覆盖功能允许用户在插入数据时,基于查询结果动态确定要覆盖的分区,无需提前静态指定所有分区值。当执行insert overwrite语句时,Hive会根据查询结果中的分区字段值,找到对应的分区目录,先删除该目录下原有数据,再写入新数据,从而实现分区数据的更新。
在旧版本中,使用insert overwrite语法覆写分区表时,仅支持对指定的分区表达式进行匹配,未指定表达式的分区将被全部删除。在Spark2.3版本中,增加了对未指定表达式的分区动态匹配的支持,此种语法与Hive的动态分区匹配语法行为一致。
配置参数
- 登录FusionInsight Manager系统。
详细操作请参考访问集群Manager。
- 选择“集群 > 服务 > Spark2x/Spark > 配置”,单击“全部配置”,搜索并调整以下参数。
参数
参数说明
取值示例
spark.sql.sources.partitionOverwriteMode
当前执行insert overwrite命令插入数据到分区表时,支持两种模式:STATIC模式和DYNAMIC模式。
- STATIC模式下,Spark会按照匹配条件删除所有分区。
- DYNAMIC模式下,Spark按照匹配条件匹配分区,并动态匹配没有指定匹配条件的分区。
DYNAMIC
- 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
- Spark服务端配置更新后,如果“配置状态”为“配置过期”,则需重启组件以使配置生效。
图1 修改Spark配置
在Spark服务概览页面,选择“更多 > 重启服务/滚动重启服务”,验证管理员密码后,等待服务重启成功。
如果使用Spark客户端提交任务,修改了集群的参数“spark.sql.sources.partitionOverwriteMode”后,需要重新下载客户端才能使配置生效,请参考使用MRS客户端。
组件重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。