更新时间:2025-07-14 GMT+08:00

配置Hive表分区动态覆盖

操作场景

Hive的分区表将数据按照指定的分区字段(如日期、地域等)存储在不同的目录下。动态分区覆盖功能允许用户在插入数据时,基于查询结果动态确定要覆盖的分区,无需提前静态指定所有分区值。当执行insert overwrite语句时,Hive会根据查询结果中的分区字段值,找到对应的分区目录,先删除该目录下原有数据,再写入新数据,从而实现分区数据的更新。

在旧版本中,使用insert overwrite语法覆写分区表时,仅支持对指定的分区表达式进行匹配,未指定表达式的分区将被全部删除。在Spark2.3版本中,增加了对未指定表达式的分区动态匹配的支持,此种语法与Hive的动态分区匹配语法行为一致。

配置参数

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager

  2. 选择“集群 > 服务 > Spark2x/Spark > 配置”,单击“全部配置”,搜索并调整以下参数。

    参数

    参数说明

    取值示例

    spark.sql.sources.partitionOverwriteMode

    当前执行insert overwrite命令插入数据到分区表时,支持两种模式:STATIC模式和DYNAMIC模式。

    • STATIC模式下,Spark会按照匹配条件删除所有分区。
    • DYNAMIC模式下,Spark按照匹配条件匹配分区,并动态匹配没有指定匹配条件的分区。

    DYNAMIC

  3. 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
  4. Spark服务端配置更新后,如果“配置状态”为“配置过期”,则需重启组件以使配置生效。

    图1 修改Spark配置

    在Spark服务概览页面,选择“更多 > 重启服务/滚动重启服务”,验证管理员密码后,等待服务重启成功。

    如果使用Spark客户端提交任务,修改了集群的参数“spark.sql.sources.partitionOverwriteMode”后,需要重新下载客户端才能使配置生效,请参考使用MRS客户端

    组件重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。