更新时间:2024-07-19 GMT+08:00
        
          
          
        
      
      
      
      
      
      
      
      
  
      
      
      
        
建立表分区
操作场景
Hive在做Select查询时,一般会扫描整个表内容,会消耗较多时间去扫描不关注的数据。此时,可根据业务需求及其查询维度,建立合理的表分区,从而提高查询效率。
操作步骤
- MRS 3.x之前版本:
    
    
登录MRS控制台,在左侧导航栏选择“集群列表 > 现有集群”,单击集群名称。选择“节点管理 > 节点名称” ,进入弹性云服务器界面。单击“远程登录”按钮,完成Hive节点的登录。
MRS 3.x及后续版本:
以root用户登录已安装Hive客户端的节点。
 - 执行以下命令,进入客户端安装目录,例如“/opt/client”。
    
    
cd /opt/client
 - 执行source bigdata_env命令,配置客户端环境变量。
 - 在客户端中执行如下命令,执行登录操作。
    
    
kinit 用户名
 - 执行以下命令登录客户端工具。
    
    
beeline
 - 指定静态分区或者动态分区。
    
    
- 静态分区:
      
静态分区是手动输入分区名称,在创建表时使用关键字PARTITIONED BY指定分区列名及数据类型。应用开发时,使用ALTER TABLE ADD PARTITION语句增加分区,以及使用LOAD DATA INTO PARTITON语句将数据加载到分区时,只能静态分区。
 - 动态分区:通过查询命令,将结果插入到某个表的分区时,可以使用动态分区。
      
      
set hive.exec.dynamic.partition=true;
动态分区默认模式是strict,也就是必须至少指定一列为静态分区,在静态分区下建立动态子分区,可以通过如下设置来开启完全的动态分区:
set hive.exec.dynamic.partition.mode=nonstrict;
 
 
     - 动态分区可能导致一个DML语句创建大量的分区,对应的创建大量新文件夹,对系统性能可能带来影响。
 - 在文件数量大的情况下,执行一个SQL语句启动时间较长,可以在执行SQL语句之前执行“set mapreduce.input.fileinputformat.list-status.num-threads = 100;”命令来缩短启动时间。“mapreduce.input.fileinputformat.list-status.num-threads”参数需要先添加到Hive的白名单才可设置。
 
 - 静态分区:
      
 
   父主题: Hive性能调优